Оператор switch, оператор break, оператор goto

(2 часа)

Цель работы: Научиться писать программы, используя операторы переключения switch в паре с операторомbreak,оператор перехода goto.

Теоретические сведения

Оператор варианта switch

Оператор выбора вариантаswitchзаменяет несколько операторов if…else. Обычно оператор switchиспользуется тогда, когда требуется выбор и выполнение только одной последовательности операторов из нескольких возможных, хотя возможности оператора switchне ограничиваются этим случаем.

Синтаксис оператора switch:

switch (<выражение>)

{

case <константное_выражение_1>:

<оператор 1>

[case <константное_выражение_2>:

<оператор 2>]

...

[case <константное_выражение_n>

<оператор n>]

[default:

<оператор>]

}

После вычисления <выражения> типа intв ( в заголовке оператора switch) результат сравнивается последовательно с <константными_выражениями>, стоящими после зарезервированных слов case, которые вместе с <константными_выражениями> являются внутренними метками оператора, После <константных_выражений> обязательно ставится признак метки ":". Сравнение значения <выражения>начинается с самого верхнего <константного_выражения>и далее, пока не будет установлено их соответствие. Тогда выполняются операторы после соответствующей метки case, на которую передается управление. Для того чтобы прекратить последовательное выполнение операторов и выйти из оператора switch, необходимо после группы операторов, принадлежащих выбранному case, поставить оператор break. Если breakотсутствует, то последовательно выполняются все операторы, а метки не учитываются.

Последовательность операторов, стоящих после слова default (умолчание),выполняется тогда, когда значение <выражения> не совпадает ни с одним <константным_выражением>. Пример показывает возможности оператора switch. Функция error_messageвыводит одно из трех сообщений в зависимости от значения, когда ошибки (параметрerror_code).

Пример

void error_message(int error_code)

{ switch(error_code)

{ case 1: printf("\n сообщение 1"); break;

case 2: printf("\n сообщение 2"); break;

case 3: printf("\n сообщение 3"); break;

default : printf("\n неверный код ошибки");

}

}

Пример

/* ЗАНЯТИЕ N 5

Выполнил студент группы ......... Петров Ю.В.

Применение операторов if, switch, тернарной операции (? :)

на примере простого калькулятора. Более сложные условия

для оператора switch приведены в тексте программы */

#include <stdio.h>

#include <conio.h>

#include <math.h>

int main(void)

