C если то иначе. Оператор выбора if в языке C
Способность управлять программным потоком позволяет делать выборочное выполнение отдельных участков кода, а это весьма ценная особенность программирования. Оператор выбора if позволяет нам выполнять или не выполнять определенные участки кода,в зависимости от того является ли истинным или ложным условие этого оператора. Одно из самых важных назначений оператора выбора if так это то, что он позволяет программе совершить действие на выбор, в зависимости от того, какие данные ввел пользователь. Банальный пример использования if - это проверка введенного пользователем пароля, если пароль правильный, программа разрешает пользователю совершить какое-то действие, если пароль введен неправильный, то программа не позволит пользователю получить доступ к ограниченным ресурсам.
Без условного оператора программа бы срабатывала раз за разом одинаково, независимо от того, какие входные данные поступали от пользователя. Если же использовать операторы выбора, то результат работы программы может быть намного интереснее, так как он будет зависеть напрямую от входных данных пользователя.
Перед тем как начать разбираться в структуре оператора if , стоит обратить внимание на такие значения как ИСТИНА и ЛОЖЬ в контексте программирования и компьютерной терминологии.
Истинное значение (ИСТИНА ) имеет значение отличное от нуля, ЛОЖЬ эквивалентна нулю. При использовании операторов сравнения, оператор будет возвращать единицу, если выражение сравнения - истинно, или - 0, если условное выражение ложно. Например, выражение 3 == 2 вернет значение 0, так как три не равно двум. Выражение 5 == 5 оценивается как истинное и вернет значение 1. Если вам сложно это понять, попробуйте сделать вывод на экран этих выражений, например: printf ("%d", 7 == 0);
В процессе программирования, часто приходится сравнивать одни переменные с другими и на основе этих сравнений управлять программным потоком. Есть цэлый список операторов, который позволяет выполнять сравнения, вот он:
Скорее всего вы знакомы с этими операторами сравнения, но на всякий случай, я показал их в таблице выше. Они не должны быть сложными для вашего понимания, большинство из этих операторов вы изучили в школе на уроках математики. Теперь вы понимаете, что такое ИСТИНА и ЛОЖЬ , пора испытать оператор выбора if в бою. Структура if:
If (условное выражение) // тут располагается один оператор, который выполнится, если условное выражение - истинно
Вот вам простой пример использования оператора if:
If (7 > 6) printf("Семь больше шести");
В этом примере программа оценивает условное выражение — «семь больше шести?» Чтобы увидеть результат работы этого фрагмента кода просто вставьте его в функцию main() и не забудьте включить заголовок stdio.h , запускаем программу и видим результат - true . Конструкция оператора выбора if c фигурными скобочками:
If (TRUE) { /* весь код который помещен внутрь скобок - выполнится */ }
Если не использовать фигурные скобочки, то к телу оператора if будет относиться только один, первый оператор. Если же необходимо управлять несколькими операторами, то необходимо поместить их в фигурные скобочки. Я рекомендую всегда ставить скобки, после объявления if - это хороший тон программирования и вы никогда не запутаетесь в своем коде, так как такое объявление наиболее понятное.
Оператор else
Иногда, когда условное выражение - ложное, было бы удобно, чтобы выполнялся некоторый код, отличный от того кода,который выполняется при ИСТИННОМ
условии. Как же это делается?
Вот пример использования оператора if else:
If (TRUE) { /* выполняется этот код,если условие истинно */ } else { /* выполняется этот код,если условие ложно */ }
Конструкция else if
Обычно операторы else if используют, когда необходим множественный выбор, то есть например определены несколько условий, которые одновременно могут быть истинными, но нам необходимо только одно истинное условное выражение. Вы можете использовать оператор if else сразу после оператора выбора if , после его тела. В таком случае, если условие первого оператора выбора - ИСТИННО , тогда конструкция else if будет игнорироваться, тогда как в противном случае, если условие первого оператора выбора - ЛОЖНО , начнет выполнятся проверка в конструкции else if . То есть если условие одного оператора if будет истинно, то другие проверяться не будут. Теперь чтобы все это хорошо закрепить в голове и понять, давайте рассмотрим простой пример с использование конструкций операторов выбора.
#include
Рассмотрим интересные условные выражения с использование логических операторов.
Логические операторы позволяют создавать более сложные условные выражения. Например, если вы хотите проверить, является ли ваша переменная больше 0 но меньше 10, в таком случае вам достаточно воспользоваться логическим оператором - И. Вот так это делается - var > 0 and var < 10 . В языке СИ есть точно такой же же оператор, только обозначается он иначе — && .
При использовании операторов if часто необходимо проверить несколько различных условий, поэтому очень важно понимать логические операторы OR, NOT и AND. Логические операторы работают точно так же как и операторы сравнения: они возвращают 0, если имеют ложное значение или 1, если логическое выражение - истинное.
Подробнее о логических операциях вы можете прочитать в .
Пожалуйста, приостановите работу AdBlock на этом сайте.
Теперь, когда с условными выражениями разобрались, можно переходить к основной теме урока – условному оператору .
Шаблон оператора if -- else
Тут возможны два основных варианта:
Листинг 1.
// первый вариант if (условное_выражение) оператор_1; // второй вариант if (условное_выражение) оператор_1; else оператор_2;
Ну и картинки, конечно. Куда же без картинок?
Рис.1 Блок-схемы оператора if-else.
Работает этот оператор так. Вычисляется значение условного выражения. Если получается истина, то выполняется оператор_1 из основной ветки, а если ложь, то либо ничего не происходит (в первом варианте), либо выполняется оператор_2 из побочной ветки (во втором варианте).
Предлагаю сразу на примерах разбираться. Например, как вы думаете, что выведет на экран следующий код? Проверьте свою догадку.
Листинг 2.
#include
Ну да, правильно, он выведет TRUE! . Условие же истинно. Вы же ещё не забыли, что единица – это истина? Я сейчас страшное скажу. Любое ненулевое число воспринимается как истина. Проверьте это самостоятельно.
Ну ладно, а теперь вот такой пример. Что по-вашему выведет данная программа?
Листинг 3.
#include
Надеюсь, вы дали правильный ответ и вас не смутила строчка с выводом FALSE! , которое я специально добавил, чтобы запутать вас. Да, эта программа ничего не выведет. Условие в скобах ложно, а значит, оператор не будет выполнен. Всё по правилам.
Давайте ещё один примерчик, для закрепления. Будьте предельно внимательны, я там подготовил для вас всякого. Итак, что выведет данный код?
Листинг 4.
#include
Верю, что у вас всё получилось! Если не получилось, не расстраивайтесь – ещё будет время потренироваться.
Ну а сейчас давайте о нюансах – они, как обычно, имеются.
В каждой ветке условного оператора может быть записан лишь ОДИН оператор.
Вот, посмотрите на пример.
Листинг 5.
#include
Кажется, что программа должна работать следующим образом. Пользователь вводит целое число. Если число меньше нуля, то меняем его знак на противоположный. В противном случае ничего не делаем. После этого выводим число на экран консоли.
А теперь внимание на экран.
Рис.2 Результат работы программы Листинг 11
Но решение есть! И это решение – составной оператор {} . Если мы заключим несколько операторов в фигурные скобки, то они будут восприниматься как один единый оператор. Поэтому, чтобы программа заработала правильно, добавим в неё составной оператор:
Листинг 6.
#include
Ну вот, теперь всё как надо. Проверьте самостоятельно. Кстати, из опыта. Я вам настоятельно советую всегда использовать фигурные скобки, даже если внутри них будет один оператор. Очень часто это позволяет избежать глупых ошибок.
Внутри управляющей конструкций if-else можно использовать любые конструкции языка, в том числе ещё одну конструкцию if-else .
Вот так например:
Листинг 7.
#include
Думаю, понятно, что используя вложенные условные операторы, вы можете сделать конструкцию аналогичную оператору выбора switch .
Использование вложенных условных операторов порождает ещё одну особенность.
else всегда относится к ближайшему if , у которого нет своего else
Для примера:
Листинг 8.
If (n > 0) if (а > b) z = a; else z = b;
Согласно нашему правилу, else относится к внутреннему (второму) if . Если хотим, чтобы else относился к внешнему (первому) if , то можно воспользоваться составным оператором.
Листинг 9.
If (n > 0) { if (а > b) z = a; } else z = b;
Как я уже упоминал, лучше всегда использовать фигурные скобки, дабы избежать случаев неправильного толкования записи. Искать подобные ошибки в программах очень тяжело. Обратите внимание также на расстановку отступов. Я использую их, чтобы по коду сразу стало ясно, какая ветвь к какому if относится.
Лабораторная Работа
На тему: "Оператор условия if - else "
1. Назначение и синтаксис
Оператор условия if-else служит для выбора направления работы программы в зависимости от условий, сложившихся в данной точке программы на момент ее выполнения.
Общая форма записи условного оператора
if ( <условие>)
<блок операторов 1>;
<блок операторов 2>;
Если на момент выполнения <условие> истинно, программа передает управление <блоку операторов 1> и, далее, первому оператору за пределами конструкции if-else. При этом <блок операторов 2> не выполняется. Иначе, если <условие> ложно, выполняется <блок операторов 2>, а <блок операторов 1> пропускается. Соответствующая блок-схема
Фигурные скобки в синтаксисе оператора if-else используются для выделения в тексте блоков 1 и 2. Старайтесь располагать закрывающую скобку под открывающей для улучшения читаемости программного кода. Для этой же цели текст внутри фигурных скобок необходимо смещать вправо на несколько позиций.
В качестве условия в операторах if-else могут использоваться любые логические выражения, принимающие значения «истинно» или «ложно» (true – false). Ниже приведена таблица с указанием простейших операций сравнения целых и вещественных чисел
Пример 1. Требуется написать программу, переводящую температуру по шкале Цельсия T C (°С) в температуру по Кельвину T K (К). Значение T C вводится пользователем с клавиатуры.
Решение. Используем известную формулу преобразования – T K = T C – T 0 , где T 0 = –273 °С – температура абсолютного нуля. Будем считать введенное T C некорректным, если оно меньше T 0 .
// – KelvinvsCelsius–
#include
#include
#pragma argsused
floatT0 = -273; // объявляем и инициализируем T0
floatTc, Tk; // объявляем вещественные Tc и Tk
cout<<» VvediteTc=»; // выводим приглашение
cin>>Tc; // запрашиваем Tc
if
(
Tc
<
T
0)
// проверяем условие Tc cout<<» Tc < T0!»; // условие истинно, выводим на }
// экран сообщение об ошибке Tk = Tc-T0; // условие ложно, рассчитываем cout << «Tk =» << Tk; // Tk и выводим на экран getch(); // задержка до нажатия на клавишу return 0; // завершение программы Наберите приведенный выше код, откомпилируйте его и запустите программу на выполнение. Исследуйте результаты работы при различных значениях T C
. 2. Сокращенные варианты записи
При программировании обыденной является ситуация, когда требуются некоторое действие в ответ на сложившиеся условия (например, если получены неверные исходные данные от пользователя, то выдать сообщение об ошибке и выйти из программы). В таких случаях в программах на C++ может использоваться сокращенная запись оператора условия с отсутствующим блоком else. Общая форма такой записи if
(
<условие>)
<блок операторов>; Здесь в случае истинности условия управление передается блоку операторов в фигурных скобках. В случае ложности условия этот блок пропускается. Соответствующая блок-схема отличается от предыдущей отсутствием одного «плеча» Другой вариант сокращения применяется в случае, когда какой-либо из блоков if или else состоит только из одного оператора. В этом случае допускается отсутствие фигурных скобок, ограничивающих этот блок. if
(
<условие>)
оператор 1; оператор 2; Здесь в качестве операторов 1 и 2 могут быть не только простые однострочные арифметические действия или операторы ввода-вывода, но и сложные многострочные конструкции, например другие (вложенные) операторы условия или операторы цикла, которые будут рассмотрены ниже. 3. Вложенные операторы
Операторы условия могут быть вложенными друг в друга, в соответствии с тем программным алгоритмом, который они реализуют. Допускается произвольная степень их «вложенности». Если один оператор if-else вложен в другой, то первый оператор входит во второй полностью
, а не только какой-либо одной своей частью if или else. Недопустимым является частичное перекрывание между собой их отдельных блоков. В приведенном примере один из операторов (выделен полужирным шрифтом) вложен в другой. Запись Б) является ошибочной в силу того, что блок else внутреннего оператора условия частично пересекается с обоими блоками if и else внешнего оператора. Пример 2.
Пользователь вводит с клавиатуры три целых числа a, b, c. Необходимо вывести на экран наибольшее из этих чисел. Решение. Один из возможных алгоритмов решения этой задачи показан на следующей блок-схеме. Схема может быть реализована программно с помощью вложенных операторов if-else // – Выбор наибольшего из 3 чисел – #include #include #pragma argsused int main (int argc, char* argv) float a, b, c; // объявляем три переменные cout<< «Vvedite a –»; // вводимзначения a, b, c cout<< «Vvedite b –»; cout<< «Vvedite c –»; if (a>b) // если a > b if (a>c) // иесли a > c