Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Конструкция if…else…if






Встречаются задачи, в которых выбор следует сделать между более чем двумя возможными вариантами, каждому из которых соответствует свое условие. Тогда применяется конструкция if…else…if (так называемая конструкция- лестница). Её можно представить в виде:

if (условие 1) оператор_1;

else if (условие 2) оператор_2;

else if (условие 3) оператор_3;

else if (условие N)оператор_N;

else // необязательная часть

оператор _ по_умолчанию;

Здесь под элементами условие 1… условие N понимаются условные выражения, которые вычисляются сверху вниз. Как только в какой-нибудь ветви при вычислении условного выражения обнаружится истинный результат, будут выполнены операторы, связанные с этой ветвью, а вся остальная часть конструкции опустится. Если окажется, что ни одно из условий не является истинным, будет выполнен последний элемент else (выполняет роль условия, которое действует по умолчанию).

Последний элемент, за которым следует оператор _ по_умолчанию ( не является обязательным). В подобных конструкциях элемент else связывается с ближайшим предыдущим if в том же блоке, не имеющим элемента else.

Формально уровней вложенности операторов if может быть много, но реально при количестве таких вложенных конструкций, больше чем 4-5, программа становится трудночитаемой и её трудно отлаживать.

 

// Пример4.3. Ввести целое число x. Проверить, попадает ли введённое

// значение в заданный диапазон от 1 до 4. Вывести значение x на экран.

// Использовать конструкцию if…else…if.

#include < iostream>

using namespace std;

int main() {

int x;

cout < < " Vvedi chislo x = "; cin > > x;

if (x == 1) cout< < " x = 1 \n";

else if (x == 2) cout< < " x = 2 \n";

else if (x == 3) cout< < " x = 3 \n";

else if (x == 4) cout< < " x = 4 \n";

else cout< < " x vne diapazona. \n";

cout< < endl;

}

// Пример4.4. Найти максимальное значение из введённых чисел x, y, z.

#include < iostream>

using namespace std;

int main() {

int x, y, z, max;

cout< < " Enter the number x, y, z: = "; cin> > x> > y> > z;

cout< < " Variant 1" < < endl;

if(x > y) max = x; else max = y; // полная форма оператора if

if(z > max) max = z; // краткая форма оператора if

cout< < " max = " < < max< < endl;

cout< < " Variant 2" < < endl;

max = x;

if(y > max) max = y;

if(z > max) max = z;

cout< < " max = " < < max< < endl;

cout< < " Variant 3 " < < endl;

max = x > y? x: y; // условная операция

max = z > max? z: max;

cout< < " max = " < < max< < endl;

cout< < " Variant 4" < < endl;

if(x > y & & x > z) max = x;

else if(y > z) max = y;

else max = z;

cout< < " max = " < < max< < endl;

}

// Пример4.5. Расположить значения четырех переменных a, b, c, d

// в порядке возрастания их величин.

#include< iostream>

using namespace std;

int main() {

int a, b, c, d, r;

cout< < " Enter a, b, c, d ";

cin> > a> > b> > c> > d;

cout< < " a = " < < a< < " b = " < < b< < " c = " < < c< < " d = " < < d< < endl;

if(a> b) { r = a; a = b; b = r; }

if(a> c) { r = a; a = c; c = r; }

if(a> d) { r = a; a = d; d = r; }

if(b> c) { r = b; b = c; c = r; }

if(b> d) { r = b; b = d; d = r; }

if(c> d) { r = c; c = d; d = r; }

cout< < " a = " < < a< < " b = " < < b< < " c = " < < c< < " d = " < < d< < endl;

system(" pause");

}

// Пример 4.6. Написать программу-калькулятор, которая может

// выполнять только четыре действия: +, -, *, /.

#include< iostream>

using namespace std;

