#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
Ляться как один оператор. На описания переменных фигурные скобки также оказы-
Вают важное влияние.