Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 6_Комбинирование операторов

.pdf
Скачиваний:
30
Добавлен:
14.03.2016
Размер:
387.56 Кб
Скачать

Задание

Определите, что выполняет следующая программа:

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};

i = 0;

while (i < 10)

{

if (arr[i] > 0)

{

printf("%d ", arr[i]); i++;

}

21 }

ВНИМАНИЕ: ОШИБКА

Программа печатает на экран элементы массива arr до первого неположительного элемента:

3

Если в массиве встречается неположительный элемент, то цикл выполняется вечно, т.к. переход к следующему элементу массива (инкремент i) расположен внутри условия и выполняется только если элемент положителен

22

Задание

Определите, что выполняет следующая программа:

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};

for (i = 0; i < 10; i++)

{

printf("%d ", arr[i]);

if (arr[i] > 0)

{

i++;

}

23 }

Дополнительные изменения переменной-счетчика в цикле

Программа будет печатать не все элементы массива arr, т.к. элементы, следующие за распечатанными положительными элементами, будут пропускаться

Исходный массив: 3 -1 4 5 0 7 -2 8 2 0 На экране: 3 4 0 7 8 0

24

Задание

Определите, что выполняет следующая программа:

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};

for (i = 0; i < 10; i++)

{

if (arr[i] > 0)

{

i++;

}

printf("%d ", arr[i]);

25 }

Дополнительные изменения переменной-счетчика в цикле

При печати элементов массива arr программа будет перескакивать через положительные элементы, однако при наличии двух положительных элементов подряд второй будет напечатан:

-1 5 0 -2 2 0

ОШИБКА: если последний (9-й) элемент массива положителен, то программа попытается напечатать несуществующий 10-й элемент, что приведет к выходу за границы массива

26

Задание

Исправьте эту программу так, чтобы избежать ошибки с выходом за границы массива:

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};

for (i = 0; i < 10; i++)

{

if (arr[i] > 0)

{

i++;

}

printf("%d ", arr[i]);

27 }

Ошибочное решение

Если добавлять проверку границ массива к условию, то последний положительный элемент — 1 — будет напечатан, хотя исходная программа его не печатала

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 1};

for (i = 0; i < 10; i++)

{

if (i < 10 && arr[i] > 0)

{

i++;

}

printf("%d ", arr[i]);

28 }

Дополнительные изменения переменнойсчетчика в цикле

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};

for (i = 0; i < 10; i++)

{

if (arr[i] > 0)

{

i++;

}

if (i < 10)

{ printf("%d ", arr[i]); }

}

29

Задание

Определите, что выполняет следующая программа:

int arr[10] = {3, -1, 4, 5, 0, 7, -2, 8, 2, 0};

for (i = 1; i < 10; i++)

{

for (i = 1; i < 10; i++)

{

printf("%2d ", i*i);

}

printf("\n");

30 }