Главная страница

Лекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)


Скачать 319.62 Kb.
НазваниеЛекции Булатицкий Дмитрий Иванович (во многом по материалам Прасолова А. Н.)
Дата11.01.2022
Размер319.62 Kb.
Формат файлаdocx
Имя файлаLecture_Programming_2021_09_01.docx
ТипЛекции
#328427
страница14 из 36
1   ...   10   11   12   13   14   15   16   17   ...   36

Множественный выбор. Оператор переключения


В предыдущей программе осуществлялся так называемый "множественный выбор", когда в зависимости от значения некоторой переменной целого типа выбиралось одно из нескольких действий.

Для осуществления подобных операций в языке Си существует специальный оператор "switch" -переключатель. Используя этот оператор, вместо вложенных "if" в предыдущей программе можно записать следующую конструкцию:
switch ( choice )

{

case 1 : fun=sin(x); break;

case 2 : fun=cos(x); break;

case 3 : fun=tan(x); break;

case 4 : loop=0; break;

default: printf( "Неверный выбор\n" ); break;

}
Здесь ключевое слово "case" (случай) указывает на то, что следующая константа является значением переменной choice, для которого выполняются соответствующие действия.

Оператор "break;" осуществляет выход из оператора "switch", а не из цикла. Именно поэтому для выхода из цикла пришлось использовать специальный флаг loop.

Ключевое слово "default" ( умолчание ) означает, что следом записаны действия, выполняющиеся, если значение choice не совпадет ни с одной из констант, указанных за "case".

Оператор switch в общем виде выглядит так:
БНФ:

оператор_переключения =
"switch" "(" выражение ")"

"{"

"case" константа ":" { оператор }

"case" константа ":" { оператор }

[ "default" ":" { оператор } ]

"}"
В качестве выражения можно использовать любое выражение, имеющее символьный или целый тип. Константы тоже должны быть символьного или целого типа, например case 4 , case 'A'.

Допускается использовать несколько констант для пометки одной группы операторов, например
case 2 :

case 4 :

case 8 : f = sin(x); break;
Если группа операторов не завершается оператором break, то будут выполняться все последующие операторы независимо от наличия case с константами до ближайшего break или другого оператора, прерывающего естественную последовательность действий. Иными словами ключевое слово case с константой надо рассматривать как метку для передачи управления. Так, в следующем операторе
switch( ch )

{

case 'A' :

case 'B' : x++;

case 'C' :

case 'D' : f = sin(x); break;

case 'E' : f = cos(x); break;

}
будет вычислено f=sin(x+1), при ch равном 'A' или 'B'; f=sin(x), при ch равном 'C' или 'D'; f=cos(x), при ch равном 'E'.

При использовании оператора switch необходимо внимательно следить за правильностью написания ключевого слова default и за тем, чтобы между ключевым словом case и числовой константой обязательно имелся пробел. В противном случае, эти конструкции будут приняты за правильно записанные метки для оператора goto, и компилятор не выдаст никакой диагностики.
    1. Оператор безусловного перехода GOTO


Оператор безусловного перехода goto позволяет перейти к указанной метке. Данный оператор нарушает структурность программы. Есть лишь некоторые случаи, когда его применение считают оправданным. Например, при выходе из циклов глубокой вложенности. Однако и в этом случае сторонники структурного подхода предлагают использовать другие способы (например, возврат из функции).
  1. Некоторые типовые приёмы программирования

    1. Флаги


Флаг – это переменная логического или целого типа, которая принимает лишь два значения: true/false (истина/ложь, да/нет, 1/0), значение которой сигнализирует о состоянии вычислительного процесса или объекта.

Пример :

Пусть требуется вывести сообщение о том, содержится ли на исследуемом при табулировании отрезке некоторой функции f отрицательные значения. Рассмотрим использование флага для решения этой задачи.
int were_negatives=0; //сбрасываем флаг: пока отрицательных значений не было

for(double x= x1; x<=x2; x+=dx)

{

if(f(x) < 0) were_negatives=1;

}

if(were_negatives) // нет необходимости сравнивать с 1, тк 1 это уже истина

printf(“Обнаружены отрицательные значения функции\n”);

else

printf(“Отрицательных значений функции не обнаружено\n”);


    1. 1   ...   10   11   12   13   14   15   16   17   ...   36


написать администратору сайта