Алгоритм разветвленной структуры - это алгоритм, в котором вычислительный процесс осуществляется по одной из ветвей. Если количество ветвей две – то используется условный блок, если больше – то множественный выбор. В программах используют соответственно условный оператор IF или оператор SWITCH для реализации разветвленного алгоритма.
Условный оператор в языке Си имеет формат:
if (условие) оператор1;
else оператор2; (полная форма)
if (условие) оператор1; (сокращенная форма).
Если оператор1 и оператор2 состоят из одного оператора, то в фигурные скобки они не заключаются. Если оператор1 и/или оператор2 являются составным оператором (несколько операторов), то он заключается в фигурные скобки. Условие всегда заключается в круглые скобки.
В качестве примера приведем программу вычисления наибольшего из значений функции y1=x²+1, y2=7-x² , y3=x+1 для любого х.
#include <stdio.h>
main()
{ float x,y1,y2,y3,max;
printf("\n Введите x "); scanf("%f ",&x);
y1=x*x+1; y2=7-x*x; y3=x+1;
if (y1>y2)
max=y1;
else
max=y2;
if (y3>max)
max=y3;
printf ("x=%8.2f y1=%8.2f y2=%8.2f y3=%8.2f max=%8.2f\n",x,y1,y2,y3,max);
}
В программах с множественным выбором используется переключатель switch , который сравнивает значение выражения, указанного за ним, и выполняет оператор, метка которого совпадает с этим значением.
Общий вид:
Switch (выражение)
{ case метка_1: список_операторов_1;
.............................
case метка_n: список_операторов_n;
default : операторы;
}
Значения выражения и меток должны быть целочисленными константами. Например, определим количество дней по введенному номеру месяца.
#include <stdio.h>
#include <conio.h> // Заголовочный файл для работы с терминалом
int m;
main()
{
printf("\n Введите номер месяца :"); scanf("%d",&m);
printf("\n В %d месяце дней: ",m);
switch(m){
case 1:case 3:case 5: case 7:case 8:case 10:case 12:
printf("тридцать один \n"); break;
case 2: printf ("двадцать восемь \n"); break;
case 4: case 6: case 9: case 11: printf("тридцать \n"); break;
default: printf("\n Номер месяца неверен \n");
}
getch ();
}
В примере программы, если номер месяца превышает 12, выводится сообщение о неверном вводе месяца, для чего используется default. Оператор break служит для прерывания цикла проверки и перехода в конец переключателя. В случае отсутствия break, происходит переход на следующую ветвь case. Функция getch, подключающаяся заголовочным файлом conio.h, ожидает нажатия любой клавиши. Это позволяет просмотреть результаты, не используя ALT+F5 для просмотра экрана пользователя.
1. Сравните виды условных операторов Си.
2. Всегда ли ставятся скобки и какие в условном операторе?
3. Зачем ставятся в переключателе операторы break и default?
4. Как будет работать программа из примера без break?
5. Приведите пример оператора if.
6. Приведите пример оператора switch.