Программирование >>  Структурное программирование 

1 ... 32 33 34 [ 35 ] 36 37 38 ... 342


напечатать Незачет


напечатать Зачет

Рис. 2.4. Блок-схема структуры с двойным выбором if/else

содержит условное выражение, которое равно строке Зачет , если условие grade >- 60 истинно, и равно строке Незачет , если оно ложно. Таким образом, этот оператор с условной операцией выполняет фактически те же функции, что и приведенный ранее оператор if/else. Как мы увидим далее, условная операция имеет низкое старшинство и поэтому в приведенном выражении потребовались скобки. Без них компилятор будет пытаться произвести вывод величины оценки grade операцией cout grade, что, естественно, не входит в намерения программиста. Затем последует ряд синтаксических ошибок, включая попытку компилятора найти значение для Незачет endl.

Значения условного выражения могут быть также какими-то исполняемыми действиями. Например, условное выражение

grade >= 60 ? cout Зачет\п : cout Незачет\п ;

читается так: Если оценка grade больше или равна 60, то cout Зачет\п , иначе cout Незачет\п . Это также сравнимо с рассмотренной структурой if/else. Мы увидим в дальнейшем, что иногда условная операция может использоваться в таких ситуациях, когда применение оператора if/else невозможно.

Для множественного выбора можно использовать вложенные структуры if/else, помещая одну структуру if/else внутрь другой. Например, следующее предложение псевдокода будет печатать А при экзаменационной оценке больше или равной 90, В - при оценке, лежащей в диапазоне от 80 до 89, С - при оценке в диапазоне 70-79, D - при оценке в пределах 60-69 и F - при других оценках.

ЕСЛИ оценка студента больше или равна 90

Напечатать А ИНАЧЕ

ЕСЛИ оценка студента больше или равна 80

Напечатать В ИНАЧЕ



Замечание по технике программирования 2.1

Составной оператор может быть помещен в любом меае программы, в котором может размещаться единичный оператор.

ЕСЛИ оценка студента больше или равна 70

Напечатать С ИНАЧЕ

ЕСЛИ оценка студента больше или равна 60

Напечатать D ИНАЧЕ

Напечатать F

Этот псевдокод может быть записан на языке С++ в виде:

if (grade >= 90)

cout А endl; else

if (grade >= 80)

cout B endl; else

if (grade >= 70)

cout C endl; else

if (grade >= 60)

cout D endl; else

cout F endl;

Если оценка grade больше или равна 90, то четыре условия истинны, но будет выполнен только оператор cout, расположенный после проверки первого условия. После того, как этот оператор cout выполнен, часть else внешнего оператора if/else пропускается. Большинство программистов на С++ предпочтут записать предыдущую структуру if в виде;

if (grade >= 90)

cout А endl;

else if (grade >= 80)

cout << B endl;

else if (grade >= 70)

cout << C endl;

else if (grade >= 60)

cout D endl; else

cout F endl;

Обе формы записи эквивалентны. Последняя форма популярна, поскольку она позволяет избежать сдвига кода далеко вправо. Подобный сдвиг часто оставляет мало места в строке, заставляя дробить и переносить строки, что ухудшает читаемость программы.

Структура выбора if обычно предполагает наличие в своем теле только одного оператора. Чтобы включить несколько операторов в тело структуры, заключите их в фигурные скобки: { и } . Множество операторов, заключенных в фигурные скобки, называется составным оператором.



Следующий пример включает составной оператор в часть else структуры if/else.

if (grade >= 60)

count Зачет. endl; else {

count Незачет. endl;

count Вы должны изучить этот курс снова. endl;

В этом случае при оценке grade меньше 60 программа выполнит оба оператора в теле else и напечатает:

Незачет.

Вы должны изучить этот курс снова. Типичная ошибка программирования 2.2

Пропуск одной или обеих фигурных скобок, ограничивающих составной оператор.

Синтаксическая ошибка обнаруживается компилятором. Логическая ошибка проявляется только во время выполнения программы. Неисправимая логическая ошибка вызывает сбой в работе программы и ее преждевременное завершение. При исправимой логической ошибке программа продолжает работать, но выдает неправильные результаты.

Замечание по технике программирования 2.2

Справедливо, что составной оператор может быть помещен в любом месте программы, в котором может размещаться единичный оператор, но также справедливо и то, что можно вообще обойтись без оператора, т.е. поместить пустой оператор. Для этого надо поместить символ точки с запятой (;) в том меае, где нормально должен находиться оператор.

Типичная ошибка программирования 2.3

Запись точки с запятой после условия в структуре if приводит к логической ошибке в структуре с единственным выбором и к синтаксической ошибке в структуре с двойным выбором (если часть if в действительности содержит оператор).

Хороший стиль программирования 2.5

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

В данном разделе мы ввели понятие составного оператора. Составной оператор может содержать объявления (например, это делается в теле main). В этом случае он называется блок. Объявления обычно размещаются в блоке на первом месте, до каких-либо исполняемых операторов; но они могут и перемежаться с исполняемыми операторами. Мы обсудим использование блоков в главе 3. До этого времени читателю лучше избегать использования блоков, кроме, конечно, тела main.



1 ... 32 33 34 [ 35 ] 36 37 38 ... 342

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика