Рассмотрим программу 2.1 (она похожа на программу 2.2 из 2-й лекции)

#include <iostream.h>

Int main()

{

int number;

char character;

for (number = 32; number <= 126; number = number + 1)

{

character = number;

cout << "Символ '" << character;

cout << "' имеет код " << number << "\n";

}

return 0;

}

Программа 2.1.

Программу 2.1 можно переписать с помощью цикла "while" (программа 2.2):

#include <iostream.h>

Int main()

{

int number;

char character;

number = 32;

while (number <= 126)

{

character = number;

cout << "Символ '" << character;

cout << "' имеет код " << number << "\n";

number++;

54

}

return 0;

}

Программа 2.2.

Замена цикла "while" на цикл "for" выполняется совсем просто. Например, в

Программе 2.2 строку

while (number <= 126)

можно заменить эквивалентным циклом "for" без операторов инициализации и из-

менения значений:

for (; number <= 126;)

В Си++ есть еще один, третий, вариант цикла – оператор цикла с постфиксным

условием (постусловием) "do {...} while". Он отличается от циклов "for" и "while"

тем, что тело цикла внутри скобок "{}" обязательно выполняется как минимум один

Раз, т.к. условие повторения цикла проверяется только после выполнения тела цикла.

Циклы "Do... while" используются довольно редко. Например этот цикл можно

Применить для проверки корректности введенных с клавиатуры данных (програм-

Ма 2.2а).

...

...

do {

cout << "Введите результат тестирования: ";

cin >> candidate_score;

if (candidate_score > 100 || candidate_score < 0)

cout << "Допускается оценка от 0 до 100.\n";

} while (candidate_score > 100 || candidate_score < 0);

...

...

Фрагмент программы 2.2a.

В программе 2.2a цикл с постусловием позволяет избавиться от дублирования

Операторов печати приглашения и ввода данных, которое возникает при использова-

нии эквивалентного цикла "while" (программа 2.2b).

...

...

cout << "Введите результат тестирования: ";

cin >> candidate_score;

while (candidate_score > 100 || candidate_score < 0)

{

cout << "Допускается оценка от 0 до 100.\n";

cout << "Введите результат тестирования: ";

cin >> candidate_score;

}

...

...

Фрагмент программы 2.2b.

55

3. Множественное ветвление и оператор "switch"

Вложенные операторы "if", предназначенные для выполнения "множествен-

ного ветвления", уже встречались в 1-й лекции. Упрощенная версия этого примера

приведена ниже:

...

...

if (total_test_score < 50)

cout << "Вы не прошли тест. Выучите материал как следует.\n";

else if (total_test_score < 60)

cout << "Вы прошли тест со средним результатом.\n";

else if (total_test_score < 80)

cout << "Вы хорошо выполнили тест.\n";

else if (total_test_score < 100)

cout << "Вы показали отличный результат.\n";

Else

{

cout << "Вы выполнили тест нечестно";

сout << "(оценка должна быть меньше 100 баллов)!\n";

}

...

...

Вложенные операторы "if" выглядят слишком громоздко, поэтому в Си++

реализован еще один способ множественного ветвления – оператор "switch". Он по-

Зволяет выбрать для выполнения один из нескольких операторов, в зависимости от

Текущего значения определенной переменной или выражения.

В приведенном выше примере сообщение для печати выбирается в зависимо-

сти от значения переменной "total_test_score". Это может быть произвольное целое

Число в диапазоне от 0 до 100. Диапазон проверяемых значений можно сузить, если

Учесть, что оценка теста проверяется с точностью до 10-ти баллов. Введем дополни-

тельную целочисленную переменную "score_out_of_ten" и присвоим ей значение:

score_out_of_ten = total_test_score/10;

Теперь проверку в программе можно сформулировать так: (1) если переменная

"score_out_of_ten" равна 0, 1, 2, 3 или 4, то печатать сообщение "Вы не прошли

тест. Выучите материал как следует.", (2) если "score_out_of_ten" равна

5, то печатать сообщение "Вы прошли тест со средним результатом." и

т.д. В целом оператор "switch" будет выглядеть так:

...

...

score_out_of_ten = total_test_score / 10;

Switch (score_out_of_ten)

{

case 0:

case 1:

case 2:

case 3:

case 4:

cout << "Вы не прошли тест. Выучите материал как следует.\n";

break;

case 5:

cout << "Вы прошли тест со средним результатом.\n";

break;

case 6:

case 7:

56

cout << "Вы хорошо выполнили тест.\n";

break;

case 8:

case 9:

case 10:

cout << "Вы показали отличный результат.\n";

break;

default:

cout << "Вы выполнили тест нечестно\n";

сout << "(оценка не должна быть больше 100 баллов)!\n";

}

...

...

Фрагмент программы 3.1.

Оператор "switch" имеет следующий синтаксис:

switch (селектор)

{

case метка 1:

<операторы 1 >

break;

...

...

...

case метка N:

<операторы N >

break;

default:

<операторы>

}

Сделаем несколько важных замечаний относительно оператора "switch":

• Внутри "switch" выполняются операторы, содержащиеся между меткой,

Совпадающей с текущим значением селектора, и первым встретившимся по-

сле этой метки оператором "break".

• Операторы "break" необязательны, но они улучшают читабельность про-

Грамм. С ними сразу видно, где заканчивается каждый вариант множествен-

ного ветвления. Как только при выполнении операторов внутри "switch"

встречается "break", то сразу выполняется переход на первый оператор про-

граммы, расположенный после оператора "switch". Иначе продолжается

последовательное выполнение операторов внутри "switch".

• Селектор (переменная или выражение) может быть целочисленного (напри-

мер, "int" или "char") или любого перечислимого типа, но не веществен-

Ного типа.

• Вариант "default" ("по умолчанию") необязателен, но для безопасности

Лучше его предусмотреть.

Блоки и область видимости переменных

В Си++ фигурные скобки "{}" позволяют оформить составной оператор, кото-

Рый содержит несколько операторов, но во всех конструкциях языка может подстав-

57

Ляться как один оператор. На описания переменных фигурные скобки также оказы-

Вают важное влияние.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow