Помощничек
Главная | Обратная связь


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

Пример программы, вычисляющей по номеру месяца время года, ему соответствующее.



Лабораторная работа №2

Ветвления

Основной конструкцией ветвления в языке С++ является оператор if (условный оператор), имеющий следующий синтаксис:

 

if (<логическое_выражение>)

<оператор1>;

Else

<оператор2>;

Вначале вычисляется логическое выражение, указанное в круглых скобках, если оно окажется истинными (true), то выполняется <оператор1>, а затем управление передается оператору, следующему за конструкцией if (при этом <оператор2> не выполняется). Если же выражение окажется ложным (false), то выполняется <оператор2>, а затем управление передается оператору, следующему за конструкцией if.

Конструкция if изображается следующим образом с помощью блок-схем:

 

 

 

Пример программы вычисляющей максимум двух целых чисел, введенных с клавиатуры:

 

#include <iostream>

using namespace std;

 

int main()

{

int a, b, max;

//Вводим значения переменных a и b с клавиатуры

cin >> a >> b;

//Если a больше b, то

if (a > b)

max = a; //переменной max присвоить значение переменной a

else //иначе (a меньше или равно b)

max = b; //переменной max присвоить значение переменной b

//Выводим найденный максимум чисел a и b

cout << max << endl;

return 0;

}

Часть оператора if, относящуюся к ветке «иначе» (еlse), можно опускать, если она в программе не нужна. В этом случае оператор if будет выглядеть так:

 

if (<логическое_выражение>)

<оператор1>;

Пример программы, вычисляющей максимум двух целых чисел, введенных с клавиатуры, без использования части «иначе» (else):

 

#include <iostream>

using namespace std;

 

int main()

{

int a, b, max;

//Вводим значения переменных a и b с клавиатуры

cin >> a >> b;

//В начале полагаем, что максимум равен значению переменной b

max = b;

//Если a больше max, то

if (a > max)

max = a; //переменной max присвоить значение a

//Выводим найденный максимум чисел a и b

cout << max << endl;

return 0;

}

Если при истинности или ложности логического выражения нужно выполнить не один оператор, а несколько, то в этом случае применяется составной оператор. Составной оператор – последовательность операторов, заключенных в фигурные скобки {}.

Так <оператор1> и <оператор2> исходной конструкции if могут быть составными, т.е. состоять из нескольких простых операторов, объединенных фигурными скобками {}:

 

if (<логическое_выражение>)

{

<оператор1_1>;

<оператор1_2>;

...

<оператор1_n>;

}

Else

{

<оператор2_1>;

<оператор2_2>;

...

<оператор2_m>;

}

 

Пример фрагмента программы, использующего составной оператор:

 

if (x >= y)

{

f = x * y;

y++;

}

else

{

f = x + y;

y--;

}

 

Для формирования условия, указываемого в круглых скобках оператора if, используются операции отношения и логические операции.

 

Операции отношения: <, >, <= (меньше или равно), >= (больше или равно), == (равно), != (не равно).

Примеры:

a < b – a меньше b;

c <= 2.0 – c меньше или равно 2.0;

a + 2 >= c * 3 – a + 2 больше или равно c * 3;

x == y * 2 – x равно y * 2;

z != a + b – z не равно a + b.

 

Логические операции: ! (отрицание), && (логическое «И», конъюнкция), || (логическое «ИЛИ», дизъюнкция).

Пусть a, b – некоторые логические выражения, тогда дадим формальные определения данных операций:

!a – истинно ó a – ложно;

a && b – истинно ó оба выражения a и b истинны;

a || b – истинно ó хотя бы одно из выражений a или b является истинным.

Приоритетность выполнения логических операций: ! – имеет наибольший приоритет, && - средний и || - наименьший.

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

Примеры:

1.0 <= x && x <= 2.0 – определяет, принадлежит ли x отрезку [1.0, 2.0]

x < 1.0 || x >= 2.0 – определяет, принадлежит ли x объединению (-¥, 1.0)È[2.0, +¥)

x <= 3.0 && y <= 5.0 || x + y >= 1.5

!(a <= 7) && (a > 3 || a * 2 < a + 10)

 

Пример фрагмента программы, определяющей принадлежит ли точка с координатами (x, y) прямоугольнику ABCD, имеющему следующие координаты вершин: A(0, 0), B(0, b), C(a, b), D(a, 0):

 

 

double x, y, a, b;

cin >> x >> y;

cin >> a >> b;

if (0.0 <= x && x <= a && 0.0 <= y && y <= b)

cout << "Point belongs to rectangle." << endl; //Принадлежит

else

cout << "Point is out of rectangle." << endl; //Не принадлежит

 

