В некоторых источниках говорится, что оператор выбора if else
— самостоятельный оператор. Но это не так, if else
— это всего лишь форма записи оператора выбора if
. Оператор if else
позволяет определить программисту действие, когда условие истинно и альтернативное действие, когда условие ложно. Тогда как if
позволял определить действие при истинном условии.
Синтаксис записи оператора выбора if else
:
if (/*проверяемое условие*/) { /*тело оператора выбора 1*/; } else { /*тело оператора выбора 2*/; }
Читается так: «Если проверяемое условие истинно, то выполняется тело оператора выбора 1, иначе (то есть проверяемое условие ложно) выполняется тело оператора выбора 2«. Обратите внимание на то, как записан оператор if else
. Слово else
специально сдвинуто вправо для того чтобы программный код был понятен и его было удобно читать.
Рассмотрим задачу с предыдущей темы, с использованием if else
. Напомню условие задачи: «Даны два числа, необходимо их сравнить».
// if_else.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { int a, b; cout << "Vvedite pervoe chislo: "; cin >> a; cout << "Vvedite vtoroe chislo: "; cin >> b; if ( a >= b) // если a больше либо равно b, то { cout << a << " >= " << b << endl; } else // иначе { cout << a << " <= " << b << endl; } system("pause"); return 0; }
В данном коде нас интересуют строки 14-20. Эти строки читаются так: если a
(первое число) больше либо равно b
(второе число), то выполнить оператор вывода в строке 16
cout << a << " >= " << b << endl;
иначе выполнить оператор вывода в строке 19
cout << a << " <= " << b << endl;
В данном ифе мы используем операции соотношений >=
и <=
. Условие перехода не совсем правильно, так как условие будет ложно только в том случае, если первое число будет меньше второго, во всех остальных случаях условие истинно. Значит, строку 19 нужно записать так
cout << a << " < " << b << endl; // в кавычках записать не меньше или равно, а просто меньше.
А вот так сработала программа (см. Рисунок 1).
Vvedite pervoe chislo: 15 Vvedite vtoroe chislo: -4 15 >= -4 Для продолжения нажмите любую клавишу . . .
Рисунок 1 — Оператор выбора if else
Покажу еще один пример использования операторов выбора if else
(так называемые вложенные операторы if else
для множественного выбора).
Составить алгоритм находящий значение y, если у=х, при х<0; у=0, при 0<=х<30; у=х2, при х>=30;
// inif_else.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> using namespace std; int main(int argc, char* argv[]) { int x, y; cout << "Vvedite x: "; cin >> x; if (x < 0) { y = x; // выполняется, если х меньше нуля } else { if ( (x >= 0) && (x < 30) ) { y = 0; // выполняется, если х больше либо равно нуля и меньше 30 } else { if (x >= 30) { y = x * x; // выполняется, если х больше либо равен 30 } } } cout << "y=" << y << endl; system("pause"); return 0; }
В данной задаче возможны три случая:
1-й случай: х < 0
;
2-й случай: х
лежит в пределах от 0 (включая 0) до 30;
3-й случай: х
больше или равен 30.
Заметьте новшество!! В 17 строке такую запись: if ( ( x >= 0 ) && ( x< 30 ) )
, я использовал символы &&
— это логическое И. Операция логического И &&
необходима для объединения нескольких простых условий в одно составное. В нашем случае необходимо проверить истинность двух условий: первое – x >= 0
, второе – х < 30
. Все проверяемое условие будет истинно, если истинны два простых условия. В математике правильной записью считается такая запись: 0 <= x < 30
, а в С++ правильной записью считается вот такая запись: ( x >= 0 ) && ( x < 30 )
или такая 0 <= x && x < 30
. Кстати круглые скобочки () && ()
не обязательны, так как условия простые, но для уверенности, я прописываю, всегда, данные скобочки и вам советую.
Разбор частного случая:
Допустим, пользователь ввел число 31. Начиная со строки 12, выполняется проверка условий. Читается так: «Если х
(31 в нашем случае) < 0, то выполнить оператор в строке 14». Но так как 31 > 0
условие ложно мы переходим к слову else
(иначе) строка 15. Дальше проверяем, входит ли число 31 в заданный интервал. Читается так: если х>=0 и х<30 то выполнить оператор в строке 19. Но так как число 31 не входит в заданный интервал, то условие ложно. Подробно строка 17: программа сначала проверит первое простое условие х >= 0
– оно истинно, а если первое истинно, то программа перейдет к проверке второго простого условия х < 30
– оно ложно. Следовательно всё составное условие ложно, ведь в составном условии у нас используется логическая операция &&
, а это значит, что все составное условие истинно только в том случае, когда истинны оба простых условия. Переходим к else
(иначе ), здесь у нас последний if
, (строка 22). Выполняется проверка х >= 30
. Читается так: Если х >= 30 то выполнить оператор, находящийся в строке 24. Наконец-то условие истинно, итак выполнился оператор в строке 24. И строка 28 печатает получившееся значение. Ну, все, рассмотрели программу по мельчайшим деталям. Результат работы программы, в случае, если пользователь ввел число 31 (см. Рисунок 2)
Vvedite x: 31 y=961 Для продолжения нажмите любую клавишу . . .
Рисунок 2 — Оператор выбора if else
Комментарии
Max Petrov
Может это для наглядности, но к слову, если кому интересно, сложное условие можно исключить, так как первый if сам проверяет x на его знак. В общем можно записать так.
Denya Lorents
Во втором куске кода логическая ошибка
Мы же сначала проверяем равно или больше а и b. Тогда после этого в else может выполнится только в том случае если a меньше чем b но никак если равно.
Denya Lorents
Прошу прощения не прочитал что дальше пишется(
Sergen13rs
Вроде нашёл ещё одну опечатку. После кода задачи в объяснении. Написано: Читается так:если х>=0 и х<30 то выполнить оператор в строке 17.
Должно выполнять оператор в строке 19, а не 17.
Быть может я ошибаюсь. Ибо я абсолютный новичок.
Найруми
почему бы не так?
#include <iostream>
using namespace std;
int main(){
int x, y;
cout <<«Vvedite znachenie x: «;
cin >> x;
if (x < 0) y = x;
else if ((x>=0) && (x < 30)) y = 0;
else if (x > 30) y = x * x;
cout << «y= » << y;
system («pause >> void»);
return 0;
}
Mariooo
потому что статьи расчитаны на новичков, а ваш код не удобно читать
Mishka
тут есть опечатка где написано:
В данной задаче возможны три случая:
в 1-ом будет х<0
admin
Готово!