Для определения варианта продолжений действий алгоритма, когда число ветвей больше двух, в программе используется оператор вида:
switch (выражение)
{ case метка: операторы;
……..
default: операторы;
}, где
switch (переключатель), case (вариант), default (отсутствие варианта) – ключевые слова;
выражение – переключатель для получения значения целого или символьного типа;
метка – одно из значений типа выражение, которые могут следовать в любом порядке;
операторы – последовательность операторов варианта, которая не заключается в операторные скобки и может даже отсутствовать.
Действие оператора выбора состоит в следующем:
· По значению выражения определяется совпадающая с ним метка варианта (ветви) действий алгоритма.
· После выполнения операторов варианта с данной меткой выполняются операторы следующих вариантов, если только не встретится оператор передачи управления goto или break. Оператор goto может передать управление любому оператору программы, а оператор break (прервать) передает управление оператору, следующему за оператором switch.
|
|
· Если нужная метка не найдена и есть необязательное ключевое слово default, то выполняются операторы идущие за ним, в противном случае управление передается оператору, следующему за оператором switch.
Пример: Программа выбора вариантов вычислений.
#include <stdio.h> /* функции стандартного ввода-вывода */
#include <conio.h> /* функции консольного ввода-вывода */
#include <math.h> /* математические функции */
void main () /* главная функция */
{ int i; float F, x; /* описание переменных */
clrscr (); /* очистка экрана */
printf (“Введите i, x:”);
scanf (“%d%f”, &i, &x); /* ввод исходных данных */
switch (i-2) /* переключатель выбора вариантов */
{ case 2: F = sin(x); break; /* метка и вариант вычислений */
case 10: case 12: F = x * x; break;
default: printf (“Вариант отсутствует”); goto fin;
}
printf (“F = % f”, F); /* вывод результата */
fin:; /* пустой оператор */
}
Пример. Ввести два числа, знак операции и вычислить выражение. Рассмотрим решение этой задачи с использованием операторов if и switch.
1. Программа использования вложенных операторов if.
#include <conio.h>
#include <stdio.h>
void main ()
{ float x, y, rez; /* переменные для чисел и результатов */
char sign; /* переменная для знака операции */
clrscr (); /* очистка экрана */
printf (“\n Введите 2 числа x, y:”);
scanf (“%f%f”, &x, &y); /* ввод чисел */
fflush (stdin); /* очистка буфера ввода */
printf (“Введите знак операции (+, –, *, / или иной):”);
scanf (“%c”, &sign); /* ввод символа операции */
/* sign = getchar (); другой вариант ввода символа */
if (sign ==”+”) rez = x+y; /* проверка знака и результат операции */
else if (sign == ”–”) rez = x–y;
else if (sign == ” *”)rez = x * y;
else if (sign == ” / ”)
{ if (y==0) /* проверка делителя */
{ printf (“Деление на 0!”);
|
|
goto fin; /* выход на конец программы */
}
else rez = x / y;
}
else
{ printf (“Неизвестная операция!”);
goto fin; /* выход на конец программы */
}
printf(“x %c y=%5.1f”, sign, rez); /* вывод результата операции */
fin:; /* помеченный пустой оператор */
}
Pезультат программы:
Введите 2 числа x, y: 5 7
Введите знак операции (+, –, *, / или иной): *
x * y = 35.0
2. Более рационально решать эту задачу с использованием оператора выбора вариантов.
Программа использования оператора выбора switch для определения знака операции:
#include<conio.h>
#include<stdio.h>
void main ()
{ float x, y, rez; /* переменные для чисел и результата */
char sign; /* переменная для знака операции */
clrscr (); /* очистка экрана */
printf (“\nВведите 2 числа x, y: “);
scanf (“%f%f”, &x, &y); /* ввод чисел */
fflush (stdin); /* очистка буфера ввода */
printf (“Введите знак операции (+, –, *, / или иной): “);
scanf (“%c”, &sign); /* ввод символа операции */
switch (sign) /* переключатель для знака операции */
{ case ‘+’: rez=x + y; break; /* выбор варианта и выход из него */
case ‘– ’: rez=x – y; break;
case ‘ * ’: rez=x * y; break;
case ‘ / ’: if (y==0) /* проверка деления */
{ printf(“Деление на 0! ”);
goto fin; /* выход на конец программы */
}
else
{ rez= x / y; break; }
deafult: printf(“Неизвестная операция”);
goto fin; /* выход на конец программы */
}
printf(“x %c y=%5.1f”,sign,rez); /* вывод результата операции */
fin:; /* помеченный пустой оператор */
}
Результат программы: