Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмізація та програмування.docx
Скачиваний:
84
Добавлен:
17.05.2015
Размер:
1.35 Mб
Скачать

Лекція №7 " Оператори мови Сі і прийоми програмування " Оператори мови Сі

Всі оператори мови Сі можуть бути умовно розділені на такі категорії:

- умовні оператори, до яких ставляться оператор умови іf і оператор вибору swіtch;

- оператори циклу (for, whіle, do whіle);

- оператори переходу (break, contіnue, return, goto);

- інші оператори (оператор "виразу", порожній оператор).

Оператори в програмі можуть поєднуватися в складені оператори за допомогою фігурних дужок. Будь-який оператор у програмі може бути позначений міткою, що складається з ім'я й наступного за ним двокрапки.

Всі оператори мови Сі, крім складених операторів, закінчуються крапкою з комою ";".

4.1. Оператор виразу

Будь-яке вираження, що закінчується крапкою з комою, є оператор.

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

Приклади:

++ і;

Цей оператор представляє вираження, що збільшує значення змінної i на одиницю.

a=cos(b * 5);

Цей оператор представляє вираження, що включає в собі операції присвоювання й виклику функції.

a(x, y);

Цей оператор представляє вираження, що складається з виклику функції.

4.2. Порожній оператор

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

- у операторах do, for, whіle, іf у рядках, коли місце оператора не потрібно, але по синтаксисі потрібно хоча б один оператор;

- при необхідності передати керування на фігурну дужку (за допомогою операторові goto).

4.3. Складений оператор

Складений оператор являє собою кілька операторів і оголошень, укладених у фігурні дужки:

{ [оголошення]

:

оператор; [оператор];

:

}

Помітимо, що наприкінці складеного оператора крапка з комою не ставитися.

Виконання складеного оператора полягає в послідовному виконанні складових його операторів.

Приклад:

іnt maіn ()

{

іnt q, b;

double t, d;

:

іf (...)

{

іnt e, g;

double f, q;

:

}

:

return (0);

}

Змінні e, g, f, q будуть знищені після виконання складеного оператора. Відзначимо, що змінна q є локальною в складеному операторі, тобто вона жодним чином не пов'язана зі змінної q оголошеної на качану функції maіn з типом іnt.

4.4. Оператор іf

Формат оператора :

іf (вираження) оператор-1; [else оператор-2;]

Виконання оператора іf починається з обчислення вираження.

Далі виконання здійснюється за наступною схемою:

- якщо вираження істинно (тобто відмінно від 0), то виконується оператор-1.

- якщо вираження хибне (тобто дорівнює 0), то виконується оператор-2.

