Лекции по проге / 6_Комбинирование операторов
.pdf
Задание
Определите, что выполняет следующая программа:
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 }