Также операторы if могут быть вложены друг в друга.

Пример фрагмента программы, определяющей принадлежность точки прямоугольнику с помощью вложенных операторов if:

 

double x, y, a, b;

cin >> x >> y;

cin >> a >> b;

if (0.0 <= x && x <= a)

if (0.0 <= y && y <= b)

cout << "Point belongs to rectangle." << endl; //Принадлежит

else

cout << "Point is out of rectangle." << endl; //Не принадлежит

else

cout << "Point is out of rectangle." << endl; //Не принадлежит

 

Дополнительной конструкцией ветвления в языке С++ является оператор выбора switch. Он имеет следующий синтаксис:

 

switch (<выражение>)

{

case <конст1>:

<оператор1_1>;

<оператор1_2>;

<оператор1_n1>;

case <конст2>:

<оператор2_1>;

<оператор2_2>;

<оператор2_n2>;

default:

<оператор1>;

<оператор2>;

<операторm>;

}

 

Оператор выбора выполняется следующим образом:

1. Вычисляется значение выражения в круглых скобках.

2. Последовательно сравнивается значение выражения с константами <конст1>, <конст2>…

3. При совпадении значения с одной из констант осуществляет переход на первый оператор из набора операторов, соответствующих этой константе.

4. Если в списке операторов встретился break, то осуществляется переход на следующий оператор за конструкций switch, иначе – выполняются операторы из нижележащих наборов операторов (относящихся к другим константам) до тех пор, пока не встретится break или не закончится switch.

5. Если значение выражения не совпало ни с одной из констант, то выполняются операторы секции default (по умолчанию). Если данная секция отсутствует, то управление передается первому оператору, следующему за конструкцией switch.

Пример программы, которая в зависимости от значения переменной n использует различные формулы для вычисления функции f:

 

 

#include <iostream>

using namespace std;

 

int main()

{

double x, y, f;

int n;

 

//Читаем значение переменных n, x, y

cout << "n = ";

cin >> n;

cout << "x = ";

cin >> x;

cout << "y = ";

cin >> y;

//Конструкция выбора

switch (n)

{

case 1: //Если n равно 1

f = x + y; //вычисляем f по первой формуле

break; //выход из конструкции switch

//(переход к оператору печати значения f)

case 2: //Если n равно 2

f = 2.0 * x * y; //вычисляем f по второй формуле

break; //выход из конструкции switch

case 3: //Если n равно 3

f = x - 3.0 * y + 1.0; //вычисляем f по третьей формуле

break; //выход из конструкции switch

case 4: //Если n равно 4

f = y; //вычисляем f по четвертой формуле

break; //выход из конструкции switch

}

//Выводим на экран вычисленное значение f

cout << "f = " << f << endl;

return 0;

}

Обратите внимание! В конце каждого набора операторов следует ставить оператор break, иначе начнут выполняться операторы, соответствующие следующей константе. Например, если исключить break из набора операторов, соответствующих case 1, то после выполнение оператора “f = x + y;” начнет выполняться оператор “f = 2.0 * x * y;”.

 

Если двум константам, идущим последовательно в конструкции switch, соответствует один и тот же набор операторов, то их можно объединить, сделав пустым набор операторов у первой константы.

 

Пример программы, вычисляющей по номеру месяца время года, ему соответствующее.

#include <iostream>

using namespace std;

 

int main()

{

int month; //Переменная для хранения номера месяца

 

//Вводим номер месяца

cout << "Enter month no. : ";

cin >> month;

//Используем конструкцию выбора для определения времени

//года

switch (month)

{

//Если значение month равно 1, 2 или 12

case 1:

case 2:

case 12:

cout << "Winter" << endl; //выводим на экран "Зима"

break;

//Если значение month равно 3, 4 или 5

case 3:

case 4:

case 5:

cout << "Spring" << endl; //весна

break;

//Если значение month равно 6, 7 или 8

case 6:

case 7:

case 8:

cout << "Summer" << endl; //лето

break;

//Если значение month равно 9, 10 или 11

case 9:

case 10:

case 11:

cout << "Autumn" << endl; //осень

break;

//Если другое значение

default:

cout << "Error!!!" << endl; //выводим ошибку

}

return 0;

}

В данной программе константам 12, 1, 2 соответствует один и тот же набор из двух операторов: вывод на экран строки “Winter” и break. Поэтому просто друг за другом записываются три данные константы, после чего указывается общий набор операторов:

 

case 1:

case 2:

case 12:

cout << "Winter" << endl;

break;

 

Аналогичным образом обрабатываются номера месяцев, относящихся к весне, лету и осени.

 




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.