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

3.5. Оператори мови с

3.5.1. Прості оператори

Порожній оператор. Синтаксис: ;. Використовується у випадку, коли за синтаксисом вимагається наявність оператора. Наприклад:

for(;;);

Остання крапка з комою – це порожній оператор. Він необхідний синтаксично, оскільки в операторі for після закриваючої круглої дуж­ки обов'язково має стояти якийсь оператор (зазвичай складений, що містить кілька інших операторів, які задають тіло циклу). Оскільки в даному випадку відсутні будь-які оператори, то необхідно поставити крапку з комою – порожній оператор.

Складений оператор. Синтаксис: {}. Він відіграє величезну роль при написанні програм, дозволяє синтаксично об'єднувати кілька операторів до одного цілого, що вважається одним оператором. В одному складеному може бути кілька простих операторів присвоювання:

{

a=4;

b=5;

c=6;

}

Складений оператор може містити оголошення та визначення. Як буде детальніше розглянуто далі, визначені змінні мають локальну область дії, тобто є доступними лише в межах даного складеного оператора. Складений оператор може містити інші складені оператори. Наприклад:

{int i=5

j++;

{float i=4;

i+=5}

}

3.5.2. Умовний оператор

Умовний оператор відіграє ключову роль при описі алгоритмів, що мають структуру типу розгалуження. Синтаксис:

if(<умовний вираз>)<оператор1>[else<оператор2>]

Оператор діє так: якщо <умовний вираз> виявиться істинним значенням (а таким значенням ув мові С вважається будь-яке число, відмінне від нуля), то виконується <оператор1>. У протилежному випадку, за наявності необов'язкової конструкції [else<оператор2>], виконується <оператор2>. Наприклад:

if(a>5)i++;

else j++;

Допускається послідовне використання оператора:

if(i>j)i++;

else

if(i==j)j++;

else printf("the end");

За такої інтерпретації оператор else пов'язується з найближчим оператором if, у якого відсутня конструкція else. Останній фрагмент програми:

if(i>j)i++;

else

{if(i==j)j++;

else printf("the end');}

Використання складеного оператора в такому випадку робить програму більш читабельною.

Зауважимо, що на відміну від інших мов програмування, Сі не містить ключового слова then. Ті, хто вивчає Сі, уже знаючи мову Pascal, дуже часто роблять помилки, наприклад у такому фрагменті програми:

if(x>2)

then x=2;

Умови в операторах if (а також while) мають братися в круглі дужки. Тому в наступному рядку буде помилка:

ifx<1x=1;

3.5.3. Оператор циклу for

Оператор for використовується для запису алгоритмів із циклічною структурою і несе в мові С особливе навантаження. Синтаксис:

for([<початковий вираз>];[<умовний вираз>];[<вираз-приріст>])<оператор>

Оператор діє так. Спочатку обчислюється <початковий вираз>, потім перевіряється <умовний вираз>, у випадку його істинності виконується <оператор>, а після цього – <вираз-приріст>. Однак <початковий вираз>, <умовний вираз>, <вираз-приріст> можуть бути відсутніми. Обов'язковою є лише наявність <оператора> (синтаксично мають бути наявні відповідні крапки з комою). Якщо умовного виразу немає, то значення його вважається істинним. Тому мінімальний оператор for має вигляд for(;;);.

Зазвичай <початковий вираз> на практиці використовується для початкової ініціалізації змінних, <умовний вираз> визначає умову виконання оператора, що задає тіло циклу, а <вираз-приріст> задає умову зміни змінних, що використовуються в циклі, наприклад як лічильники. Нехай нам необхідно кілька разів надрукувати повідомлення "Hello, world". Для цього використаємо оператор for:

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

printf("Hello,world\n");

Відповідне повідомлення надрукується 10 разів. При цьому у <початковому виразі> ініціалізуються одразу дві змінні – i та j.

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

Розглянемо таку задачу. Нехай необхідно надрукувати рядок довжиною WIDTH, у якому спочатку міститься x0 символів '-', потім w символів '*', і до кінця рядка – знову символи '-':

Це можна запрограмувати так:

int x;

for(x=0;x<x0;++x) putchar('-');

for(;x<x0+w;x++) putchar('*');

for(;x<WIDTH;++x) putchar('-');

putchar('\n');

або

for(x=0;x<WIDTH;x++)

putchar(x<x0?'-':

x<x0+w?'*':

'-');

putchar('\n');

Допоміжні змінні, які не мають змісту (напр., лічильник повторення циклу, що не використовується в самому тілі циклу), прийнято позначати однією літерою, наприклад i,j. Можна навіть написати так:

main(){

int_;

for(_=0;_<10;_++) printf("%d\n",_);

}

(підкреслювання в ідентифікаторах – рівноправна літера).