Операторы ветвления
Оператор ветвления(условия) – оператор управления, осуществляющий выполнение одного и только одного составного оператора из двух возможных в зависимости от условия.Синтаксис оператора ветвления:
if (условие){ составной оператор №1 }
else { составной оператор №2 }
Если составной оператор в основной или альтернативной ветви оператора управления содержит только один простой оператор, то фигурные скобки можно опустить. В таком случае синтаксис оператора ветвления примет вид:
if(условие) простой оператор №1;
else простой оператор №2;
Основное предназначение оператора ветвления в языке СИ – реализация разветвляющихся алгоритмов. Например, фрагмент программы, для вычисления функции: Y(x)=x*x,при x<0 и Y(x)=2*x, при x>=0
double x,y;
printf("Введите значение Х: ");
scanf("%lf”,&x);
if(x<0.0) y = x*x;
else y = 2.0*x;
printf("Результат: %lf\n”,y);
При построении программ с несколькими подряд идущими операторами ветвления необходимо учитывать следующее правило: оператор else относится к последнему оператору if. Например, рассмотрим фрагмент программы:
if(x>10.0) y = 2*x+5;
if(y<z) y = fabs(x);
else y = 2.5*x;
Если необходимо нарушить этот порядок (т.е. ветвь else отнести к первому оператору if), то необходимо второй оператор if включить в составной оператор прямой ветви первого оператора if:
if(x>10.0)
{
y = 2*x+5;
if(y<z) y = fabs(x);
} else y = 2.5*x;
В программировании часто встречается необходимость создания каскадных операторов ветвления. Синтаксис такой структуры имеет вид:
if (условие № 1) составной оператор № 1
else if (условие № 2) составной оператор № 2
...
else if (условие № N) составной оператор № N
else составной оператор № N+1
Например, фрагмент программы, для вычисления функции:Y(x)=x*x,при x<0 и Y(x)=2*x, при 0<=x<5, Y(x)=x+5, при x>5
double x, y;
printf("Введите значение Х: ");
scanf("%lf",&x);
if (x<0.0) y = x*x;
else if (x<5) y = 2.0*x;
else y = x + 5.0;
printf("Результат: %lf\n",y);
Правила форматирования. Альтернативная ветвь оператора ветвления всегда указывается на новой строке с отступом:
if(...) ...
else ...
Если в прямой или альтернативной ветви оператора ветвления находятся один простой оператор, то он указывается на той же строке:
if(...) оператор № 1;
else оператор № 2;
Если в прямой или альтернативной ветви оператора ветвления находятся составные операторы, то следует придерживаться следующего форматирования:
if(условие)
{
оператор № 1;
...
оператор № N;
}
else
{
оператор № N+1;
...
}
ИСКЛЮЧЕНИЕ: если операторы в прямой и альтернативной ветви имеют краткую запись, то допускается оператор ветвления записывать в одну строчку:
if(условие) оператор №1; else оператор №2;
Оператор выбора Давайте разберем работу оператора if на примере, пусть нам дается число, а нам нужно вывести (почитать о функциях ввода/вывода в СИ) соответствующий этому числу день недели(5 - пятница, 7- воскресенье и тд). программа будет иметь вид:
int n; //переменная для хранения номера дня недели
printf("Введите номер дня:");
scanf("%d",&n); //считываем число
if(n==1) printf("Понедельник\n"); //проверяем, если n равно 1 то выводим слово "понедельник"
else if(n==2) printf("Вторник\n"); // тоже выполняется для вторника, ну и тд для остальных дней недели
else if(n==3) printf("Среда\n");
else if(n==4) printf("Четверг\n");
else if(n==5) printf("Пятница\n");
else if(n==6) printf("Суббота\n");
if(n==7) printf("Воскресенье\n");
else printf("Неправильный номер!\n");
Такие действия можно заменить оператором выбора – оператор управления, осуществляющий выполнение одного или нескольких действий. Синтаксис оператора выбора в СИ:
switch(выражение) //выражение - численная переменная или функция возвращающая число
{
case значение1: оператор1;
case значение2: оператор2;
...
case значениеN: операторN;
default: оператор N+1;
}
ПРИМЕЧАНИЕ: чаще всего выполнение всех оператором после совпадения не нужно, поэтому в таком случае после операторов пишут ключевое слово break, которые выйдет из оператора ветвления switch. Программа о днях недели с использованием оператора switch выглядит так:
int n; //переменная для хранения номера дня недели
printf("Введите номер дня недели: ");
scanf("%d",&n); //считываем число
switch(n) //преверяем n, т.е в зависимости от его значения выполнится одна из следующих строк
{
case 1: {printf("Понедельник\n"); break;} //если n равно 1, то выполниться эта строка
case 2: {printf("Вторник\n"); break;} // а если 2, то эта. ну и т.д
case 3: {printf("Среда\n"); break;}
case 4: {printf("Четверг\n"); break;}
case 5: {printf("Пятница\n"); break;}
case 6: {printf("Суббота\n"); break;}
case 7: {printf("Воскресенье\n"); break;}
default: printf("Неправильной номер!\n”);
}
Правила форматирования При написании программ использующих оператор switch, следует придерживаться некоторых правил форматирования:
Общий формат оператора:
switch(...)
{
операторы
}
Каждый оператор case должен быть написан с отступом от switch и начинаться с новой строки. Если же оператор после case большой, то он записывается в несколько строк, выглядит это так:
case константа:
{
Оператор № 1;
...
Оператор № N;
break;
}
Теперь можно почитать о циклах в СИ.