
3. Оператор циклу з передумовою while
Оператор while використовується для організації циклічного виконання оператора або серії операторів, поки виконується певна умова.
Синтаксис :
while (<логічний вираз>)
оператор;
Рис.
2. Синтаксис
оператора while
Цикл закінчується у наступних випадках :
1. умовний вираз у заголовку приймає нульове значення;
2. у тілі циклу досягнуто місця, де розташований оператор break;
3. у тілі циклу виконаний оператор return;
У перших двох випадках керування передається оператору, розташованому безпосередньо за циклом, у третьому випадку активна на той момент функція завершує свою роботу, повертаючи якесь значення.
Знову ж таки нерідкою помилкою програмістів, що працювали раніше на Паскалі, є використання замість оператора порівняння (==) оператора присвоювання (=). Наприклад, наступний фрагмент створить нескінчений цикл:
/* некоректне використання оператору циклу */
int main(void)
{
int j=5;
while(j=5) /* змінній j присвоїти значення 5 */
{
printf("%d\n",j);
j++;
}
}
Компілятор Сі попередить про некоректне присвоювання в даному випадку, виправити яке особливих труднощів не викличе.
Втім, часто такий цикл використовується для перевірки відповіді користувача на питання з програми ("так чи ні ?"):
/* фрагмент використання while */
printf ("Підтверджуєте ? Так чи ні ?(y/n);");
scanf("%c",&ch);
while (ch!='y' && ch!='n')
{
printf("\n Відповідайте так чи ні . . (y/n);");
scanf("%c",&ch);
}
Тіло циклу почне виконуватися, якщо користувач введе будь-який символ, відмінний від у або n. Цикл виконується доти, доки користувач не введе або 'у' , або 'n'.
Цікаво розглянути й наступний приклад, що застосовує оператор while у функції підрахунку факторіалу:
long factorial(int number)
{ long total; total=number; while (--number) total*=number; return total; }
4. Оператор циклу з постумовою do … while Оператор do…while використовується для організації циклічного виконання оператора або серії операторів, які називаються тілом циклу, до тих пір, поки умова не стане хибною. Синтаксис : do <оператор>; while (<логічний_вираз>);
Рис.
3. Синтаксис
оператора do … while
Ситуації, що призводять до виходу з циклу, аналогічні наведеним для циклу while із передумовою. Характерним є те, що тіло циклу виконається хоча б один раз. На відміну від Паскаля, в якому цикл з постумовою repeat operator until умова виконується, поки умова невірна, цикл do ... while навпаки припиняє виконання, коли умовний вираз обертається в нуль (стає невірним). Приклад 1. printf ("Підтверджуєте ? Так чи ні ?(y/n);"); do scanf("%c",&ch); while (ch!='y' && ch!='n') Приклад 2. #include<stdio.h> #include<conio.h> void main() { int n,i; float fact; printf("Програма обчислення n!.\n"); printf("Введiть число n :\n"); scanf("%d",&n); i = 1; fact = 1; do { fact *= i; i++; } while (i <= n); printf("n!==%g",fact); }
5. Оператор розриву break Синтаксис : break; Оператор розриву break перериває виконання операторів do, for, while або switch. В операторі switch він використовується для завершення блоку case. В операторах циклу - для негайного завершення циклу, що не зв'язане з перевіркою звичайної умови завершення циклу. Коли оператор break зустрічається всередині оператора циклу, то здійснюється негайний вихід з циклу і перехід до виконання оператору, що слідує за оператором циклу. Приклад : main() { int i; for (i=0;i<1000;i++) { printf("%d - %d\n",i,i*i*i); if (i*i*i>=10000) break; } return 0; }
6. Оператор продовження continue Синтаксис : continue; Оператор continue передає управління на наступну ітерацію в операторах циклу do, for, while. Він може розміщуватися тільки в тілі цих операторів. В операторах do і while наступна ітерація починається з обчислення виразу умови. Для оператора for наступна ітерація починається з обчислення виразу зміни значення лічильника. Приклад : while (i-- > 0) { x=f(i); if (x == 1) continue; else y=x*x; } В даному прикладі тіло циклу while виконується якщо i більше нуля. Спочатку значення f(i) присвоюється змінній x;потім, якщо x не рівний 1, то y присвоюється значення квадрата числа х, і управління передається на "заголовок" циклу, тобто на обчислення виразу (i-- > 0). Якщо ж х рівний 1, то виконується оператор продовження continue, і виконання продовжується з "заголовку" оператора циклу while, без обчислення квадрата x.