Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

О.О.П / ооп / 4_кол / Лекції / ООП (4. Керуючі конструкції розгалуження)

.doc
Скачиваний:
27
Добавлен:
30.05.2020
Размер:
70.14 Кб
Скачать

Системне програмне забезпечення та операційні системи. Лекція 2.1

Розділ 2: Керуючі конструкції.

Лекція 3: Керуючі конструкції мови програмування С.

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

ПЛАН

  1. Оператори та блоки.

  2. Оператор if – else.

  3. Оператор switch – case.

Керуючі оператори та конструкції мови програмування задають порядок в якому виконуються операції розрахунку в програмі. На цій лекції будуть розглянуті основні керуючі побудови, що існують в мові С.

Оператори та блоки.

На початку потрібно встановити різницю між оператором та виразом як такими з точки зору мови С. Вирази – х=0, і++ або printf (“…”) – стають операторами, якщо після них стоїть крапка з комою. В мові програмування С крапка з комою є елементом оператору і являється його завершуючою частиною, а не розділювачем операторів, як в мові Pascal.

В мові С оператори можуть бути як простими, одинарним, так і складними або складеним – такими, що складаються к кількох простих операторів. Для групування простих операторів у складені або у блоки операторів використовуються фігурні дужки (якщо і далі продовжити проводити аналогії з мовою Pascal, то вони є аналогами операторних дужок begin та end). Операторні блоки синтаксично еквівалентні одному простому оператору.

Оператор ifelse.

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

Конструкція if – else являє собою умовний оператор, що виражає процес прийняття альтернативного рішення. Формальний синтаксис оператора наступний:

if (умова)

{

оператор 1;

}

else

{

оператор 2;

}

Інтерпретація конструкції наступна. Якщо в програмі зустрічається ключове слово if компілятор переходить до аналізу умови, яка слідує за ключовим словом у круглих дужках. Якщо умова повертає значення TRUE (або 1), компілятор переходить до виконання оператору 1, а оператор 2 в такому випадку пропускається. У протилежному випадку, тобто тоді, коли умова не виконується або повертає значення FALSE (або 0) компілятор спрямовує хід програми на виконання оператору 2,який слідує за службовим словом else зрозуміло, що в такому разі ігнорується оператор 1.

У вигляді блок-схеми роботу умовного оператору if – else можна представити наступним чином:

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

If (вираз !=0) або if (вираз).

Наступний приклад ілюструє роботу умовного оператору. У відповідь на запрошення ввести число, користувач вводить значення у запропонованому діапазоні. «Комп’ютерний джин» за допомогою умовного оператора аналізує введене значення та виносить резолюцію – якщо число менше, ніж 5, повідомляє про це.

#include <stdio.h>

#include <stdlib.h>

int main ()

{

char num[2];

int number;

printf (“я твій комп’ютерний джин!\n”);

printf (“введіть число від 0 до 9:”);

gets (num);

number=atoi (num);

if (number<5)

{

printf (“число менше 5-ти!\n”);

}

printf (“джин все бачить, все знає!\n”);

return (0);

}

Слід відмітити, що у випадку, коли введене користувачем значення дорівнює, або більше, ніж 5, на екрані з'являється лише повідомлення про всезнання «джина».

Для того, щоб програма могла вибирати один не з двох можливих варіантів, а з більшої кількості оператор if – else може мати більш складну структуру, послідовність з комбінацій if – else if.

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

if (умова)

{

оператор 1;

}

else if (умова)

{

оператор 2;

}

else

{

оператор 3;

}

наступний_оператор;

Ця послідовність операторів if представляє собою самий загальний засіб прийняття багатоваріантного рішення. Перераховані вирази обраховуються по порядку, у разі, якщо один з них виявиться вірним (істинним), то виконається про асоційований з ним оператор, а ланцюг перевірки умов перерветься. Останній фрагмент даної конструкції обробляє варіант «ніщо з перерахованого».

#include <stdio.h>

#include <stdlib.h>

int main ()

{

char num[2];

int number;

printf (“я твій комп’ютерний джин!\n”);

printf (“введіть число від 0 до 9:”);

gets (num);

number=atoi (num);

if (number<5)

{

printf (“число менше 5-ти!\n”);

}

else if (number==5)

{

printf (“ви надрукували 5!\n”);

}

else printf (“число більше 5-ти!\ n”);

printf (“джин все бачить, все знає!\n”);

return (0);

}

Оператор switchcase.

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

Формальний запис оператору виглядає наступним чином:

switch (вираз) {

case значення 1: блок 1; break;

case значення 2: блок 2; break;

...

default:

блок N; break;

}

Інтерпретація конструкції наступна. Кожен з варіантів (case - блоків) має мітку у вигляді константи з цілим значення. Якщо одна з міток співпадає зі значенням виразу, що зазначений після службового слова switch, керування передається оператору або блоку операторів після цієї мітки. Всі вирази після case повинні бути різними. Кожен оператор або блок операторів обов’язково повинен закінчуватися службовим словом break для того, щоб уникнути переходу на наступний блок або оператор, який не відповідає виконаній умові. Блок default виконується в тому випадку, якщо не було знайдено жодного співпадіння в блоках case. Наявність цього блоку зовсім – якщо він відсутній, і не було не знайдено жодного спів падіння в блоках case, то не буде виконана жодна з інструкцій.

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

#include <stdio.h>

int main ()

{

char c;

printf (“1 - напій\n”);

printf (“2 - льодяники\n”);

printf (“3 – хотдог\n”);

printf (“4 – поп-корн\n”);

printf (“ваш вибір:”);

c=getchar ();

switch (c){

case ‘1’: printf (“напій – 8,0$\n”); break;

case ‘2’: printf (“льодяники – 5,5$\n”); break;

case ‘3’: printf (“хотдог 10,0$\n”); break;

case ‘4’: printf (“поп-корн – 7,5$\n”); break;

default: printf (“це не вірний вибір\n, гадаю ви не голодні\n”); break;

}

return (0);

}

Контрольні питання

  1. Поясніть призначення керуючих конструкцій мови програмування С.

  2. Поясніть різницю між оператором та виразом. В чому полягає, з точки зору мови програмування С призначення крапки з комою?

  3. Який оператор мови С називають умовним? Який його принцип роботи та в чому полягає його призначення?

  4. Наведіть формальний синтаксис та блок схему оператору розгалуження (повної та скороченої форми).

  5. Поясніть принцип роботи оператору перемикача. Який його принцип роботи та в чому полягає його призначення?

  6. Наведіть формальний синтаксис оператору.

Література

Б. Керниган, Д. Ритчи. Язык программирования С. Пер. с англ. – М.: издательский дом «Вильямс», 2003 – 234 с.

Б. Джонс, П. Эйткен. Освой самостоятельно С. Пер. с англ. – М.: издательский дом «Вильямс», 2005 – 800 с.

Э. Кёниг, Б. Му. Эффективное программирование на С++. Серия С++ In Depth. Пер. с англ. – М.: издательский дом «Вильямс», 2002 – 384 с.

7