Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
konspekt_1_semestr.doc
Скачиваний:
12
Добавлен:
02.08.2019
Размер:
654.34 Кб
Скачать

Оператор принятия решений switch

Хотя конструкция if-else-if может выполнять многочисленные проверки, она не очень элегантна. Код очень труден для восприятия. С этой целью язык С++ имеет оператор принятия решений switch, выполняющий действия, основываясь на сравнении значения со списком констант символов или целых чисел. При обнаружении выполняется оператор или операторы, ассоциированные с данным значением. Оператор switch имеет следующий вид:

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

case константа_1 :

последовательность_операторов

break;

case константа_2 :

последовательность_операторов

break;

case константа_3 :

последовательность_операторов

break;

.

.

[default :

последовательность_операторов]

}

Оператор default выполняется, если не найдено соответствий. default необязателен и, если его нет, то в случае отсутствия совпадений ничего не происходит. Когда обнаруживается совпадение, операторы, ассоциированные с соответствующим case, выполняются до тех пор, пока не встретится оператор break. В случае default (или последнего case, если отсутствует default), оператор switch заканчивает работу при обнаружении конца.

Следует знать о трех важных моментах оператора switch:

1) switch отличается от if тем, что он может выполнять операции проверки строгого равенства, в то время как if может вычислять логические выражения и отношения.

2) Не может быть двух констант в одном операторе switch, имеющих одинаковые значения, но константы должны иметь один тип. Конечно, оператор switch, включающий в себя другой оператор switch, может содержать аналогичные константы.

3) Если в операторе switch используются символьные константы, они автоматически преобразуются к символьным значениям.

4) если выход break из switch явно не указан, последовательно выполняются все остальные ветви.

Пример

#include <stdio.h>

#include <conio.h>

void main(void)

{

int a,b,z;

char znak;

printf(“Введите значение а операцию(+,-,*,/,%)и b, \n”);

scanf("%d%c%d",&a,&znak,&b);

switch(znak) {

case ‘+’:z=a+b;break;

case ‘-’:z=a-b;break;

case ‘*’:z=a*b;break;

case ‘/’:z=a/b;break;

case ‘%’:z=a%b;break;

default :printf(“НеДопустимая операция”);

}

if ((znak=='+')||(znak=='-')||(znak=='*')||(znak=='/')||(znak=='%'))

printf("a %c b = %d",znak,z);

}

Если необходимо выполнить одни и те же действия при нескольких различных значения констант, метки перечисляются одна за одной:

#include <stdio.h>

#include <conio.h>

void main(void)

{

int key;

printf(“Нажмите одну из курсорных клавиш\n”);

key=getch();key=getch();

switch(key) {

case 77: case 75:case 72:case 80: printf(“Strelki”);break;

default :printf(“ Ne strelki”);

}

}

Вложенные операторы switch. Один оператор switch может иметь среди последовательности операторов другой оператор switch. Даже если константы case внутреннего и внешнего операторов имеют одинаковые значения, не возникнет никакого конфликта. Следующий фрагмент программы совершенно корректен:

switch (x) {

case 1:

switch (y) {

case 0: printf(“Ошибка. Деление на ноль.”);

break;

case 1: process(x, y);

}

break;

case 2:

.

Операторы цикла

В языке С и в других современных языках программирования операторы цикла (итераций) позволяют выполнять набор инструкций до тех пор, пока не выполнится некоторое условие.

Оператор цикла for

Стандартный вид цикла for следующий:

for(инициализация; условие; Модификации) тело цикла;

Оператор for имеет три главные части:

1) Инициализация – это место, где обычно находится оператор присваивания, используемый для установки начального значения переменной цикла.

2) Условие – это место, где находится выражение, определяющее условие работы цикла.

3) Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла.

Эти три важные части разделяются точкой с запятой. Цикл for работает до тех пор, пока условие истинно. Когда условие становится ложным, выполнение программы продолжается с оператора, следующего за циклом for.

На схеме алгоритма

Пример (программа печатает таблицу значений функции y=х2+l во введенном диапазоне):

finclude <stdio.h>

int main()

{

float Xn, Xk, Dx. X;

printf("BBedite диапазон и шаг изменения аргумента: ");

scanf(“%f%f%f”, &Хn, &Xk, &Dx);

printf(“| X | У |\n);

for (X = Xn; X<=Xk: X += Dx)

printf('| %5.2f | %5.2f |\n", X, X*X + 1);

return 0;

}

В программе переменная x изначально установлена в Xn. Поскольку x меньше Xk, вызывается функция printf() для вывода текущего значения x,y, после чего x увеличивается на Dx и проверяется условие: по-прежнему ли x меньше либо равно Dx. Данный процесс продолжается до тех пор, пока x не станет больше Dx, и в этот момент цикл прервется. В данном примере x является переменной цикла, которая изменяется и проверяется на каждой итерации цикла.

Ниже приведен пример цикла for, повторяющего сразу несколько операторов:

for(x=100; x!=65; x=5)

{ z = sqrt(x);

printf(“Корень квадратный из %d равен %f\n);

}

Как sqrt(), так и printf(), вызываются и выполняются, пока x не равно 65. Следует обратить внимание, что в цикле переменная x уменьшается: сначала она получает значение 100 и на каждой итерации цикла происходит уменьшение на 5.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]