int main() {

double a, b, rez;

cout< < " Enter a and b: "; cin> > a> > b;

char oper;

cout< < " Input the operation: "; cin> > oper;

if(oper == '+'){

rez = a + b;

cout< < '\n'< < a< < " + " < < b< < " = " < < rez< < endl;

}

if(oper == '-'){

rez = a - b;

cout< < '\n' < < a < < " - " < < b< < " = " < < rez< < endl;

}

if(oper == '*'){

rez = a * b;

cout< < '\n'< < a< < " * " < < b< < " = " < < rez< < endl;

}

if(oper == '/')

if(b! = 0){

rez = a / b;

cout< < " \n\t" < < a< < " / " < < b< < " = " < < rez< < endl;

}

else

cout< < " Division by zero! \n";

if(oper! = '+' & & oper! = '-' & & oper! = '*' & & oper! = '/')

cout< < " Incorrect operation! \n";

system(" pause");

}

Оператор выбора switch

Условный оператор if…else позволяют легко осуществить выбор между двумя вариантами. В программировании же часто встречаются задачи выбора одного варианта решения из многих возможных. Это можно сделать с помощью вложенных конструкций if...else…if. Однако более удобный способ – использование оператора switch, формат записи которого имеет следующую форму:

 

switch (выражение){

case константа1: оператор_1; break;

case константа2: оператор_2; break;

case константаN: оператор_N; break;

[default: оператор; break; ]

}

Оператор switch работает следующим образом. Вычисляется выражение, тип которого должен быть целочисленным. Затем значения констант, указанных в метках case, сравниваются со значением вычисленного выражения. Если совпадение обнаружено, выполняются операторы, следующие за соответствующей меткой case. Если в списке констант не будет константы равной значению выражения, выполняются операторы, записанные после метки default.

Обычно действие каждой ветви заканчивается оператором break. Выполнение этого оператора приводит к выходу из оператора switch. Если break отсутствует, то управление передаётся следующему оператору, помеченному case или default. Подобным образом выполняются все последующие операторы внутри switch, пока не встретится оператор break.

В качестве значений в метках case могут использоваться только целые числовые константы, а также константные (не содержащие переменных) выражения, причем значения, используемые в метках case в пределах одного оператора switch, не должны повторяться. Например:

switch (m){

case 1: x = a + b; break;

case 2: x = a - b; break;

case 3: x = a * b; break;

default: cout< < " Incorrect operation! \n";

}

В качестве значений в метках case также могут использоваться символьные константы, которые в С++ являются целочисленными:

char сh; cin> > сh;

switch(сh){

case '+': x = a + b; break;

case '-': x = a - b; break;

default: cout< < " Incorrect operation! \n";

}

В одной метке case нельзя указать диапазон значений. Это означает, что если, например, для трёх последовательных целых числовых значений необходимо выполнить одни и те же действия, в операторе switch придется записать три отдельные метки case, две из которых будут “пустыми”:

switch (m){

case 1:

case 3:

case 5:

cout< < "!!! "; …

}

В отличие от оператора if оператор switch может выполнять операции проверки только строгого равенства, в то время как оператор if в условиях может использовать логические операции и операции сравнения. Например, с помощью switch не удастся проверить, принадлежит ли значение определенному интервалу.

// Пример4.7. Проанализировать значение переменной mark, которая

// является значением выставленной оценки, используя оператор switch.

#include < iostream>

using namespace std;

int main() {

int mark;

cout< < " Enter the mark = "; cin> > mark;

switch (mark){

case 5: cout< < " оcenka 5\n"; break;

case 4: cout< < " оcenka 4\n"; break;

case 3: cout< < " оcenka 3\n"; break;

case 2: cout< < " оcenka 2\n"; break;

default: cout< < " Error mark\n";

}

system(" pause");

}

// Пример 4.8. Составить программу-калькулятор, которая может

// выполнять только четыре действия: +, -, *, /.

// Использовать оператор swith.

#include < iostream>

using namespace std;

int main() {

double a, b, rez;

char oper;

cout< < " Enter a and b: "; cin> > a> > b;

bool flag = true;

cout< < " Enter operation: "; cin> > oper;

switch (oper){

case '+': rez = a + b; break;

case '-': rez = a - b; break;

case '*': rez = a * b; break;

case '/': if(b == 0) flag = false; // или if (! b) flag = false;

else rez = a / b; break;

default: flag = false;

}

if (flag == true)cout< < '\n'< < a< < ' '< < oper< < ' '< < b< < '='< < rez< < endl;

else cout< < " Division by zero or incorrect operation.\n";

system(" pause");

}






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.