{ float a,b,rez;

int s,p,h;

char oper, flag=' ';

clrscr();

printf("\n Введите через пробел два числа: ");

scanf(" %f %f ", &a, &b);

printf(" Введите знак операции (+ - * /): ");

oper1: oper=getche();

switch(oper)

{ case '+': rez=a+b; break;

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

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

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

default : printf("\n Повторите ввод знака: ");

goto oper1;

}

printf("\n Результат операции: %5.2f\n",rez);

oper2: printf("\n Введите цифру в интервале (-9...+9) : ");

scanf("%d",&s); //Условия для оператора switch:

if(s<0) //если s=0, то - a++, p++, h++

{ s=abs(s); //если s=1, то - p++, h++

flag='-'; //если s=2, то - h++

} //если s=3, то - a--

else flag=' '; //если s=4, то - p--

if(s<=9) //если s=5, то - h--

//если s=6..7, то - a=1, p=1, h=1

switch(s) //если s=8, то - a=0, p=0, h=0

{case 0: a++;

case 1: p++;

case 2: printf("\tВы ввели %c%d",flag,s); h++; break;

case 3: printf("\tВы ввели %c%d",flag,s); a--; break;

case 4: printf("\tВы ввели %c%d",flag,s); p--; break;

case 5: printf("\tВы ввели %c%d",flag,s); h--; break;

case 6: case 7: printf("\tВы ввели %c%d",flag,s);

a=1; p=1; h=1; break;

case 8: printf("\tВы ввели %c%d",flag,s);

a=0; p=0; h=0; break;

default: printf("\tВы ввели %c%d \n\

на границе интервала",flag,s);

goto oper2;

}

else { printf("\tВы ввели число вне интервала (-9...+9)\n");

goto oper2;

}

printf("\n Результат switch: a=%5.2f p=%2d h=%2d\n",a,p,h);

getch();

if (p==0) {b=10; a=10;}

else {b+=b/p; a+=a/p;}

printf("\n Результаты вычислений: a=%5.2f b=%5.2f",a,b);

rez=(b<a)?b:a;

printf("\n Результат тернарной операции: res=%5.2f",rez);

getch();

return 0;

}

/*Введите через пробел два числа: 54 32

Введите знак операции (+ - * /): /

Результат операции: 1.69

Введите цифру в интервале (-9...+9) : -9

Вы ввели -9 на границе интервала

Введите цифру в интервале (-9...+9) : -6

Вы ввели -6

Результат switch: a= 1.00 p= 1 h= 1

Результаты вычислений: a= 2.00 b=64.00

Результат тернарной операции: res= 2.00 */

Ход работы

6 В соответствии с индивидуальным заданием разработать программу с применением операторов ветвления, выбора варианта, разрыва, перехода (при составлении программы использовать операторы if…else, switch, break, goto, операцию (?:)в двух-трех вариантах).

7 Набрать программу и устранить ошибки.

8 Изучить работу операторов, различные возможности их применения.

9 Получить результаты.

10 Оформить отчет и сделать выводы по работе, изучив контрольные вопросы по теме.

Задание к лабораторной работе

Используя оператор case, составьте программу для решения следующей задачи.

Вариант mn. Вычислите таблицу значений функции

Оператор switch, оператор break, оператор goto - student2.ru

для целочисленных значений аргумента x из интервала [Хн,Хк]. Множества Х1234 и функции f1,f2,f3,f4 заданы в таблицах 5,6.

Таблица 5

m X1 X2 X3 X4
-10 нечетные числа из интервала [6,12] четные числа из интервала [6,12] [-2,5] остальные числа
четные числа из интервала [10,20] нечетные числа из интервала [10,20] [1,8] остальные числа
числа, кратные 3 из интервала [10,20] числа, некратные 3 из интервала [10,20] [2,5] и [21,24] остальные числа

Таблица 6

n f1(x) f2(x) f3(x) f4(x)
px2+sinx 10x3-tg(x/5) cospx e-x/4
ln2(x2+1,5) e-2x sinpx arctg(3x)
e2x-5 cos2(px) ln(x2+2,5) arcsin(x/30
arccos(x/35) e2x-10 ln2(3x+1) sin(2px)
e-x/10 arctg(4x) Оператор switch, оператор break, оператор goto - student2.ru |8x3-20|
Оператор switch, оператор break, оператор goto - student2.ru tg2(x/5) 2sin(x/p) ex+2
e2x-15 Оператор switch, оператор break, оператор goto - student2.ru ln|x+1,5| sin3(x2)
5e-x sin(px2/2) Оператор switch, оператор break, оператор goto - student2.ru arctg(x/3)
psin(px/3) ex/10+2 Оператор switch, оператор break, оператор goto - student2.ru cos2|x|
Оператор switch, оператор break, оператор goto - student2.ru ln(x3+1,8) sin(3x+p) x2+5x

Лабораторная работа №9

Операции С, их приоритеты и использование.
Преобразование типов

(4 часа)

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

Теоретические сведения

Язык С имеет мощную арифметическую и логическую основу, которая позволяет быстро, компактно и эффективно писать код программы. В С разработано множество базовых арифметических и логических операций, а также функции библиотеки математической поддержки языка. Операндами операций могут быть выражения определённых видов, зависящих от операции. В простейшем случае операндами являются переменные. Переменные, прежде чем они будут использованы, должны быть объявлены с определённым спецификатором типа.

Таблица 6.1 - допустимые операции над переменными

АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
Операция Пояснение Пример
* Умножение A=b*c;
/ Деление (для целых – нацело) a=b/c;
% Остаток от деления (для целых) a=b%c;
<операция x> = + = ; - = ; * = ; / = ; % = составное присваивание Изменить и заменить a+=3; или a=a+3; a%=c; или a=a%c;
++ Инкремент(увеличить на 1) с++ ; или с=с+1; + + а
-- Декремент(уменьшить на 1) с-- ; или с=с-1; - - а
+ Бинарный плюс (сложение) A=b+c;
- Бинарный минус (вычитание) A=b-c;
ЛОГИЧЕСКИЕ ОПЕРАЦИИ
Операция Пояснение Пример
&& "И" a&&b
|| "ИЛИ" a||b
! "НЕ" !a
== "РАВНО" a= =b
!= "НЕ РАВНО" a!=b
> "БОЛЬШЕ" a>b
>= "БОЛЬШЕ ИЛИ РАВНО" a>=b
< "МЕНЬШЕ" a<b
<= "МЕНЬШЕ ИЛИ РАВНО" a<=b
ПОБИТОВЫЕ ОПЕРАЦИИ (ПОРАЗРЯДНЫЕ)
Операция Пояснение Пример
& “И” (and) 1&1=1; 1&0=0 ;0&0=0;
| “ИЛИ” (or) 1 | 1=1 ; 1 | 0 =1 ; 0 | 0=0;
^ “ИСКЛЮЧАЮЩЕЕ ИЛИ” (xor) 1^1 = 0 ; 1 ^ 0=1 ; 0^0=0;
~ “ОТРИЦАНИЕ” (not) ~1=0; ~0=;
<< “СДВИГ ВЛЕВО” (shl) 0001b<<2=0100b; (буква b означает что число двоичное)
>> “СДВИГ ВПРАВО” (shr) 0010b >> 1=0001b;
<операция_х>= составное присваивание. Изменить и заменить, где <операция_х> может быть: &,|,^,>>,<<. а&=b или a = &b a^=bилиa = a^b a<<=bили a<<b

Наши рекомендации