Операнд_1 ? операнд_2 : операнд_3 2 страница

Таблица 2.1 - Операторы отношения в языке C++

a = b равно a == b
a > b больше a > b
a < b меньше a < b
a ≥ b больше или равно a >= b
a ≤ b меньше или равно a <= b
a ≠ b не равно a != b

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

&&

На практике эта логическая операция часто применяется для создания условия, что некоторая переменная принадлежит указанному промежутку. Например, составим условие, которое будет истинно тогда и только тогда, когда переменная х принадлежит Операнд_1 ? операнд_2 : операнд_3 2 страница промежутку от 10 до 20: 10 < x 10 и x < 20. На языке C++ это записывается так:

x > 10 && x < 20

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

||

На практике эта логическая операция часто применяется для создания условия, что некоторая переменная принимает одно из допустимых значений. Например, составим условие, которое истинно тогда и только тогда, когда x принимает фиксированные значения: 1,2; 2,3; 3,4. Это произойдет только в том случае, когда x = 1,2 или x = 2,3 или x = 3,4. На языке C++ это запишется как

x == 1.2 || x == 2.3 || x == 3.4

Операция Операнд_1 ? операнд_2 : операнд_3 2 страница логического НЕ (!).Операция НЕ принимает значение истина, если ее операнд принимает значение ложь, и наоборот, результатом операции НЕ будет ложь, если ее операнд принимает значение истина. В языке C++ данное выражение может быть представлено следующим образом:

!

На практике операция НЕ применяется для отрицания какого-либо факта.

Все логические операции (за исключением операции логического НЕ) имеют приоритет ниже операций отношения, поэтому обрамлять скобками простые условия на основе операторов отношения не обязательно.

Примеры:

if (a<0) b = 1; // 1

if (ad||a==0)) b++;

else

{

b*=a;

a=0;

} // 2

if (a

{

if (a

else m = c;

}

else

{

if (b

else m = c;

} // 3

if Операнд_1 ? операнд_2 : операнд_3 2 страница (a++) b++; // 4

if (b>a) max = b;

else max = a; // 5

В примере 1 отсутствует ветвь else. Подобная конструкция называется «пропуск оператора», поскольку присваивание либо выполняется, либо пропускается в за­висимости от выполнения условия.

Если требуется проверить несколько условий, их объединяют знаками логиче­ских операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a

Оператор в примере 3 вычисляет наименьшее значение из трех переменных. Фи­гурные скобки в данном случае не обязательны, так как компилятор относит часть else к Операнд_1 ? операнд_2 : операнд_3 2 страница ближайшему if.

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

Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае: max=(b>a)?b:a;).



Условный оператор.Условный оператор if используется для разветвления процесса вычислений на два направления.


true false false


Оператор
Оператор 2
Оператор 1
true


Рисунок 2.4 - Структурная схема условного оператора

Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется пер­вый оператор, иначе - второй. После этого управление передается на оператор, следующий за условным.

Одна Операнд_1 ? операнд_2 : операнд_3 2 страница из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом else. Если в какой-либо ветви требуется выполнить несколь­ко операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из од­них описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.

Условный оператор в языке C++ имеет формат:

if() ;

его действие можно описать с помощью фрагмента UML-диаграммы деятельности, изображенного на рис. 2.5 а:

а) б)

Рисунок 2.5 - Фрагмент диаграммы деятельности UML, описывающей действия оператора Операнд_1 ? операнд_2 : операнд_3 2 страница if в языке C++: а) без альтернативной ветви else;

б) с альтернативной ветвью else

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

if() ; else ;

его действие можно описать с помощью фрагмента блок-схемы алгоритма, изображенного на рис. 2.5 б. Иными словами, если «условие» принимает значение «истина», то выполняется «оператор1», и если «условие» принимает значение «ложь», то выполняется «оператор2».

Например, для оператора if без альтернативной ветви else можно привести следующий фрагмент кода:

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

if(temperature >= 0)

cout << "Выше точки замерзания!\n";

// Действия, не Операнд_1 ? операнд_2 : операнд_3 2 страница относящиеся к условному оператору

cout << "Температура " << temperature << endl;

тогда как для оператора if-else можно привести следующий пример:

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

if(x < у) min = х;

else min = у;

// Действия, не относящиеся к условному оператору

cout <<"min = " << min;

Последний пример может быть прокомментирован следующим образом. Если условие x < у истинно, то переменной min будет присвоено значение х, если оно ложно, то min будет присвоено значение у. После выполнения инструкции if-else будет напечатано значение min.

