Алгоритм разветвленной структуры - это алгоритм, в котором вычислительный процесс осуществляется по одной из ветвей. Если количество ветвей две – то используется условный блок, если больше – то множественный выбор. В программах используют соответственно условный оператор 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.