Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР6-С++-27 марта-2012.doc
Скачиваний:
17
Добавлен:
28.08.2019
Размер:
6.55 Mб
Скачать

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 ).