Оба оператора и могут представлять простые операторы (один оператор), в этом случае они не заключаются в фигурные скобки. Если же и/или представляют составной оператор (несколько операторов), то Операнд_1 ? операнд_2 : операнд_3 2 страница их нужно заключить в фигурные скобки.

{

Оператор_1;

Оператор_2;

...

Оператор_n;

}

Каждый оператор внутри скобок должен заканчиваться точкой с запятой.

Структура называется вложенной, если после или служебного слова else используются вновь условные операторы. Число вложений может быть произвольным. При этом справедливо следующее правило: служебное слово else всегда относится к ближайшему выше .

Пример 2.1. Составить UML-диаграмму деятельности и программу с использованием конструкции ветвления для вычисления значения функции:

(3.1)

Составим UML-диаграмму деятельности вычисления значения функции (рис. 2.6).

Рисунок 2.6 - UML-диаграмма деятельности для задачи расчета значения функции

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

Листинг 2.1

#include “stdafx.h”

#include

#include

using namespace std;

int _tmain Операнд_1 ? операнд_2 : операнд_3 2 страница(int argc, _TCHAR* argv[])

{

double x, y;

setlocale( LC_ALL, "Russian" );

cout << ”Введите x: ”;

cin >> x;

if (x <= 0)

y=2*x*x + cos(x);

else

if (x<5) y = x + 1;

else y = sin(x) - x*x;

cout << “y(x = ” << x << “) = ” << y << endl;

getch();

return 0;

}

Переключатель. Оператор switch (переключатель) предназначен для разветвления процесса вы­числений на несколько направлений. Переключатель является наиболее удобным средством для органи­зации мультиветвления. Синтаксис переключателя таков:

switch(Выражение)

{

case Константа_1: Операторы_1;

case Константа_2: Операторы_2;

...

case Константа_n: Операторы_n;

default: Операторы_(n+1);

}


Рисунок 2.7 - Структурная схема оператора switch

Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается Операнд_1 ? операнд_2 : операнд_3 2 страница первому оператору из списка, помеченного константным выражением, значение которого совпало с вычислен­ным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви.

Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих.

Управляющая конструкция switch передает управление к тому из помеченных с помощью case операторов, для которого значение кон­стантного выражения совпадает со значением переключающего вы­ражения. Переключающее выражение должно быть целочисленным или его значение приводится к целому. Значения константных выра­жений, помещаемых за служебными словами case, приводятся к типу переключающего выражения Операнд_1 ? операнд_2 : операнд_3 2 страница. В одном переключателе все констант­ные выражения должны иметь различные значения, но быть одного типа. Любой из операторов, помещенных в фигурных скобках после конструкции switch(...), может быть помечен одной или несколь­кими метками вида

case константное_выражение:

Если значение переключающего выражения не совпадает ни с од­ним из константных выражений, то выполняется переход к оператору, отмеченному меткой default:. В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутство­вать. В случае отсутствия метки default при несовпадении переклю­чающего выражения ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один Операнд_1 ? операнд_2 : операнд_3 2 страница из операторов.

Сами по себе метки case и default не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выход из переключателя, то в нем последовательно выполняются все операторы, начиная с той метки, на которую передано управление. Фрагмент UML-диаграммы деятельности, соответствующий переключателю, изображен на рис. 2.8.

Пример 2.2. Написать программу вывода нечетных чисел, не меньших чем введенное с клавиатуры число от 0 до 9.

Листинг 2.2

// Названия нечетных целых цифр не меньше заданной

#include “stdafx.h”

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int ic;

setlocale( LC_ALL, "Russian" );

cout << “\nВведите любую десятичную цифру: ”;

cin >> ic;

cout << endl;

switch(ic)

{

case Операнд_1 ? операнд_2 : операнд_3 2 страница 0: case 1: cout << “один, ”;

case 2: case 3: cout << “три, ”;

case 4: case 5: cout << “пять, ”;

case 6: case 7: cout << “семь, ”;

case 8: case 9: cout << “девять. ”;

// Выход из переключателя

break;

default: cout << “Ошибка! Это не цифра!\n”

// Конец переключателя

}

getch();

return 0;

}

В результате двух выполнений программы:

Введите любую десятичную цифру: 4

пять, семь, девять.

Введите любую десятичную цифру: z

Ошибка! Это не цифра!

Рисунок 2.8 - Фрагмент диаграммы деятельности UML, описывающей действие оператора switch в языке C++

