
- •Int main()
- •Int main()
- •Глава 3: Основные типы данных
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Глава 4: Инструкции управления
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main(){
- •Int main()
- •Int main()
- •Int main()
- •Int main()
- •Int main()
Глава 4: Инструкции управления
В этой главе вы узнаете, как управлять ходом выполнения С++-программы. Существует три категории управляющих инструкций: инструкции выбора (if, switch), итерационные инструкции (состоящие из for-, while- и do-while-циклов) и инструкции перехода (break, continue, return и goto).
За исключением return, все остальные перечисленные выше инструкции описаны в этой главе.
Инструкция if
Инструкция if позволяет сделать выбор между двумя выполняемыми ветвями программы.
Инструкция if была представлена в главе 2, но здесь мы рассмотрим ее более детально. Полный формат ее записи таков.
if(выражение) инструкция;
else инструкция;
Здесь под элементом инструкция понимается одна инструкция языка C++. Часть else необязательна. Вместо элемента инструкция может быть использован блок инструкций. В этом случае формат записи if-инструкции принимает такой вид.
if(выражение)
{
последовательность инструкций
}
else
{
последовательность инструкций
}
Если элемент выражение, который представляет собой условное выражение, при вычислении даст значение ИСТИНА, будет выполнена if-инструкция; в противном случае else-инструкция (если таковая существует). Обе инструкции никогда не выполняются. Условное выражение, управляющее выполнением if-инструкции, может иметь любой тип, действительный для С++-выражений, но главное; чтобы результат его вычисления можно было интерпретировать как значение ИСТИНА или ЛОЖЬ.
Условное выражение
Иногда новичков в C++ сбивает с толку тот факт, что для управления if-инструкцией можно использовать любое действительное С++-выражение. Другими словами, тип выражения необязательно ограничивать операторами отношений и логическими операторами или операндами типа bool. Главное, чтобы результат вычисления условного выражения можно было интерпретировать как значение ИСТИНА или ЛОЖЬ.
Нуль автоматически преобразуется в false, а все ненулевые значения— в true. Это означает, что любое выражение, которое дает в результате нулевое или ненулевое значение, можно использовать для управления if-инструкцией. Например, следующая программа считывает с клавиатуры два целых числа и отображает частное от деления первого на второе. Чтобы не допустить деления на нуль, в программе используется if-инструкция.
// Деление первого числа на второе.
#include <iostream>
using namespace std;
Int main()
{
int a, b;
cout << "Введите два числа: ";
cin >> a >> b;
if(b) cout << a/b << '\n';
else cout << "На нуль делить нельзя.\n";
return 0;
}
Обратите внимание на то, что значение переменной b (делимое) сравнивается с нулем с помощью инструкции if(b), а не инструкции if(b!=0). Дело в том, что, если значение b равно нулю, условное выражение, управляющее инструкцией if, оценивается как ЛОЖЬ, что приводит к выполнению else-ветви. В противном случае (если b содержит ненулевое значение) условие оценивается как ИСТИНА, и деление благополучно выполняется. Нет никакой необходимости использовать следующую if-инструкцию, которая к тому же не свидетельствует о хорошем стиле программирования на C++.
if(b != 0) cout << а/b << '\n';
Эта форма if-инструкции считается устаревшей и потенциально неэффективной.
Вложенные if-инструкции
Вложенные if-инструкции образуются в том случае, если в качестве элемента инструкция (см. полный формат записи) используется другая if-инструкция. Вложенные if-инструкции очень популярны в программировании. Главное здесь — помнить, что else-инструкция всегда относится к ближайшей if-инструкции, которая находится внутри того же программного блока, но еще не связана ни с какой другой else-инструкцией. Вот пример.
if(i) {
if(j) statement1;
if(k) statement2; // Эта if-инструкция
else statement3; // связана с этой else-инструкцией.
}
else statement4; // Эта else-инструкция связана с if(i).
Как утверждается в комментариях, последняя else-инструкция не связана с инструкцией if(j), поскольку они не находятся в одном блоке (несмотря на то, что эта if-инструкция — ближайшая, которая не имеет при себе "else-пары"). Внутренняя else-инструкция связана с инструкцией if(k), поскольку она — ближайшая и находится внутри того же блока.
Вложенная if-инструкция— это инструкция, которая используется в качестве элемента инструкция любой другой if- или elsе-инструкции.
Язык C++ позволяет 256 уровней вложения, но на практике редко приходится вкладывать if-инструкции на "такую глубину". продемонстрируем использование вложенных инструкций с помощью очередного усовершенствования программы "Угадай магическое число" (здесь игрок получает реакцию программы на неправильный ответ).
// Программа "Угадай магическое число":
// 2-е усовершенствование.
#include <iostream>
#include <cstdlib>
using namespace std;