- •Тема 2 Управляющие операторы
- •2.1 Базовые конструкции структурного программирования
- •2.2 Операции отношения и логические операции
- •2.3 Операторы ветвления. Условный оператор if
- •If ( выражение ) оператор_1; [ else оператор_2;]
- •2.4 Операторы ветвления. Оператор множественного выбора switch
- •2.5 Операторы цикла
- •2.6 Цикл с предусловием (while)
- •2.7 Цикл с постусловием (do while)
- •2.8 Цикл for
- •2.9 Вложенные циклы
- •2.10 Операторы передачи управления
2.3 Операторы ветвления. Условный оператор if
Условный оператор if используется для разветвления процесса вычислений на два направления. Схема алгоритма оператора приведена на рисунке 2.1. Формат оператора:
If ( выражение ) оператор_1; [ else оператор_2;]
Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю, т.е. равно true, то выполняется первый оператор, иначе – второй. После этого управление передается на оператор, следующий за условным. Одна из ветвей может отсутствовать.
Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок. Блок может содержать любые операторы, в том числе описания и другие условные операторы.
Примеры:
if ( a < 0) b = 1; // 1
if ( a < b && (a >d || a == 0 ) )
b++;
else
{ b *= a; a = 0;} // 2
if (a < b)
if (a < c )
m = a;
else
m = c;
else
if ( b < c )
m = b;
else
m = c; // 3
В примере 1 отсутствует ветвь else. Подобная конструкция называется "пропуск оператора", поскольку присваивание либо выполняется, либо пропускается в зависимости от выполнения условия.
Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие a < b и одно из условий в скобках. Если опустить внутренние скобки, будет выполнено сначала логическое И, а потом – ИЛИ.
Оператор в примере 3 вычисляет наименьшее значение из трех переменных.
По синтаксису оператора if в его ветвях должно быть не более одного оператора. Если же их больше, то они должны быть объединены в блок с помощью фигурных скобок или с помощью операции «запятая» (,).
Рисунок 3.2 – Мишень
Пример. Производится выстрел по мишени, изображенной на рисунке 3.2. Определить количество очков.
#include <stdio.h>
int main( )
{
float x, y;
int kol;
printf ( "\n Введите координаты выстрела ");
scanf ("%f", &x);
scanf ("%f", &y);
if ( x * x + y * y < 1 )
kol = 2;
else
if ( x*x + y*y < 4 )
kol = 1;
else
kol = 0;
printf ( "\n Очков: %d", kol );
}
2.4 Операторы ветвления. Оператор множественного выбора switch
Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Формат оператора:
switch ( выражение )
{
case константное_выражение_1: операторы 1;
case константное_выражение_2: операторы 2;
...
case константное_выражение_n: операторы n;
[default: операторы ;]
}
Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным), а затем управление передается case-метке – операторам, помеченным константным выражением, значение которого совпало с вычисленным, после чего последовательно выполняются все остальные ветви, если выход из переключателя явно не указан.
Все константные выражения должны иметь разные значения, но быть одного и того же целочисленного типа. Несколько меток могут следовать подряд. Если совпадения не произошло, выполняются операторы, расположенные после слова default (а при его отсутствии управление передается следующему за switch оператору).
Если в какой-то из case-меток отсутствует оператор break, то выполнятся также операторы в следующей case-метке и так далее до тех пор, пока где-то не встретится оператор break.
Пример (программа реализует простейший калькулятор на 4 действия):
#include <stdio.h>
int main( )
{
int a, b, res;
char op;
printf ( "\n Введите 1-й операнд: ");
scanf ("%d", &a);
printf ( "\n Введите знак операции: ");
scanf ("%c", &op);
printf ( "\n Введите 2-й операнд: ");
scanf ("%d", &b);
bool f = true;
switch (op)
{
case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
case '/': res = a / b; break;
default: printf ("\n Неизвестная операция"); f = false;
}
if ( f )
printf ("\n Результат: %d", res);
}
Выход из переключателя обычно выполняется с помощью операторов break или return.
