Урок С / С ++ 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 виміру швидкості вітру на добу. Вам необхідно ввести