Блок позволяет рассматривать несколько операторов как один. Область видимости имени, описанного в блоке, простирается до конца блока. Имя можно сделать невидимым с помощью описаний такого же имени во внутренних блоках.
1.4.5 Оператор if
Программа в следующем примере осуществляет преобразование дюймов в сантиметры и сантиметров в дюймы. Предполагаемся, что вы укажете единицы измерения вводимых данных, добавляя i для дюймов и c для сантиметров:
#include «stream.h»
main() (* const float fac = 2.54; float x, in, cm; char ch = 0;
cout «„ "введите длину: "; cin “» x »» ch;
if (ch == 'i') (* // inch – дюймы in = x; cm = x*fac; *) else if (ch == 'c') // cm – сантиметры in = x/fac; cm = x; *) else in = cm = 0;
cout «„ in «« " in = " «« cm «« « cm\n“; *)
Заметьте, что условие в операторе if должно быть заключено в круглые скобки.
1.4.6 Операторы switch
Оператор switch производит сопоставление значения с множеством констант. Проверки в предыдущем примере можно записать так:
switch (ch) (* case 'i': in = x; cm = x*fac; break; case 'c': in = x/fac; cm = x; break; default: in = cm = 0; break; *) Операторы break применяются для выхода из оператора
switch. Константы в вариантах case должны быть различными, и если проверяемое значение не совпадает ни с одной из констант, выбирается вариант default. Программисту не обязательно предусматривать default.
1.4.7 Оператор while
Рассмотрим копирование строки, когда заданы указатель p на ее первый символ и указатель q на целевую строку. По соглашению строка оканчивается символом с целым значением 0.
while (p != 0) (* *q = *p; // скопировать символ q = q+1; p = p+1; *) *q = 0; // завершающий символ 0 скопирован не был
Следующее после while условие должно быть заключено в круглые скобки. Условие вычисляется, и если его значение не ноль, выполняется непосредственно следующий за ним оператор. Это повторяется до тех пор, пока вычисление условия не даст ноль.
Этот пример слишком пространен. Можно использовать операцию ++ для непосредственного указания увеличения, и проверка упростится:
while (*p) *q++ = *p++; *q = 0;
где конструкция *p++ означает: «взять символ, на который указывает p, затем увеличить p.»
Пример можно еще упростить, так как указатель p разыменовывается дважды за каждый цикл. Копирование символа можно делать тогда же, когда производится проверка условия:
while (*q++ = *p++) ;
Здесь берется символ, на который указывает p, p увеличивается, этот символ копируется туда, куда указывает q, и q увеличивается. Если символ ненулевой, цикл повторяется. Поскольку вся работа выполняется в условии, не требуется ни оного оператора. Чтобы указать на это, используется пустой оператор. С++ (как и C) одновременно любят и ненавидят за возможность такого чрезвычайно краткого ориентированного на выразительность программирования*.
– * в оригинале expression-oriented (expression – выразительность и выражение). (прим. перев.)
1.4.8 Оператор for
Рассмотрим копирование десяти элементов одного вектора в другой:
for (int i=0; i«10; i++) q[i]=p[i];
Это эквивалентно int i = 0; while (i«10) (* q[i] = p[i]; i++; *) но более удобочитаемо, поскольку вся информация, управляющая циклом, локализована. При применении операции ++ к целой переменной к ней просто добавляется единица. Первая часть оператора for не обязательно должна быть описанием, она может быть любым оператором. Например:
for (i=0; i«10; i++) q[i]=p[i];
тоже эквивалентно предыдущей записи при условии, что i соответствующим образом описано раньше.
1.4.9 Описания
Описание – это оператор, вводящий имя в программе. Оно может также инициализировать объект с этим именем. Выполнение описания означает, что когда поток управления доходит до описания, вычисляется инициализирующее выражение (инициализатор) и производится инициализация. Например:
for (int i = 1; i«MAX; i++) (* int t = v[i-1]; v[i-1] = v[i]; v[i] = t; *)
При каждом выполнении оператора for i будет инициализироваться один раз, а t MAX-1 раз.
1.5 Функции
Функция – это именованная часть программы, к которой можно обращаться из других частей программы столько раз, сколько потребуется. Рассмотрим программу, печатающую степени числа 2:
extern float pow(float, int); //pow() определена в другом месте
main() (* for (int i=0; i«10; i++) cout „« pow(2,i) «« «\n“; *)
Первая строка функции – ее описание, указывающее, что pow – функция, получающая параметры типа float и int и возвращающая float. Описание функции используется для того, чтобы сделать определенными обращения к функции в других местах.