- •3.8. Упражнения 49
- •Введение
- •1. Базовые элементы
- •1.1. Комментарии
- •1.2. Функция «main»
- •1.3. Идентификаторы и пространства имен
- •1.4. Типы
- •1.5. Переменные
- •1.7. Константы
- •1.6. Преобразование типов
- •1.8. Потоковый ввод – вывод
- •1.9. Операции
- •1.9.1. Арифметические операции
- •1.9.2. Поразрядные операции
- •1.9.3. Условный оператор
- •1.9.4. Операции отношения
- •1.9.5. Логические операции
- •1.10. Стандартные математические функции
- •1.11. Упражнения
- •2. Базовые конструкции
- •2.1 Ветвление
- •2.1.1. Конструкция «if – else»
- •2.1.2. Конструкция «switch»
- •2.2. Циклы
- •2.2.1. Цикл «for»
- •2.2.2. Цикл «while»
- •2.2.3. Цикл «do – while»
- •2.2.4. Операторы циклов
- •2.2.5. Вложенность
- •2.3. Упражнения
- •2.3.1. Ветвления
- •2.3.2. Циклы
- •2.3.3. Вложенность
- •3. Указатели. Массивы. Структуры
- •3.1. Указатели
- •3.2. Массивы
- •3.2.1. Статические массивы
- •3.2.2. Динамические массивы
- •3.4. Ссылки
- •3.5. Структуры
- •3.6. Объединение
- •3.7. Переопределение типов
- •3.8. Упражнения
- •3.8.1. Статические и динамические массивы
- •3.8.2. Многомерные массивы
- •3.8.3. Строки
- •4. Функции
- •4.1. Простые функции
- •4.2. Рекурсия
- •4.3. Указатели и ссылки
- •4.3.1. Передаваемые параметры
- •4.3.2. Возвращаемые значения
- •4.3.3. Ссылки и структуры в функциях
- •4.3.4. Указатели и массивы в функциях
- •4.3.5. Указатели и ссылки на функцию
- •4.4. Шаблоны функций
- •4.5. Упражнения
- •4.5.1. Простые функции
- •4.5.2. Параметры – ссылки и параметры — указатели
- •5. Стандартные классы
- •5.1. Класс «pair»
- •5.2. Класс «complex»
- •5.3. Класс «string»
- •5.4. Контейнеры. Алгоритмы. Итераторы
- •5.5. Класс «vector»
- •5.6. Упражнения
- •5.6.1. Класс «string»
- •5.6.2. Класс «vector»
- •6. Файловый ввод – вывод
- •6.1. Операции
- •6.2. Методы
- •6.3. Флаги
- •6.4. Двоичный режим
- •6.5. Упражнения
- •Ллитература
2.1 Ветвление
Ветвление представляет из себя принятие решения о том, в каком направлении продолжать выполнение программы и реализуется двумя конструкциями: «if – else» и «switch».
2.1.1. Конструкция «if – else»
При использовании конструкции «if – else» решение о выборе последующих действий производится на основании выражения, имеющего булевый тип или приводимый к таковому. Данная конструкция схожа с тернарным условным оператором (вернее, сам оператор был введен в язык, как более удобная в использовании запись часто употребимой условной конструкции). Если выражение в скобках верно, то будет выполнена инструкция, расположенная следом за этими скобками, иначе та, что после идентификатора «else». Данная конструкция может выполнять не только отдельные инструкции, но и группы, благодаря наличию в языке блоков инструкций, синтаксически представляемых одной инструкцией. В приведенном ниже листинге условная конструкция выполняет теже действия, что и условный оператор.
Листинг 2.1. Конструкция if-else.
#include <iostream>
using namespace std;
int main (void)
{
bool x;
cin >> x;
cout << (x ? "true" : "false") << endl;
if (x)
cout << "true" << endl;
else
cout << "false" << endl;
return 0;
}
Важным аспектом при использовании данной конструкции является то, что она может быть вложена одна в другую. Также при использовании условной конструкции допустимо опускать определение действия в том случае, если его и не требуется. Однако, в таком случае, необходимо следить за тем, чтобы каждая «else» – часть соответствовала своей «if» – части. Так, если в нижеследующем листинге не использовать «{}» для первого «if», то любое число вне заданного интервала, в том числе и большее десяти, будет определяться, как отрицательное, т.е. «else» – часть будет отнесена ко второму «if».
Листинг 2.2. Вложенность if-else.
#include <iostream>
using namespace std;
int main (void)
{
int y;
cin >> y;
if (y >= 0) {
if (y < 10)
cout << "in range" << endl;
} else {
cout << "negative" << endl;
}
return 0;
}
2.1.2. Конструкция «switch»
В некоторых случаях сравнение ветвления выполняется несколько раз подряд, при этом результат ветвления зависит от значения единственной переменной. Такую сложную для восприятия последовательность «if – else» позволяет заменить конструкция «switch». В листинге данная конструкция идентична каскаду «if – else».
Листинг 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», будет выполнена, если не произошло ни одного совпадения. Другими словами, она определяет действие по умолчанию. Любая инструкция может быть заменена заключенной в «{}» группой – блоком.
