Вложенные операторы if


Оператор объявления

Все имена (идентификаторы) перед их использованием в программе на языке C++ должны быть объявлены (за исключением имени функции main()) с помощью оператора объявления. Оператор объявлениясостоит из названия типа и объявляемого имени (см. раздел объявление переменных). Оператор можно использовать для объявления переменных, именованных констант, функций и других данных:

int x; // объявление целой переменной x

double f, sum; // объявление f, sum типа double

Оператор присваивания

Только в том случае, когда в конце выражения с операцией (=) ставится точка с запятой, выражение становится оператором присваивания, например

x = y + z;

Оператор присваивания в С++ отличается от аналогичных операторов в других языках программирования тем, что может входить в более крупные выражения. В качестве результата оператор возвращает значение, присвоенное левому операнду. Например, следующее выражение вполне корректно:

value1 = 5 * (value2 = 8);

В данном случае сначала переменной value2будет присвоено значение 5, после чего это значение будет умножено на 8 и результат 40 будет записан в переменную value1.

Оператор присваивания также часто применяется для присваивания нескольким переменным одинакового значения, например:

x = y = z = 0;

Составной оператор

Составной оператор (блок) представляет собой последовательность операторов, заключенных в фигурные скобки { }, например:

{

f = a + b; c = f * a; m = f * c;

}

Операторы, входящие в составной оператор, разделяются точкой с запятой.

Составной оператор может включать в себя любые операторы, в том числе и другие составные операторы:

{

f = a + b;

{ x = f * a; m = f * c; } c = f * x * m;

}

Пустой оператор

Пустой оператор в программе представляется отдельной точкой с запятой, которая в данном случае завершает пустое действие.

Условные операторы

В программировании очень редко встречаются задачи, которые можно решить, выполняя строго заданную линейную последовательность действий. Значительно чаще приходится выполнять те или иные действия, в зависимости от каких-либо условий. Для описания подобных случаев используются условные операторы, которые позволяют проверять условие и, в зависимости от его значения, выполнять различные части программы.

Условный оператор if

В С++ оператором проверки условия является оператор if который, позволяет выбрать один из двух возможных вариантов выполнения действий в зависимости от выполнения определенного условия. Общая форма записи оператора ifимеет вид:

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

Здесь в качестве условия понимается любое выражение, результат вычисления которого приводимо к целочисленному значению.

При выполнении оператора if сначала вычисляется условие. Если результат – истина (любое отличное от нуля значение), то выполняется оператор_1. Если результат анализа условия – ложь (значение равно 0), то выполняется оператор_2. В случае отсутствия конструкции else, оператор_1 пропускается, и управление передаётся на оператор, следующий после if. Операторы, стояшие после ifи else могут быть составными. Рассмотрим примеры оператора if:

· if(x < y) min = x; // нахождение минимума

else min = y; // из двух чисел x и y

· cin>>val; // проверка правильности ввода

if(val < 1 || val > 10) // переменной val, которая может

cout<<"Error vvoda"; // содержать числа от 1 до 10

· if(x) y = 1 / x; // вычисление yпо формуле y = 1 / x,

else сout<<"Error: x = 0 \n"; // если значение x не равно 0

· if(val < 0) val = -val; // абсолютная величина числа

В языке С++ имеется короткий способ записи оператора if…else с помощью условной операции (?), например:

min = (x < y) ? x : y;// нахождение min(x, y)

// Пример4.2.Ввестис клавиатуры два целых числа aи b.

// Если значения aи b положительны, найти их произведение,

// в остальных случаях вычислить их сумму.

#include <iostream>

using namespace std;

int main(){

int a, b, rez;

cout << "Enter the number a, b: "; cin>>a>>b;

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

if(a > 0 && b > 0){rez = a * b; cout<<a<<" * "<<b <<" = ";}

else{rez = a + b; cout<<a<<" + "<<b<<" = ";}

cout<<rez<<endl;

}

Вложенные операторы if

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

if(условие1)

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

else оператор_2;

else оператор_3;

При анализе подобных конструкций избежать возможных затруднений позволяет простое правилоelse относится к ближайшему свободному if.

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

if(условие){

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

else оператор_2;

}

else оператор_3;

Конструкция 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; // полная форма оператора if

else max = y;

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");

}



Дата добавления: 2022-05-27; просмотров: 77;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.04 сек.