Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Бичков - Основи сучасного програмування.doc
Скачиваний:
69
Добавлен:
07.03.2016
Размер:
2.67 Mб
Скачать

3.5.4. Оператори do-while, while

Поряд з оператором for для запису циклічних алгоритмів використовуються також оператори do-while та while. Синтаксис:

while(<вираз>)<оператор>

Дія: поки істинний <вираз>, виконується <оператор>. Синтаксис:

do<оператор>while(<вираз>)

Дія: виконується <оператор>, поки істинний <вираз>.

Для уявлення про відмінність у цих операторах розглянемо два простих фрагменти програм:

1

int i=10;

while(i>0)

{i--;

printf("%d',i);

}

2

int i=10;

do

{i--;

printf("%d',i);

}

while(i>0);

В обох фрагментах друкується значення змінної і, починаючи з 10, однак у першому останнім надрукованим значенням є "0", а в другому – "-1". Дійсно, у другому фрагменті спочатку виконується тіло оператора, а вже потім перевіряється умовний вираз. Якщо він хибний, то оператор більше не виконується.

При використанні циклів не варто забувати ініціалізувати змінні, що виступають як лічильники. Розглянемо фрагмент програми, у якій деяке повідомлення має друкуватись 10 разів:

main(){/*друк фрази 10 разів*/

int i;

while(i<10){

printf("%d-й раз\n",i+1);

i++;

}

}

Тут автоматична змінна i не проініціалізована й містить не 0, а якесь довільне значення. Цикл може виконуватись не 10, а довільну кількість разів (у тому числі й 0). Тому у відповідному рядку необхідно написати int i=0;

У цьому фрагменті програми було б ще краще використовувати цикл for, у якому всі операції над індексом циклу зібрані в заголовку циклу:

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

3.5.5. Оператор continue

Синтаксис: continue; Передає керування на наступну ітерацію в циклах. Нагадаємо, що в циклах while та do наступна ітерація починається з обчислення умовного виразу, а в операторі for – виразу-приросту (а потім умовного виразу). Розглянемо фрагмент програми:

i=10;

while(i>0)

{

i--;

if (i%2==0) continue;

printf("%d',i);

}

У цьому фрагменті надруковані непарні значення змінної і від 9 до 1. Якщо значення змінної i виявляється парним, то виконується оператор continue, який перериває виконання циклу, і виконується наступ­на ітерація.

3.5.6. Оператор-перемикач switch

Синтаксис:

switch(<вираз>)

{

[оголошення чи визначення]

[case<константний вираз>:<оператор>]

[case<константний вираз>:<оператор>]

[default:<оператор>]

}

Обчислюється <вираз>, потім виконується оператор, що йде за умовою case, для якої значення константного виразу збігається зі значенням початкового <виразу>. Наприклад:

switch(c=getch())

{int i,j,k;

case'a':i++; printf("%d\n',i); break;

case'b':j++; break;

default: k++;}

Залежно від значення c виконуються ті оператори, що визначаються умовою case, тобто якщо с=='a', то виконується

i++; printf("%d\n',i); break;

якщо с=='b', то виконується j++; break; інакше виконується k++;

Відсутність оператора break приведе до того, що після вибору якогось оператора за case-умовою виконуватимуться усі оператори, що стоять після нього, у тому числі й зазначені іншими умовами.

3.5.7. Оператор break

Синтаксис: break; Перериває виконання операторів циклу та switch. Як зазначалося раніше, для того, щоб у фрагменті програми з підрозд. 3.5.8 забезпечити виконання лише одного оператора – case або default, необхідно в кінці кожної групи операторів case ставити break. Наприклад:

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

for(j=0;j<20;j++)

{if(j%5==4) break;

}

При виконанні умови j%5==4 відбувається переривання виконання внутрішнього циклу. При цьому зовнішній цикл за i продовжує виконуватись.