Кроме сказанного о возможностях переключателя, приведенная программа иллюстрирует действие оператора break. С его помощью выполняется выход из переключателя. Если поместить операторы break после вывода каждой цифры, то программа будет печатать на­звание Операнд_1 ? операнд_2 : операнд_3 2 страница только одной нечетной цифры.

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

Совместно с оператором break синтаксис переключателя имеет следующий вид:

switch(Выражение)

{

case Константа_1: Операторы_1; break;

case Константа_2: Операторы_2; break;

...

case Константа_n: Операторы_n; break;

default: Операторы_(n+1);

}

его действия можно описать с помощью фрагмента блок-схемы алгоритма, изображенного на рис. 2.9.

Рисунок 2.9 - Фрагмент диаграммы деятельности Операнд_1 ? операнд_2 : операнд_3 2 страница UML, описывающей действие оператора switch совместно с оператором break в языке C++

Пример 2.3. Составить блок-схему алгоритма и программу с использованием переключателя и вывести наименование времени года по вводимому с клавиатуры номеру месяца от 1 до 12.

Составим UML-диаграмму деятельности определения наименования времени года по вводимому с клавиатуры номеру месяца (рис. 2.10).

Рисунок 2.10 - UML-диаграмма деятельности для задачи вывода названия времени года по номеру месяца

На UML-диаграммах деятельности логическое отношение И в условии обозначается с помощью связки and, логическое отношение ИЛИ - с помощью связки or, а логическое отрицание НЕ - c помощью связки not.

По составленной диаграмме может быть написана программа решения поставленной Операнд_1 ? операнд_2 : операнд_3 2 страница задачи.

Листинг 2.3

#include “stdafx.h”

#include

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{

int n;

setlocale( LC_ALL, "Russian" );

cout << "Введите номер месяца: ";

cin >> n;

cout<<"\nВремя года: ";

switch(n)

{

case 1:case 2:case 12: cout << "Зима\n";

break;

case 3:case 4:case 5: cout << "Весна\n";

break;

case 6:case 7:case 8: cout << "Лето\n";

break;

case 9:case 10:case 11: cout << "Осень\n";

break;

default: cout << "\Ошибка!\n";

}

getch();

return 0;

}

В приведенном примере программы при вводе номера месяца от 1 до 12 на экране печатается соответствующее время года, если же номер месяца превышает 12, выводится сообщение о неверном вводе месяца, для чего служит зарезервированное слово языка Операнд_1 ? операнд_2 : операнд_3 2 страница default. После каждой из констант, перечисляющих значение переключателя, ставится двоеточие.

Заключительный для каждой ветви оператор break служит для прерывания цикла проверки и перехода в конец переключателя. В случае отсутствия break переключатель работает неверно - происходит переход на следующую ветвь.

Аппаратура и материалы. Для выполнения лабораторной работы необходим персональный компьютер со следующими характеристиками: процессор Intel Pentium-совместимый с тактовой частотой 800 МГц и выше, оперативная память - не менее 64 Мбайт, свободное дисковое пространство - не менее 500 Мбайт, устройство для чтения компакт-дисков, монитор типа Super VGA (число цветов от 256) с диагональю не менее 15². Программное обеспечение - операционная система Windows2000/XP и выше, среда разработки приложений Microsoft Операнд_1 ? операнд_2 : операнд_3 2 страница Visual Studio.

Указания по технике безопасности. Техника безопасности при выполнении лабораторной работы совпадает с общепринятой для пользователей персональных компьютеров, самостоятельно не производить ремонт персонального компьютера, установку и удаление программного обеспечения; в случае неисправности персонального компьютера сообщить об этом обслуживающему персоналу лаборатории (оператору, администратору); соблюдать правила техники безопасности при работе с электрооборудованием; не касаться электрических розеток металлическими предметами; рабочее место пользователя персонального компьютера должно содержаться в чистоте; не разрешается возле персонального компьютера принимать пищу, напитки.

Методика и порядок выполнения работы.Перед выполнением лабораторной работы каждый студент получает индивидуальное задание. Защита лабораторной работы происходит только после его выполнения (индивидуального задания). При Операнд_1 ? операнд_2 : операнд_3 2 страница защите лабораторной работы студент отвечает на контрольные вопросы, приведенные в конце, и поясняет выполненное индивидуальное задание. Ход защиты лабораторной работы контролируется преподавателем.Порядок выполнения работы:

1. Проработать примеры, приведенные в лабораторной работе.

2. Для программы из примера 2 составить соответствующую ей диаграмму деятельности UML.

3. Составить UML-диаграмму деятельности и программу с использованием конструкции ветвления и вычислить значение функции. Номер варианта определяется по формуле , где - номер студента по списку преподавателя.

