Оператор выбора (switch)

Для определения варианта продолжений действий алгоритма, когда число ветвей больше двух, в программе используется оператор вида:

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:; /* помеченный пустой оператор */

}

Результат программы:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: