Оператор множественного выбора switch

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

Формат оператора:

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

case константное_выражение_1: [список_операторов_1]

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

case константное_выражение_n: [списоко_ператоров_n]

[default: операторы ]

}

Структурная схема оператора приведена на рисунке 1.6.

Оператор множественного выбора switch - student2.ru

Рисунке 1.6 - Структурная схема оператора switch

Выполнение оператора начинается с вычисления выражения. Оно должно быть целочисленным. Все константные выражения также должны быть целочисленными и иметь разные значения. Несколько меток могут следовать подряд.

Затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало с вычисленным. После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви.

Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.

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

Пример: простейший калькулятор на 4 действия.

#include <iostream.h>

int main ( ) {

int a, b, res; char op;

cout <<"Введите 1ый операнд: ”; cin >> a;

cout <<"\nВведите знак операции: ”; cin >> op;

cout <<"\nВведите 2ой операнд: ”; cin >> b;

bool f = true;

switch (op){

case '+' : res = а + b; break;

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

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

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

default : cout <<"\nНеизвестная операция"; f = false;

}

if (f) cout << "\nРезультат: " << res;

return 0;

}

Тема 1.9

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

Цикл с предусловием (while)

Цикл с предусловием имеет вид: while ( выражение ) оператор

Выполнение оператора цикла начинается с вычисле­ния выражения. Его тип должен быть арифметическим или приводимым к нему. Выражение определяет условие повторения тела цикла: если выражение истинно, выполняется тело цик­ла, которое является про­стым или составным оператором.

Выражение вычисляется перед каждой итерацией цикла. Если при первой проверке выражение равно false, цикл не выполнится ни разу.

Пример: программа печатает таблицу значений функции y = x2 +1во введенном диапазоне.

#include <stdio.h>

int main( ) {

float Xn, Xk, Dx;

printf (“Введите диапазон и шаг изменения аргумента: ”);

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

printf(“| X | Y |\n”); // шапка таблицы

float X = Xn; // установка параметра цикла

while (X <= Xk){ // проверка условия продолжения

printf (“| %5.2f | %5.2f |\n”, X, X*X + 1); // тело цикла

X += Dx; // модификация параметра

}

return 0;

}

Пример: программа находит все делители целого положительного числа.

#include <iostream.h>

int main( ){

int num;

cout << “\nВведите число: ”;

cin >> num;

int half = num / 2; // половина числа

int div = 2; // кандидат на делитель

while (div < = half){

if (!(num % div)) cout << div << “\n”;

div++;

}

return 0;

}

Распространенный прием программирования — организация бесконечного цикла с заголовком while (true) либо while (1) и принудительным выходом из тела цикла по выполнению какого-либо условия.

В круглых скобках после ключевого слова while можно вводить описание пере­менной. Областью ее действия является цикл:

while (int x = 0){ ... /* область действия х */ }

Цикл с постусловием (do while)

Цикл с постусловием имеет вид: do оператор while выражение;

Сначала выполняется простой или составной оператор, составляющий тело цик­ла, а затем вычисляется выражение, определяющее условие повторения тела цикла. Тип выражения должен быть арифметическим или приводимым к нему. Если выражение истинно, осуществляется переход к следующей итерации и тело цик­ла выполняется еще раз. Цикл завершается, когда выражение станет равным false или в теле цикла будет выполнен какой-либо оператор передачи управле­ния.

Пример: программа осуществляет проверку ввода.

#include <iostream.h>

int main( ){

char answer;

do{

cout << “\nКупи слоника!”; cin >> answer;

}while (answer != “y”);

return 0;

}

Пример: программа вычисляет квадратный корень вещественного аргумента X с заданной точностью Eps по итерационной формуле:

Оператор множественного выбора switch - student2.ru

где Оператор множественного выбора switch - student2.ru — предыдущее приближение к корню (в начале вычислений выбирается произвольно), Оператор множественного выбора switch - student2.ru — последующее приближение. Процесс вычислений прекраща­ется, когда приближения станут отличаться друг от друга по абсолютной вели­чине менее, чем на величину заданной точности. Для вычисления абсолютной величины используется стандартная функция fabs( ), объявление которой нахо­дится в заголовочном файле <math.h>.

#include <stdio.h>

#include <math.h>

int main( ){

double X, Eps; // аргумент и точность

double Yp=1, Y; // предыдущее и последующее приближение

printf (“Введите аргумент и точность:”);

scanf (“%lf,%lf”, &X, &Eps);

do Y = (Yp + X/Yp)/2 while (fabs (Y - Yp) >= Eps);

printf (“\nКорень из %lf равен %lf”, X, Y);

return 0;

}

Цикл с параметром (for)

Цикл с параметром имеет вид:

for (инициализация; выражение; модификации) оператор;

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

Можно записать несколько опе­раторов, разделенных запятой:

for (int i = 0, j = 2; ...

int k, m;

for (k = 1, m = 0: ...

Областью действия переменных, объявленных в части инициализации цикла, яв­ляется цикл.

Выражениеопределяет условие выполнения тела цикла, представленного простым или составным оператором. Если результат вычисления выражения равен true, цикл выполняется. Цикл с параметром реализо­ван как цикл с предусловием.

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

Любая из частей оператора for может быть опущена, но при этом точки с запя­той надо оставить.

Пример: оператор, вычисляющий сумму чисел от 1 до 100.

for (int i = 1, s = 0; i < = 100; i++) s += i;

Пример: программа печатает таблицу значений функцииy = x2 +1 во введенном диапазоне:

#include <stdio.h>

int main( ){

float Xn, Xk, Dx, X;

printf (“Введите диапазон и шаг изменения аргумента: ”);

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

printf (“\n| X | Y |”);

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

printf(“\n| %5.2f | %5.2f |”,. X, X*X + 1);

return 0;

}

Пример: программа находит все делители целого положительного числа.

#include <iostream.h>

int main( ){

int num, half, div;

cout << “\nВведите число: ”; cin >> num;

for (half = num / 2, div = 2; div <= half; div++)

if (!(num % div)) cout << div <<”\n”;

return 0;

}

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

Любой цикл while может быть приведен к эквивалентному ему циклу for и, наоборот, по следующей схеме:

for (b1; b2; bЗ) оператор; Оператор множественного выбора switch - student2.ru b1; while (b2){ оператор; b3;}

Часто встречающиеся ошибки при программировании циклов — использование в теле цикла неинициализированных переменных и неверная запись условия вы­хода из цикла.

Чтобы избежать ошибок, рекомендуется:

· проверить, всем ли переменным, встречающимся в правой части операторов присваивания в теле цикла, присвоены до этого начальные значения;

· проверить, изменяется ли в цикле хотя бы одна переменная, входящая в усло­вие выхода из цикла;

· предусмотреть аварийный выход из цикла по достижению некоторого коли­чества итераций;

· если в теле цикла требуется выполнить бо­лее одного оператора, нужно заключать их в фигурные скобки.

Операторы цикла взаимозаменяемы, но можно привести некоторые рекоменда­циипо выбору наилучшего в каждом конкретном случае:

· Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных).

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

· Оператор for предпочтительнее в большинстве остальных случаев (однозначно - для организации циклов со счетчиками).

Тема 1.10

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