Индивидуальное задание №1. Вариант:

1. где ;

2. где ;

3.

4. где ;

5. где ;

6.

7. где ;

8.

9. где ;

10.

11. где ;

12. где ;

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

4. Решить задачу согласно варианта, составить UML-диаграмму деятельности и программу с использованием переключателя. Номер варианта определяется по формуле , где - номер студента по списку Операнд_1 ? операнд_2 : операнд_3 2 страница преподавателя.

Индивидуальное задание №2. Вариант:

1. Дано натуральное число n > 100. Вывести на экран фразу «Мне n лет», учитывая, что при некоторых значениях n слово «лет» надо заменить на слово «год» или «года».

2. Дано число m (1 £ m £ 12).Определить, сколько дней в месяце с номером m.

3. Дано число m (1 £ m £ 7). Вывести на экран название дня недели, который соответствует этому номеру.

4. С клавиатуры вводится натуральное число n. В зависимости от значения остатка r при делении числа n на 7 вывести на экран число n в виде n = 7*k + r.

5. С клавиатуры вводится цифра m (от 1 до 4). Вывести на экран названия месяцев, соответствующих времени года Операнд_1 ? операнд_2 : операнд_3 2 страница с номером m (считать зиму временем года № 1).

6. Дано целое число С такое, что |С| < 9. Вывести это число в словесной форме, учитывая его знак.

7. С клавиатуры вводится цифра m (от 1 до 12). Вывести на экран название месяца, соответствующего цифре,

8. Дано число m (1£ m £ 12). Определить полугодие, на которое приходится месяц с номером m и количество дней в том месяце (год не високосный).

9. Вводится число экзаменов N<=20. Напечатать фразу "Мы успешно сдали N экзаменов", согласовав слово "экзамен" с числом N.

10. Вводится число карандашей N<=10. Вывести фразу "Я купил N карандашей, согласовав слово "карандаш" с числом N.

11. Компания по снабжению электроэнергией взимает плату с Операнд_1 ? операнд_2 : операнд_3 2 страница клиентов по тарифу:

- 7 р. за 1 кВт/ч за первые 250 кВт/ч;

- 17 р. за кВт/ч, если потребление свыше 250, но не превышает 300 кВт/ч;

- 20 р. за кВт/ч, если потребление свыше 300 кВт/ч.

Потребитель израсходовал n кВт/ч. Подсчитать плату.

12. При покупке товара на сумму от 200 до 500 руб предоставляется скидка 3%, при покупке товара на сумму от 500 до 800 - скидка 5%, при покупке товара на сумму от 800 до 1000 руб - скидка 7%, свыше 1000 руб - скидка 9%. Покупатель приобрел 8 рулонов обоев по цене Х1 и две банки краски по цене Х2. Сколько он заплатил?

13. Студенты убирают урожай помидоров. При сборе до 50 кг в день работа оплачивается из расчёта 30 коп. за Операнд_1 ? операнд_2 : операнд_3 2 страница 1 кг; при сборе от 50 до 75 кг в день - 50 коп. за 1 кг; при сборе от 75 до 90 кг в день - 65 коп. за 1 кг; при сборе свыше 90 кг в день - 70 коп. за 1 кг плюс 20 руб. премия. Студент собрал X кг за день. Определить его заработок.

5. Решить задачу согласно варианта, составить UML-диаграмму деятельности и программу с использованием конструкций ветвления и переключателя. Номер варианта определяется по формуле , где - номер студента по списку преподавателя.

Индивидуальное задание №3. Вариант:

1. В японском календаре был принят 60-летний цикл, состоящий из пяти 12-летных подциклов. Внутри подцикла года носили названия животных мыши, коровы, тигра, зайца, дракона, змеи, лошади, овцы Операнд_1 ? операнд_2 : операнд_3 2 страница, обезьяны, курицы, собаки и свиньи. Попарно года в подцикле обозначались названиями цвета: зеленый, красный, желтый, белый и черный. По номеру года определить его название по японскому календарю, считая за начало очередного цикла 1984 год - год зеленой мыши (1985 - год зеленой коровы, 1986 - год красного тигра, 1987 - год красного зайца и т.д.).

2. Даны действительные числа х и у. Найти U = max2(x2y, xy2) + min2(x-y, x+2y).

3. Из трех действительных чисел a, b и c выбрать те, модули которых не меньше 4.


documentahlrlpp.html
documentahlrszx.html
documentahlsakf.html
documentahlshun.html
documentahlspev.html
Документ Операнд_1 ? операнд_2 : операнд_3 2 страница