Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Глава2_Управляющие структуры С++.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
193.54 Кб
Скачать

Глава II. Управляющие структуры

В любом языке программирования существует три управляющие структуры: следование, ветвление и цикл.

Следованием называется структура, представляющая собой последовательное выполнение двух или более операторов (простых или составных). Ветвление позволит нам выполнить одну из нескольких инструкций, в зависимости от заданного условия. А цикл – это выполнение одного и того же набора инструкций несколько раз.

Простые управляющие структуры удобно представить в виде блок-схем:

Рис. 3. Блок-схемы управляющих структур программирования:

следования, ветвления и цикла (с предусловием и с постусловием)

Каждая управляющая структура – это отдельная инструкция программы.

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

6.1. Условный оператор if

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

if (выражение) оператор_1;

[else оператор_2;]

Вначале вычисляется значение выражения, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю, выполняется оператор_1, иначе – оператор_2. После этого управление передается на оператор, следующий за условным. Ветвь else может отсутствовать.

Примеры:

if (a>b) max=a; //Полный условный оператор

else max=b;

if (a<0) a=-a; //Сокращенный условный оператор

Условие помещается в скобки обязательно.

Обратите внимание, что перед else ставится точка с запятой.

Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок. Блок может содержать любые операторы, в том числе описания и другие условные операторы.

Пример.

if (х>0) { x=-x; a =2*b;}

else { int i=2; x*=i; a=b/x;}

При использовании блоков (то есть составных операторов с определениями и описаниями) нельзя забывать о локализации определяемых в блоке объектов. Например, следующая конструкция будет ошибочной:

if (j>0) {int i; i=2*j;} else i=-j;

так как переменная i локализована в блоке и не существует вне него.

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

if (a<b && (a>d || a==0)) b++;

else {b*=a; a=0;}

выражение будет истинно в том случае, если выполнится одновременно условие a<b и хотя бы одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом – ИЛИ.

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

Високосным является год, номер которого делится без остатка на 4. При этом если он делится на 100, то год невисокосный, однако если он делится на 400, то он все равно високосный. Например, високосными являются годы 1980 (делится на 4, но не делится на 100) и 2000 (делится на 400), а год 1900 не является високосным.

#include <stdio.h>

void main()

{

int year;

printf("Введите год: ");

scanf("%d", &year);

printf("Год %d - ", year);

if (year%400==0 || (year%4==0 && year%100!=0))

printf("високосный\n");

else

printf("невисокосный\n");

}

Зачастую одно и то же логическое выражение можно построить "с двух сторон" – с отрицанием и без него. Мы использовали условие високосности:

(year%400==0 || (year%4==0 && year%100!=0))

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

(year%4!=0 || (year%100==0 && year%400!=0))

Часто нам приходится осуществлять выбор более чем из двух вариантов. Мы можем вкладывать условные операторы друг в друга. Например:

if (выражение_1)

if (выражение_2)

оператор_1;

else // это else относится ко второму if

оператор_2;

else // а это else - к первому if

оператор_3;

или

if (выражение_1)

оператор_1;

else // это else относится к первому if

if (выражение_2)

оператор_2;

else // а это else - ко второму if

оператор_3;

Пример. Программа нахождения наибольшего из двух целых чисел a и b.

#include <stdio.h>

void main()

{

int a,b;

printf ("Введите первое число\n");

scanf("%d",&a);

printf ("Введите второе число\n");

scanf("%d",&b);

if (a==b)

printf ("Заданные числа равны\n");

else

if (a>b)

printf ("Первое число больше второго\n");

else

printf ("Второе число больше первого\n");

}

Замечание. Применяйте отступы в строках, чтобы сделать структуру программы более наглядной.

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

if (n>0)

if (a>b) z=a;

else z=b;

else-часть относится к внутреннему if.

Если требуется отнести else к внешнему if, то необходимо использовать фигурные скобки:

if (n>0)

{

if (a>b) z=a;

}

else z=b;