Оператор 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. Вычислите таблицу значений функции
для целочисленных значений аргумента x из интервала [Хн,Хк]. Множества Х1,Х2,Х3,Х4 и функции f1,f2,f3,f4 заданы в таблицах 5,6.
Таблица 5
m | Xн | Xк | 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) | |8x3-20| | ||
tg2(x/5) | 2sin(x/p) | ex+2 | ||
e2x-15 | ln|x+1,5| | sin3(x2) | ||
5e-x | sin(px2/2) | arctg(x/3) | ||
psin(px/3) | ex/10+2 | cos2|x| | ||
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 |