- •1. Краткие теоретические сведения
- •1.1. Операции сравнения и логические операции
- •1.1.1. Операции сравнения
- •1.1.2. Логические операции
- •1.1.3. Логические выражения
- •1.2. Приоритет операций
- •1.3. Разветвляющийся вычислительный процесс
- •1.5. Оператор перехода
- •1.6. Пустой оператор
- •1.7.1. Короткая форма условного оператора
- •1.7.2. Полная форма условного оператора
- •1.9. Понятие составного оператора (группы операторов)
- •1.10.1. Проверка двух или более условий
- •1.10.5. Обработка нескольких условий
- •1.10.6. Вложенный условный оператор
- •1.11. Рекомендации по заданию исходных значений переменным
- •1.11.1. Операторы присваивания
- •1.11.2. Операторы ввода
- •1.11.3. Инициализация переменных
- •1.11.4. Именованные константы
- •1.12. Оператор множественного выбора switch
- •1.13. Использование отступов для улучшения удобочитаемости вашей программы
- •2. Задание
- •2.4. Задания для выполнения на занятиях
- •2.4.1. Задание 1
- •2.4.1.1. Условие задания
- •2.4.2. Задание 2
- •2.4.3. Задание 3
- •2.4.4. Задание 4
- •2.5. Задания для выполнения дома
- •2.5.1. Задание 1
- •2.5.2. Задание 2
- •3.6. Пример программы
- •3.7. Типичные ошибки при выполнении работы
- •2.5.3. Задание 3
- •3. Выводы
- •4. Требование к отчету
- •4. Краткие теоретические сведения.
- •5. Вопросы для самоконтроля
- •Литература
- •1. Краткие теоретические сведения 2
- •1.1. Операции сравнения и логические операции 2
- •1.1.1. Операции сравнения 2
1.7.2. Полная форма условного оператора
Оператор if в полной форме называется оператором if-else и имеет следующую форму записи:
if (выражение ) оператор1; else опертор2;
Например, if (x>0 && x!=10) y=2*x; else y=x*x;
Здесь выражение – выражение, которое может иметь арифметический тип или тип указателя; оператор1, оператор2 – простые или составные операторы языка. Простой оператор – это один оператор. Составной оператор (блок операторов) – это последовательность из нескольких любых операторов, в том числе операторов описания, заключенных в фигурные скобки.
Например, if (x<=5.6) { float a=2.1; y=a*sin(x); cout << "y = " << y << endl;}
Следует учитывать, что переменная a, описанная в блоке, не существует вне блока.
При выполнении оператора if-else сначала вычисляется значение выражения выражение. Если полученное значение не равно нулю (имеет значение true), то выполняется оператор1, иначе выполняется оператор2, а затем управление передаются на оператор, следующий за условным.
Ниже на рис. 6.6 и 6.7 приведены примеры программирования ветвлений с полной и короткой формой с использованием понятий пустого, составного и простого операторов.
|
|
|
|
|
|
|||
|
Да |
|
Нет |
|
||||
|
|
|
a <= 3 |
|
|
|||
|
|
|
|
|
y = a + x |
|
||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
|
|
|
|
|
|
|||
if (a <= 3) {;} else y = a + x; |
||||||||
|
|
|
|
|
||||
Рис. 6.6. Полная форма ветвления. Простой, пустой и составной операторы |
||||||||
|
|
|
|
|
В примере на рис. 6.6 оператор y= a+x; является простым оператором, а оператор {;} одновременно является пустым и составным.
|
|
|
|
|
|
||||
|
Да |
|
Нет |
|
|||||
|
|
|
a <= 3 |
|
|
||||
|
|
|
|
|
|
|
|
||
|
z=2+3*x; |
|
|
|
|
|
|
||
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
||
|
y=sin(z); |
|
|
|
|
|
|||
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
||||
if (a > 2) { z=2+3*x; y=sin(z);} |
|||||||||
|
|
|
|
|
|||||
Рис. 6.7. Короткая форма ветвления. Составной оператор |
|||||||||
|
|
|
|
|
В примере на рис. 6.7 оператор {z=2+3*x; y=sin(z);} является составным.
Внимание: Кроме всего прочего, примеры на рис. 6.5 и 6.6 показывают, что неполное ветвление, в котором отсутствуют команды на ветви "Да", может быть приведено к другой форме неполного ветвления путем изменения условия на противоположное (условие, противоположное условию a>3 есть условие a<=3, и наоборот). Из примера на рис. 6.6 видно, что отсутствующие команды ветви "Да" программируются с помощью пустого оператора {;}.
Поясним работу полной формы оператора IF на примерах.
Пример 6.5.
Пусть задана такая последовательность операторов:
if (а > в) а = а – 1; else а = а + 1; с = a*a;
Здесь использована полная форма условного оператора, в которой в качестве оператора S1 используется оператор а = а - 1; а в качестве S2 – оператор а = а + 1; При выполнении условного оператора if сначала проверяется условие (а > в) (то есть вычисляется значение выражения а > в ). Если а > в (то есть значение выражения равно (истинно), то выполняется ветвь "Да", то есть выполняется оператор a = a -1; а else-ветвь пропускается, то есть оператор а = а + 1; не выполняется. Другими словами, в случае истинности выражения а > в для заданного фрагмента программы будет выполнена последовательность операторов а = а - 1; с = а*a; .
В противном случае (то есть значение выражения а> b ложно) пропускается ветвь "Да" (то есть оператор а = а - 1; не выполняется) и сразу выполняется else-ветвь, то есть будет выполнен оператор а = а + 1;. Таким образом, в случае ложности выражения а > в для заданного фрагмента программы будет выполнена последовательность операторов а = а + 1; с = а *a; .
Пример 6.6
Пусть задана последовательность операторов:
x = 1;
s = 0;
start: s = s + x*x;
x = x + 2;
if x < 1000 goto START ;
В приведенном примере использована короткая форма условного оператора, то есть конструкция else опущена. Здесь в условном операторе в качестве оператора S1 используется оператор goto. Он будет выполняться (заставлять при этом программу возвращаться к оператору с меткой START ) только тогда, когда значение переменной x не превосходит 1000. Таким образом, этот фрагмент программы обеспечит подсчет суммы квадратов последовательности нечетных чисел от 1 до 999.
Отметим, что в качестве операторов S1 или S2 в условном операторе могут быть, в частности, пустые операторы (выполнение их не вызывает никаких действия, а запись состоит только из разделителя ; goto). То есть возможны конструкции оператора if
if (E) ; else S2;
if и (Е) S1; else ;
Например,
if (a = b) ; else x = x +2;
if и (Е) S1; else ;
Любой оператор, входящий в состав условного оператора (S1 и S2), может быть помечен, - и к нему возможен переход из другого места функции. Независимо от способа передачи управления на операторы S1 и S2 порядок выполнения условного оператора сохраняется.
Пример 6.7.
Задана последовательность операторов:
if (x = у) M1: a = 1; else M2: a = 0;
В данном примере в качестве оператора S1 в конструкции if использован оператор а = 1; помеченный меткой Ml, а в качестве оператора S2 - оператор а = 0;, помеченный меткой М2. Как на оператор а = 1;, так и на оператор а = 0; можно передать управление из другого места программы, например, с помощью оператора goто. Но независимо, на какой из операторов, а = 1; или а =0; передано управление, вначале проверяется условие x = у, и затем в случае истинности условия выполняется ветвь "Да", а в случае ложности условия - ветвь "Нет". Например, передали управление на оператор с меткой Ml и при этом в процессе вычислений оказалось, что x = у, то переменной а будет присвоено значение ноль (а = 0;), хотя мы и передали управление на оператор, присваивающий переменной а значение 1 (а = 1;).
Пример 6.8.
Следующая программа использует оператор if, чтобы проверить, больше тестовые очки или равны 90. Если условие истинно, программа выводит поздравление. Если условие ложно, программа сообщает, что студент должен работать усерднее:
#include <iostream.h>
int main()
{
int test_score =95;
if (test_score >= 90) cout << "Поздравляю, вы прошли тест" << endl;
else cout << "В следующий раз вы должны" << " работать усерднее!" << endl;
}
1.8. Программирование простых РВП средствами языка С++
Программирование простых разветвляющихся вычислительных процессов, содержащих в зависимости от условия одну или две ветви вычислений, осуществляется с использованием полной формы условного оператора if или совместным использованием короткой формы условного оператора if и оператора перехода goто. Программирование простых разветвляющихся вычислительных процессов рассмотрим на конкретных примерах.
Пример 6.9.
Вычислить значение р, исходя из следующих условий:
Фрагмент программы на C++ реализующий вычисление значения р с использованием полной формы условного оператора if, будет иметь вид
if (x >= 0) p = (x + у)/cos(z); else p = 1/(sin(z) + y);
Пример 6.10.
Вычислить значение функции
Вычисление функции может быть реализовано с помесью операторов
if (x >= 0 && x<=2) gx = 0; else gx = x*x – 2*x;
Пример 6.11.
Вычислить значение функции, график которой изображен на рис. 6.4.
Рис. 6.4. График функции y = f(x)
Функции, заданные графически, целесообразно описать аналитически, так как это во многом облегчит описание поведения функции средствами языка С++.
Для нашего примера поведение функции аналитически описывается следующим образом
Вычисление рассматриваемой функции может быть реализовано с помощью операторов
if (x <= 0) y = 0; else y = x;
или
if (x > 0) y = x; else y = 0;
Вычисление этой функции можно осуществить с использованием и короткой формы условного оператора
y = 0;
if (x > 0) y = x;
Примеры на совместное использование короткой формы условного оператора if и оператора перехода goto были рассмотрев ранее (см. примеры 6.1, 6.5, 6.7 ).