Одна из основных конструкций алгоритма — разветвляющийся процесс. Он реализован в языке C++ двумя условными операторами: if и switch.
Условный оператор if
Для организации вычислений в зависимости от какого-либо условия в C++ предусмотрен условный оператор if, который в общем виде записывается следующим образом:
if (условие) оператор_1; else оператор_2; (перед else ставится ; !!!)
Здесь условие — это логическое выражение, переменная или константа.
Работает условный оператор следующем образом. Сначала вычисляется значения выражения, записанного в виде условия. Если оно имеет значение истина (true), выполняется оператор_1. В противном случае (значение ложное (false) ) оператор_2.
Например, чтобы сравнить значения переменных a и b нужно написать следующую часть программного кода:
if (a==b) printf("a равно b");
else printf("a не равно b");
Не путайте знак проверки равенства == и оператор присваивания =
Если в задаче требуется, чтобы в зависимости от значения условия выполнялся не один оператор, а несколько, их необходимо заключить в фигурные скобки, как составной оператор.
if (условие) { оператор_1; оператор_2; … }
else { оператор_1; оператор_2; … }
Альтернативная ветвь else в условном операторе может отсутствовать, если в ней нет необходимости.
Оператор варианта switch
Он необходим в тех случаях, когда в зависимости от значений переменной надо выполнить те или иные операторы:
switch (выражение) { case значение_1: операторы_1; break; case значение_2: операторы_2; break; case значение_3: операторы_3; break; … case значение_n: операторы_n; break; default: операторы; break; }
Оператор работает следующем образом. Вычисляется значение выражения. Затем выполняются операторы, помеченные значением, совпадающим со значением выражения. То есть если, выражение принимает значение_1, то выполняются операторы_1 и т.д.. Если выражение не принимает ни одного из значений, то выполняются операторы, расположенные после слова default.
Ветвь default может отсутствовать, тогда оператор имеет вид:
switch (выражение) { case значение_1: операторы_1; break; case значение_2: операторы_2; break; case значение_3: операторы_3; break; … case значение_n: операторы_n; break; }
Оператор break необходим для того, чтобы осуществить выход из операторы switch. Если он не указан, то будут выполняться следующие операторы из списка, несмотря на то, что значение, которым они помечены, не совпадает со значением выражения.
Пример: вывести название дня недели по его порядковому номеру (1-понедельник,4-четверг).
int day;
switch (day)
{
case 1: printf(" понедельник"); break;
case 2: printf("вторник"); break;
case 3: printf("среда"); break;
case 4: printf("четверг"); break;
case 5: printf("пятница"); break;
case 6: printf("суббота"); break;
case 7: printf("воскресенье"); break;
}
Цикл while
Синтаксис цикла while в C++ выглядит следующим образом.
while (Условие) {
Тело цикла;
}
Данный цикл будет выполняться, пока условие, указанное в круглых скобках является истиной. Решим ту же задачу с помощью цикла while.
Ниже приведен исходный код программы, считающей сумму всех целых чисел от 1 до 1000.
# include <stdio.h>
void main()
{
int i = 0; // инициализируем счетчик цикла.
int sum = 0; // инициализируем счетчик суммы.
while (i < 1000)
{
i++;
sum += i;
}
printf( "Сумма чисел от 1 до 1000 =%d ", sum);
}
Теперь давайте рассмотрим по порядку исходный код нашей программы. Сначала мы инициализируем счетчик цикла и переменную, хранящую сумму чисел. Мы обязательно должны присвоить счетчику цикла какое-либо значение.
Затем мы описываем условие цикла — «пока переменная i меньше 1000 — выполняй цикл». При каждой итерации цикла значение переменной-счетчика i увеличивается на единицу внутри цикла.
Когда выполнится 1000 итераций цикла, счетчик станет равным 999 и следующая итерация уже не выполнится, поскольку 1000 не меньше 1000. Выражение sum += i является укороченной записью sum = sum + i.
После окончания выполнения цикла, выводим сообщение с ответом.
Цикл do while
Цикл do while очень похож на цикл while. Единственное их различие в том, что при выполнении цикла do while один проход цикла будет выполнен независимо от условия. Решение задачи на поиск суммы чисел от 1 до 1000, с применением цикла do while.
# include <stdio.h>
void main()
{
int i = 0; // инициализируем счетчик цикла.
int sum = 0; // инициализируем счетчик суммы.
do {// выполняем цикл.
i++;
sum += i;
} while (i < 1000); // пока выполняется условие.
printf( "Сумма чисел от 1 до 1000 =%d ", sum);
}
Принципиального отличия нет, но если присвоить переменной i значение, большее, чем 1000, то цикл все равно выполнит хотя бы один проход.
Цикл for
Цикл for последовательно выполняет одинаковые действия, определенное количество раз.
for (<объявление счетчика>; <условие выполнения цикла>; <шаг цикла>) { <тело цикла> }
Теперь давайте поподробнее рассмотрим синтаксис цикла for:
· <объявление счетчика> — здесь нужно создать переменную (счетчик цикла) и задать ей первоначальное значение. Эта команда выполняется до запуска цикла; · <условие выполнения цикла> — оно похоже на условие оператора if. Нам нужно указать логическое выражение, при истинности которого, цикл будет работать;
· <шаг цикла> — данная инструкция будет выполняться в конце каждой итерации, переводя счетчик цикла на новое значение;
· <тело цикла> — здесь мы указываем код, который будет выполнятся на каждой итерации цикла.
Пример работы цикла for
Следующая программа находит произведение цифр от 1 до N (факториал):
1# include <iostream> # include <stdio.h> void main() { int n; // создаем переменную n printf( "N = "); // выводим сообщение scanf("%d",&n); // считываем значение int res = 1; // создаем переменную res в ней мы будем хранить результат работы цикла for (int i = 1; i <= n; i++) // цикл for res *= i; // умножаем на i полученное ранее значение printf( "RES = %d ", res);// выводим результат работы программы }