Опубликован: 07.03.2015 | Уровень: для всех | Доступ: свободно | ВУЗ: Компания ALT Linux
Лекция 3:

Операторы управления

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

Одна из основных конструкций алгоритма — разветвляющийся процесс. Он реализован в языке С++ двумя условными операторами: if и switch Рассмотрим каждый из них.

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

При решении большинства задач порядок вычислений зависит от определённых условий, например, от исходных данных или от промежуточных результатов, полученных на предыдущих шагах программы. Для организации вычислений в зависимости от какого-либо условия в С++ предусмотрен условный оператор if, который в общем виде записывается следующим образом:

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

где условие — это логическое (или целое) выражение, переменная или константа, оператор_1 и оператор_2 — любой оператор языка С(С++) .

Работает условный оператор следующим образом. Сначала вычисляется значение выражения, указанного в скобках. Если оно не равно нулю, т.е. имеет значение истина (true), выполняется оператор_1. В противном случае, когда выражение равно нулю, т.е. имеет значение ложь (false), выполняется оператор_2. Алгоритм, который реализован в условном операторе if, представлен на рис. 3.8.

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

cin>>a; cin>>b;
if ( a==b) cout<<" a равно b ";
else cout<<" a не равно b ";
			

Внимание! Не путайте знак проверки равенства == и оператор присваивания =. Например, в записи if (a=0) b=1; синтаксической ошибки нет. Операция присваивания a=0 формирует результат и его значение проверяется в качестве условия. В данном примере присваивание b=1 не будет выполнено никогда, так как переменная a всегда будет принимать значение равное нулю, то есть ложь. Верная запись: if (a==0) b=1;.

Алгоритм условного оператора if ... else

Рис. 3.8. Алгоритм условного оператора if ... else
Алгоритм условного оператора if

Рис. 3.9. Алгоритм условного оператора if

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

if ( условие )
{
	оператор_1;
	оператор_2;
	...
}
else
{
	оператор_3;
	оператор_4;
	...
}
			

Альтернативная ветвь else в условном операторе может отсутствовать, если в ней нет необходимости:

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

В таком "усечённом" виде условный оператор работает так: оператор (группа операторов) либо выполняется, либо пропускается, в зависимости от значения выражения, представляющего условие. Алгоритм этого условного процесса представлен на рис. 3.9.

Пример применения условного оператора без альтернативной ветви else может быть таким:

cin>>a; cin>>b;
c =0;
//Значение переменной c изменяется только при условии, что a не равно b
if ( a!=b) c=a+b;
cout<<" c = "<<c;
			

Условные операторы могут быть вложены друг в друга. При вложениях условных операторов всегда действует правило: альтернатива else считается принадлежащей ближайшему if. Например, в записи

if (условие_1) if (условие_2) оператор_А; else оператор_Б;
			

оператор_Б относится к условию_2, а в конструкции

if (условие_1) { if (условие_2) оператор_А; }
else оператор_Б;
			

он принадлежит оператору if с условием_1.

Рассмотрим несколько задач с применением условных процессов.

Задача 3.1. Дано вещественное число x. Для функции, график которой приведён на рис. 3.10, вычислить y = f(x).

Графическое представление задачи 3.1

Рис. 3.10. Графическое представление задачи 3.1

Аналитически функцию, представленную на рис. 3.10, можно записать так:

\begin{equation} y(x)=\left\{\begin{matrix} 4, & x\leqslant -2\\ 1, & x\geqslant 1\\ x^2, & -2<x<1 \end{matrix}\right. \end{equation}

Составим словесный алгоритм решения этой задачи:

  1. Начало алгоритма.
  2. Ввод числа x (аргумент функции).
  3. Если значение x меньше либо равно -2, то переход к п. 4, иначе переход к п. 5.
  4. Вычисление значения функции: y = 4, переход к п. 8.
  5. Если значение x больше либо равно 1, то переход к п. 6, иначе переход к п. 7.
  6. Вычисление значения функции: y = 1, переход к п. 8.
  7. Вычисление значения функции: y = x^2.
  8. Вывод значений аргумента x и функции y.
  9. Конец алгоритма.

Блок-схема, соответствующая описанному алгоритму, представлена на рис. 3.11.

Блок-схема алгоритма решения задачи 3.1

Рис. 3.11. Блок-схема алгоритма решения задачи 3.1

Текст программы на языке C++ будет иметь вид:

#include <iostream>
using namespace std;
int main ( )
{
	float X,Y;
	cout<<" X = "; cin >>X;
	if (X<=-2) Y=4;
	else if (X>=1) Y=1;
	else Y=X*X;
	cout <<" Y = " <<Y<< endl;
	return 0;
}
			
Сергей Радыгин
Сергей Радыгин

Символы кириллицы выводит некорректно. Как сделать чтобы выводился читабельный текст на русском языке?

Тип приложения - не Qt,

Qt Creator 4.5.0 основан на Qt 5.10.0. Win7.

 

Юрий Герко
Юрий Герко

Кому удалось собрать пример из раздела 13.2 Компоновка (Layouts)? Если создавать проект по изложенному алгоритму, автоматически не создается  файл mainwindow.cpp. Если создавать этот файл вручную и добавлять в проект, сборка не получается - компилятор сообщает об отсутствии класса MainWindow. Как правильно выполнить пример?