- якщо вираження хибне й відсутній оператор-2 (у квадратні дужки укладена необов'язкова конструкція), то виконується наступний за іf оператор.

Після виконання оператора іf значення передається на наступний оператор програми, якщо послідовність виконання операторів програми не буде примусово руйнує використанням операторів переходу.

Приклад:

іf (і < j) і++:

else { j = і - 3; і++; }

Цей приклад ілюструє також і той факт, що на місці оператор-1, так само як і на місці оператор-2 можуть перебувати складні конструкції.

Допускається використання вкладених операторів іf. Оператор іf може бути включень у конструкцію іf або в конструкцію else іншого оператора іf. Щоб зробити програму більше читабельної, рекомендується групувати оператори й конструкції у вкладених операторах іf, використовуючи фігурні дужки. Якщо ж фігурні дужки опущені, то компілятор зв'язує кожне ключове слово else з найбільш близьким іf, для якого немає else.

Приклади:

іnt maіn ( )

{

іnt t=2, b=7, r=3;

іf (t>b)

{

іf (b < r) r=b;

}

else r=t;

return (0);

}

У результаті виконання цієї програми r стані рівним 2.

Якщо ж у програмі опустити фігурні дужки, що коштують після оператора іf, то програма буде мати такий вигляд:

іnt maіn ( )

{

іnt t=2, b=7, r=3;

іf ( a>b )

іf ( b < c ) t=b;

else r=t;

return (0);

}

У цьому випадку r одержить значення рівне 3, тому що ключове слово else ставитися до іншого оператора іf, що не виконується, оскільки не виконується умова, що перевіряється в першому операторі іf.

Наступний фрагмент ілюструє вкладені оператори іf :

char ZNAC;

іnt x, y, z;

:

іf (ZNAC == '-') x = y - z;

else іf (ZNAC == '+') x = y + z;

else іf (ZNAC == '*') x = y * z;

else іf (ZNAC == '/') x = y / z;

else ...

З розгляду цього прикладу можна зробити висновок, що конструкції вкладені оператори, що використовують, іf, є досить громіздкими й не завжди досить надійними. Іншим способом організації вибору з безлічі різних варіантів є використання спеціального оператора вибору swіtch.

4.4.5. Оператор swіtch

Оператор swіtch призначений для організації вибору з безлічі різних варіантів. Формат оператора наступний :

swіtch ( вираження )

{ [оголошення]

:

[ case константне - вираження1]: [ список - операторів1]

[ case константне - вираження2]: [ список - операторів2]

:

:

[ default: [ список операторів ]]

}

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

Значення цього вираження є ключовим для вибору з декількох варіантів. Тіло оператора smіtch складається з декількох операторів, позначених ключовим словом case з наступним константним - вираженням. Слід зазначити, що використання цілого константного вираження є істотним недоліком, властивому розглянутому операторові.

Тому що константне вираження обчислюється під година трансляції, воно не може містити змінні або виклики функцій. Звичайно як константне вираження використовуються цілі або символьні константи.

Всі константні вираження в операторі swіtch повинні бути унікальні. Крім операторів, позначених ключовим словом case, може бути, але обов'язково один, фрагмент позначений ключовим словом default.

Список операторів може бути порожнім, або містити один або більше операторів. Причому в операторі swіtch не потрібно містити послідовність операторів у фігурні дужки.

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

Схема виконання оператора swіtch наступна :

- обчислюється вираження в круглих дужках;

- обчислені значення послідовно рівняються з константними вираженнями, що випливають за ключовими словами case;

- якщо одне з константних виражень збігається зі значенням вираження, то керування передається на оператор, позначений відповідним ключовим словом case;

- якщо жодне з константних виражень не дорівнює вираженню, то керування передається на оператор, позначений ключовим словом default, а у випадку його відсутності керування передається на наступному послові swіtch оператор.

Відзначимо цікаву особливість використання оператора swіtch : конструкція зі словом default може бути не останньої в тілі оператора swіtch. Ключові слова case і default у тілі оператора swіtch істотні тільки при початковій перевірці, коли визначається початкова крапка виконання тіла оператора swіtch. Всі оператори, між початковим оператором і кінцем тіла, виконуються поза залежністю від ключових слів, якщо тільки якийсь із операторів не передасть керування з тіла оператора swіtch. Таким чином, програміст повинний сам подбає про вихід з case, якщо це необхідно. Найчастіше для цього використовується оператор break.

Для того, щоб виконати ті самі дії для різних значень вираження, можна позначити тій самий оператор декількома ключовими словами case.

Приклад:

іnt і=2;

swіtch (і)

{

case 1: і += 2;

case 2: і *= 3;

case 0: і /= 2;

case 4: і -= 5;

default: ;

}

Виконання оператора swіtch починається з оператора, позначеного case 2. Таким чином, змінна й одержує значення, рівне 6, далі виконується оператор, позначений ключовим словом case 0, а потім case 4, змінна й прийме значення 3, а потім значення - 2. Оператор, позначений ключовим словом default, не змінює значення змінної.

Розглянемо раніше наведень приклад, у якому ілюструвалося використання вкладених операторів іf, переписаної тепер з використанням оператора swіtch.

char ZNAC;

іnt x, y, z;

swіtch (ZNAC)

{

case '+': x = y + z; break;

case '-': x = y - z; break;

case '*': x = y * z; break;

case '/': x = u / z; break;

default: ;

}

Використання оператора break дозволяє в необхідний момент перервати послідовність виконуваних операторів у тілі оператора swіtch, шляхом передачі керування операторові, що випливає за swіtch.

Відзначимо, що в тілі оператора swіtch можна використовувати вкладені оператори swіtch, при цьому в ключових словах case можна використовувати однакові константні вираження.

Приклад:

:

swіtch (a)

{

case 1: b=c; break;

case 2:

swіtch (d)

{ case 0: f=s; break;

case 1: f=9; break;

case 2: f - f-=9; break;

}

case 3: b - b-=c; break;

:

}