Упомянем еще об одной разновидности: пустой инструкции. Рассмотрим следующий код:
if (x == 5);
{ y = 3; }
Что произойдет, когда эта программа начнет выполняться? Компилятор проверит, равно ли значение переменной x
числу 5
. Если это условие истинно, то будет выполнена следующая инструкция (пустая). Затем программа перейдет к выполнению следующей инструкции, присвоив переменной y
число 3
. Если же значение переменной x
не равно 5
, то компилятор не будет выполнять пустую инструкцию (что также не порождает никакого эффекта) и присвоит переменной y число 3
(это не то, чего вы хотели, если значение переменной x
не равно 5
).
Иначе говоря, эта инструкция if
присваивает переменной y
число 3
независимо от значения переменной x
. Эта ситуация типична для программ, написанных новичкам, причем такие ошибки трудно обнаружить.
Следующий раздел посвящен инструкциям, позволяющим изменить порядок вычислений и выразить более сложные вычисления, чем те, которые сводятся к последовательному выполнению ряда инструкций.
4.4.1. Инструкции выбора
В программах, как и в жизни, мы часто делаем выбор из нескольких альтернатив. В языке С++ для этого используются инструкции if
и switch
.
4.4.1.1. Инструкции if
Простейшая форма выбора в языке С++ реализуется с помощью инструкции if
, позволяющей выбрать одну из двух альтернатив. Рассмотрим пример.
int main()
{
int a = 0;
int b = 0;
cout << "Пожалуйста, введите два целых числа \n";
cin >> a >> b;
if (a
// 1-я альтернатива (выбирается, если условие истинно):
cout << "max(" << a << "," << b <<") равно " << b <<"\n";
else
// 2-я альтернатива (выбирается, когда условие ложно):
cout << "max(" << a << "," << b <<") равно " << a << "\n";
}
if
осуществляет выбор из двух альтернатив. Если его условие является истинным, то выполняется первая инструкция; в противном случае выполняется вторая. Это простая конструкция. Она существует в большинстве языков программирования. Фактически большинство основных конструкций в языках программирования представляют собой просто новое обозначение понятий, известных всем еще со школьной скамьи или даже из детского сада. Например, вам, вероятно, говорили в детском саду, что, для того чтобы перейти улицу, вы должны дождаться, пока на светофоре не загорится зеленый свет: “если горит зеленый свет, то можно переходить, а если горит красный свет, то необходимо подождать”. В языке С++ это можно записать как-то так:
if (traffic_light==green) go();
if (traffic_light==red) wait();
Итак, основное понятие является простым, но и это простое понятие можно использовать слишком наивно. Рассмотрим неправильную программу (ошибка в ней заключается не только в отсутствии директивы #include
).
// преобразование дюймов в сантиметры и наоборот
// суффикс 'i' или 'c' означает единицу измерения на входе
int main()
{
const double cm_per_inch = 2.54; // количество сантиметров
// в дюйме
double length = 1; // длина в дюймах или
// сантиметрах
char unit = 0;
cout<< "Пожалуйста, введите длину и единицу измерения
(c или i):\n";
cin >> length >> unit;
if (unit == 'i')
cout << length << "in == " << cm_per_inch*length << "cm\n";
else
cout << length << "cm == " << length/cm_per_inch << "in\n";
}
На самом деле эта программа работает примерно так, как предусмотрено: введите 1i
, и вы получите сообщение 1in==2.54cm
введите 2.54c
, и вы получите сообщение 2.54cm==1in
. Поэкспериментируйте — это полезно.