Стаття урок з

Урок С / С ++ 10. Структура вибору

1. Для початку дамо поняття блоку. воно знадобиться нам у багатьох випадках. Блок - це список операторів, укладений у фігурні дужки:



Навіщо він потрібен? Блок дозволяє розглядати кілька операторів як один. Це просто було невеликий відступ, яке ми втратили в попередніх уроках Крім того, в блоці можна визначити змінну, яка буде автоматично знищена при виході з блоку, але з так званими областями видимості і термінами життя змінних ми будемо розбиратися трохи пізніше.

2. If. А тепер перейдемо безпосередньо до конструкції вибору (або розгалуження). Дозволю собі (хай вибачать мене ті, хто читає обидва моїх курсу) тупо повторити частину тексту з уроку за подібною темою курсу VB

Суть вобщем-то проста. У російській мові в повсякденному житті ми використовуємо її постійно. Це наше вельми поширене якщо. Якщо нам подзвонять у двері, ми підемо відкривати. В даному випадку подзвонять у двері - це перевіряється умова. (Пам'ятаєте ще урок про логічні оператори?), А підемо відкривати- це оператор, який буде виконаний ТІЛЬКИ в разі правильності цієї умови. Це найпростіший приклад розгалуження. Яка ж тут гілка? Один оператор дії-звідки ж гілка вийде? Справа в тому що гілка виглядає так: або я йду відкривати --- або я нічого не роблю.

Як цей варіант буде записуватися?

if (логічне вираз)

оператор;

Для нашого випадку:

if (подзвонять у двері = = true)

Підемо відкривати;

Давайте, розглянемо 2 варіанти запису:

if (умова)
оператор1;


Як ми бачимо, у другому випадку, оператори повинні виконуватися як один з-за поставлених дужок блоку (як ми згадували на початку нашого уроку). Таким чином, ми отримуємо дуже істотну різницю при виконанні цих двох варіантів.

У першому випадку при істинному умови виконується оператор1, а оператор 2 виконується В БУДЬ-ЯКОМУ випадку, навіть якщо умова помилкова. Помніте- то, що ми відсунули його відступом на рівень другого оператора-це сигнал тільки для нас, але ніяк не для компілятора. Він вважає, що перший оператор входить в блок if, а ось після;, яка показує закінчення першого оператора, закінчується і весь блок if. І виконується оператор2, який вже ніякого відношення до if не має. Значить, він виконується незалежно від перевіряється умови.

У другому випадку при істинному умови виконуються ОБИДВА оператора. Чому? А тому, що вони об'єднані дужками блоку і виконуються як єдине ціле. А якщо умова ложно- не виконається ні оператор1, ні оператор2. Ось вам і дві маленькі скобочки!

3. If. else. Ускладнити завдання.

Варіант, коли при хибності умови теж повинні виконуватися якісь оператори виглядає так: якщо мені сьогодні треба на роботу - умова істинна - я встану в 7ч, вмиюся, одягнуся, перекушу і поїду на роботу. Якщо не треба умова помилкова (тобто інакше) - я посплю до 10 годин і піду гуляти.

Як це буде виглядати:

if (перевіряється умова)
оператор1 (або блок операторів, як ми вже з'ясували)

else
оператор2 (або блок операторів)

if (робота)
встати в 7ч;

поїхати на роботу;
>
else
сплю до 10год;

// не забудьте вказати до скількох, а то як підете. (
>

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

Далі виконання здійснюється за наступною схемою:
  • якщо вираз істинний (тобто відмінно від 0), то виконується оператор-1.
  • якщо вираз помилково (тобто дорівнює 0), то виконується оператор-2.
  • якщо вираз помилково і відсутній оператор-2. то виконується наступний за if оператор.


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


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

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

int main ()
int t = 2, b = 7, r = 3;


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

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

if (ZNAC == '-') x = y - z;

else if (ZNAC == '+') x = y + z;

else if (ZNAC == '*') x = y * z;

else if (ZNAC == '/') x = y / z;


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

(Примітка від Альфа:
конструкція виду


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

  • Ввести два числа. Менше з них ви повинні замінити сумою введених чисел, большее- різницею. Результати вивести на екран.
  • Ввести число. На екран вивести повідомлення про те чи є це число позитивним, негативним або нулем.
  • Завдання: метеоролог знімає 4 виміру швидкості вітру на добу. Вам необхідно ввести
Ці чотири числа в програму, обчислити середньодобову швидкість вітру і вивести її на екран. ОБОВ'ЯЗКОВО: провести перевірку чисел, що вводяться, щоб не було введено неприпустимого значення (негативного). Якщо це відбудеться не виводити на екран результат (середню швидкість), а вивести повідомлення Неправильний введення даних!

Схожі статті