Оператор циклу з передумовою while

Приклад 2.

/* застосування умовного розгалужування */
#include <stdio.h>
main()
{
int number;
int ok;
printf("Введіть число з інтервалу 1..100 : ");
scanf("%d",&number);
ok=(1<=number) && (number<=100);
if (!ok)
printf("Не коректно !!\n");
return ok;
}

 

Змінній ok присвоюється значення результату виразу: ненульове значення, якщо істина, і в протилежному випадку - нуль. Умовний оператор if(!ok) перевіряє, якщо ok дорівнюватиме нулю, то !ok дасть позитивний результат й відтоді буде отримано повідомлення про некоректність, виходячи з контексту наведеного прикладу.


Оператор switch


Синтаксис:

switch(<вираз цілого типу>)
{
case <значення_1>:
<послідовність_операторів_1>;
break;
case <значення_2>:
<послідовність_операторів_2>;
break;
..................................
case <значення_n>:
<послідовність_операторів_n>;
break;
[default:
<послідовність_операторів_n+1>;]
}

Оператор-перемикач switch призначений для вибору одного з декількох альтернативних шляхів виконання програми. Виконання оператора switch починається з обчислення значення виразу, що слідує за ключовим словом switch у круглих дужках. Далі управління передається одному з <операторів>. Оператор, що отримав управління - це оператор, значення константи якого співпадає зі значенням виразу перемикача.

Вітка default (може опускатися) означає, що якщо жодна з вищенаведених умов не задовольнятиметься (тобто вираз цілого типу не дорівнює жодному із значень, що позначені у саse-фрагментах), керування передається по замовчуванню в це місце програми. Треба також зазначити обов'язкове застосування оператора break у кожному з case-фрагментів (цей оператор застосовують для негайного припинення виконання операторів while, do, for, switch), що негайно передасть керування у точку програми, що слідує відразу за останнім оператором у switch-блоці.

Приклад 1:

switch(i)
{
case -1: n++;
break;
case 0: z++;
break;
case 1: p++;
break;
}

Приклад 2:

switch(c)
{
case 'A':
capa++;
case 'a':
lettera++;
default:
total++;
}

В останньому прикладі всі три оператори в тілі оператора switch будуть виконані, якщо значення с рівне 'A', далі оператори виконуються в порядку їх слідування в тілі, так як відсутні break.

 


Оператор while використовується для організації циклічного виконання оператора або серії операторів, поки виконується певна умова.

while (<логічний вираз>)
оператор;

Цикл закінчується у наступних випадках:

- умовний вираз у заголовку приймає нульове значення;

- у тілі циклу досягнуто місця, де розташований оператор break;

- у тілі циклу виконаний оператор 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;
}