Оператор switch. Операторы передачи управления.




Лабораторная работа 5.

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Оператор имеет следующий формат:

switch (выражение) {

case константное выражение 1:

оператор 1;

break;

case константное выражение 2:

оператор 2;

break;

…………………………………

case константное выражение n:

оператор n;

break;

default:

оператор n+1;

break;

}

Выполнение оператора начинается с вычисления выражения оператора switch (оно должно быть целочисленным). Результат вычисления последовательно сравнивается с константными выражениями операторов case. Если сравнение в одном из операторов case дает значение «истина», то будет выполнен оператор (или блок операторов), следующий за строкой case. Если совпадения не произошло, выполняются операторы, расположенные после слова default, а при его отсутствии управление передается следующему за switch оператору. Все константные выражения должны иметь разные значения, но быть одного и того же целочисленного типа.

Оператор break в каждом блоке выбора осуществляет немедленный выход из оператора switch. Оператор break может отсутствовать. В этом случае, первый же случай сравнения, давший в результате «истину», приведет к выполнению всех последующих операторов, вплоть до конца оператора switch.

Рассмотрим программу «калькулятор», которая производит арифметические действия с двумя числами в зависимости от введенного с клавиатуры символа операции. В строке symbol=getch(); вызывается описанная в файле conio.h библиотечная функция getch() для чтения символа с клавиатуры. Функция ожидает, пока вы не нажмете клавишу на клавиатуре и возвращает код символа, при этом код символа не попадает в системный буфер и не отображается на экране. Значение символа присваивается переменной symbol. Строка printf("\n%c\n",symbol); отображает введенный символ на экране. Для ввода символа с клавиатуры мы могли бы использовать и функцию getchar заголовочного файла <stdio.h>, которая считывает символ с системного буфера клавиатуры. Но в программе перед функцией getchar мы используем функцию scanf, которая считывает символы до первого пробела, табуляции или возврата каретки (клавиша Enter). Поэтому после применения функции scanf в нашем случае в буфере останется символ возврата каретки. Теперь getchar считает не символ, который мы хотели бы ввести, а символ возврата каретки. Поэтому нам пришлось бы использовать дополнительный вызов функции getchar. Попробуйте.

Обратите внимание на строку:

if(f) printf("Result =%d",c);.

В начале программы мы выполнили присваивание: int f=1; Оператор if рассматривает 0 как «ложь», а любое ненулевое значение как «истину» и так как f=1, выполняется рrintf и печатается результат выполнения арифметических операций. В случае неверного ввода символа выполняется оператор default: printf("Unknown operation\n ");f=0; f присваивается значение 0 и результат не печатается.

 

pragma argsused

#include <stdio.h>

#include<conio.h>

int main()

{

int a,b,c;

char symbol;

int f=1;

printf("Introduce the first number \n ");

scanf ("%d",&a);

printf("Introduce the second number \n ");

scanf ("%d",&b);

printf("Introduce the operation symbol \n");

symbol=getch();

printf("\n%c\n",symbol);

switch(symbol)

{

case '+':c=a+b; break;

case '-':c=a-b; break;

case '*':c=a*b; break;

case '/':c=a/b; break;

default: printf("Unknown operation\n ");f=0;

}

if(f) printf("Result =%d",c);

getch();

return 0;

}

 

С использованием функции getchar:

 

printf("Introduce the first number \n ");

scanf ("%d",&a);

printf("Introduce the second number \n ");

scanf ("%d",&b);

getchar(); // освобождаем буфер

printf("Introduce the operation symbol \n");

symbol=getchar();

switch(symbol){…}

 

К операторам передачи управления относятся операторы break, goto, continue и return.

Оператор break используется внутри операторов цикла или switch для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break. Мы вернемся к нему позднее.

Оператор безусловного перехода goto позволяет перейти в указанное место программы, и, начиная с этой позиции, продолжить выполнение операторов программы. Оператор goto имеет формат:

goto метка;

В теле той же функции должна присутствовать ровно одна конструкция вида:

метка: оператор;

Оператор goto передает управление на помеченный оператор. Метка – это обычный идентификатор, стоящий в начале строки и заканчивающийся двоеточием. Областью видимости идентификатор, является функция, в теле которой он задан. Рассмотрим модификацию нашей программы с оператором goto.

 

#pragma hdrstop

 

//---------------------------------------------------------------------------

 

#pragma argsused

#include <stdio.h>

#include<conio.h>

int main()

{

int a,b,c;

char symbol;

printf("Introduce the first number \n ");

scanf ("%d",&a);

printf("Introduce the second number \n ");

scanf ("%d",&b);

label: printf("Introduce the operation symbol \n");

symbol=getch();

printf("\n%c\n",symbol);

switch(symbol)

{

case '+':c=a+b; break;

case '-':c=a-b; break;

case '*':c=a*b; break;

case '/':c=a/b; break;

default: printf("Unknown operation\n ");goto label;

}

printf("Result =%d",c);

getch();

return 0;

}

//---------------------------------------------------------------------------

 

Задание:

 

1. Написать программу решения задачи согласно варианту с использованием оператора switch. Варианты заданий находятся на диске:\U\iit\1-kurs\ii\OAiP\Lab06. Закомментировать операторы break, описать результат работы программы.

2. Добавить в программу оператор goto.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: