Листинг 2.3. Конструкция switch

 

#include <iostream>

 

using namespace std;

 

int main (void)

{

int x;

 

cin >> x;

 

cout << "if-else: ";

 

if (x == 0) {

cout << "0" << endl;

} else if (x == 1) {

cout << "1" << endl;

} else if (x == 2) {

cout << "2" << endl;

} else {

cout << "not 0, 1, 2" << endl;

}

 

cout << "switch: ";

 

switch (x)

{

case 0:

cout << "0" << endl;

break;

case 1:

cout << "1" << endl;

break;

case 2:

cout << "2" << endl;

break;

default:

cout << "not 0, 1, 2" << endl;

break;

}

 

return 0;

}

 

Данная конструкция выполняет инструкции начиная с той, для которой значение константы в строке «case» совпадает со значением используемой переменной, вплоть до первого оператора «break» или, если его нет, до конца конструкции. Т.е. оператор «break» осуществляет выход из самой конструкции. Подобное поведение объясняется тем, что данная конструкция реализуется переходами по меткам, как при использовании инструкции «goto».

Инструкция, следующая за «default», будет выполнена, если не произошло ни одного совпадения. Другими словами, она определяет действие по умолчанию. Любая инструкция может быть заменена заключенной в «{}» группой – блоком.

 

2.2. Циклы

Циклы используются в тех случаях, когда необходимо выполнить одну и туже или похожую последовательность действий несколько раз. В языке С++ для этих целей предусмотрены три инструкции: «for», «while» и «do – while».

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

Вне зависимости от используемого типа цикла, выход из него может быть произведен с помощью оператора «break», а завершение текущей итерации и переход к следующей – с помощью оператора «continue».

Один и тотже цикл может быть реализован различными инструкциями, с применением операторов «break» и «continue» или без них. Выбор конкретной реализации зависит только от программиста и его целей. Все листинги данного раздела не призваны быть наиболее эффективными или эталонными для решения поставленных задач, но демонстрируют возможности предоставляемые используемыми в каждом примере циклами.

 

2.2.1. Цикл «for»

Цикл с заранее известным числом итераций удобнее реализуется с помощью инструкции «for». Типичный цикл «for» выглядит следующим образом.

 

Листинг 2.4. Квадраты чисел от 0 до 9.

 

#include <iostream>

 

using namespace std;

 

int main (void)

{

for (int i = 0; i < 10; i++)

cout << i*i << " ";

 

return 0;

}

 

В примере, в строке, инициализирующей цикл, задано три выражения, определяющих поведение цикла. Первое выражение инициализирует некоторые данные, являющиеся для цикла некоторой точкой отсчета. При использовании цикла «for» удобнее всего этим выражением инициализировать счетчик количества итераций. Второе выражение задает условие выполнения итераций. Чаще, это сравнение или логическое выражение, но может использоваться все, что приводимо к типу «bool». Последнее выражение определяет действие, выполняемое по окончании каждой итерации. Обычно это инкремент или декремент счетчика, значение которого в итоге перестает удовлетворять сравнению во втором выражении. Следующий пример запрашивает два числа и возводит первое в степень второго.

 

Листинг 2.5. Возведение в степень.

 

#include <iostream>

 

using namespace std;

 

int main (void)

{

unsigned int x;

int y, z;

cin >> y >> x;

 

for (z = 1; x > 0; x--)

z *= y;

 

cout << z << endl;

 

return 0;

}

 

При инициализации цикла «for» отдельные выражения могут быть опущены, при этом символ двоеточия быть должен.