- •2011 Декабрь
- •Выражения. Правила вычисления выражений.
- •Операции и выражения
- •Алгоритмы линейного типа. Операторы ввода-вывода. Генератор случайных чисел.
- •Алгоритмы с ветвлением. Условные выражения. Инструкция if (полная и неполная форма). Вложенные if-инструкции. Конструкция if-else-if.
- •Алгоритмы с ветвлением. Инструкция switch. Вложенные инструкции switch. Примеры в реальных задачах.
- •Алгоритмы циклического типа. Цикл с фиксированным числом повторений for. Параметр цикла. Инструкции break, continue. Бесконечный цикл. Примеры.
- •Цикл с предусловием while. Управление выполнением цикла. Примеры использования цикла. Зацикливание. Инструкция break.
- •Цикл с постусловием do. Управление выполнением цикла. Примеры использования. Зацикливание. Инструкция break.
- •Возможности стандартной библиотеки conio.H. Управление экраном в текстовом режиме. Управление движением объекта.
- •Управление выводом на экран Структура экрана в текстовом режиме
- •Установка нужного текстового режима
- •Текстовое окно и работа с ним
- •Установка цвета для текстовой информации
- •Ввод-вывод в текстовом режиме
- •Управление курсором в текстовом режиме
- •Перемещение изображения
- •Структурированные типы данных: одномерные массивы. Создание и заполнение массива информацией. Доступ к элементу массива. Основные операции с одномерным массивом.
- •Различные алгоритмы сортировок одномерного массива.
- •6.4. Сортировка массивов
- •6.4.1. Сортировка методом простого включения (вставки)
- •6.4.2. Сортировка методом простого выбора
- •6.4.3. Сортировка методом простого обмена
- •6.5. Поиск в отсортированном массиве
- •Указатели. Описание указателя. Операции над указателем. Указатель и одномерный массив. Доступ к элементам массива через указатель.
- •Функции. Назначение функций. Прототип, описание и вызов функции. Правила действия областей видимости функций. Передача параметров по значению и ссылке.
- •Структурированные типы данных: двумерные массивы. Создание и заполнение массива. Доступ к элементу массива. Основные операции с двумерным массивом.
- •Строки. Стандартные команды обработки строк. Обработки строк и текстов. Команды ввода-вывода строк.
- •17.Структуры. Создание и заполнение структур информацией. Доступ к полям структуры.
- •18.Графика. Возможности стандартной библиотеки graphics.H. Алгоритмы построения графических изображений.
- •19.Понятие и назначение файлов. Открытие файла, чтение и запись информации в файл, закрытие файла, проверка достижения конца файла.
- •21.Перегрузка функций. Встраиваемые функции.
- •22.Основные концепции ооп. Классы. Оператор разрешения области видимости. Объекты. Доступ к членам класса. Массивы объектов. Указатели на объекты.
- •23.Конструкторы и деструкторы. Параметризованные конструкторы. Встраиваемые функции в объявлении класса.
- •24.Дружественные функции. Присваивание объектов. Передача объектов функциям.
- •25.Понятие о наследовании. Управление доступом к членам базового класса. Использование защищенных членов.
-
Алгоритмы с ветвлением. Инструкция switch. Вложенные инструкции switch. Примеры в реальных задачах.
Инструкция switch
Инструкция switch — это инструкция многонаправленного ветвления, которая позволяет выбрать одну из множества альтернатив.
Прежде чем переходить к изучению других циклических С++-конструкций, познакомимся с еще одной инструкцией выбора — switch. Инструкция switch обеспечивает многонаправленное ветвление. Она позволяет делать выбор одной из множества альтернатив. Хотя многонаправленное тестирование можно реализовать с помощью последовательности вложенных if-инструкций, во многих ситуациях инструкция switch оказывается более эффективным решением. Она работает следующим образом. Значение выражения последовательно сравнивается с константами из заданного списка. При обнаружении совпадения для одного из условий сравнения выполняется последовательность инструкций, связанная с этим условием. Общий формат записи инструкции switch таков.
switch (выражение) {
case константа1: последовательность инструкций break;
case константа2: последовательность инструкций break;
case константаЗ: последовательность инструкций break;
default: последовательность инструкций
}
Элемент выражение инструкции switch должен при вычислении давать целочисленное или символьное значение. (Выражения, имеющие, например, тип с плавающей точкой, не разрешены.) Очень часто в качестве управляющего switch-выражения используется одна переменная.
Инструкция break завершает выполнение кода, определенного инструкцией switch.
Последовательность инструкций default-ветви выполняется в том случае, если ни одна из заданных case-констант не совпадет с результатом вычисления switch-выражения. Ветвь default необязательна. Если она отсутствует, то при несовпадении результата выражения ни с одной из case-констант никакое действие выполнено не будет. Если такое совпадение все-таки обнаружится, будут выполняться инструкции, соответствующие данной case-ветви, до тех пор, пока не встретится инструкция break или не будет достигнут конец switch-инструкции (либо в default-, либо в последней case-ветви).
Инструкции default-ветви выполняются в том случае, если ни одна из case-констант не совпадет с результатом вычисления switch-выражения.
Итак, для применения switch-инструкции необходимо знать следующее.
-
Инструкция switch отличается от инструкции if тем, что switch-выражение можно тестировать только с использованием условия равенства (т.е. на совпадение switch-выражения с заданными case-константами), в то время как условное i f-выражение может быть любого типа.
-
Никакие две case-константы в одной switch-инструкции не могут иметь идентичных значений.
-
Инструкция switch обычно более эффективна, чем вложенные if-инструкции.
-
Последовательность инструкций, связанная с каждой case-ветвью, не является блоком. Однако полная switch-инструкция определяет блок. Значимость этого факта станет очевидной после того, как вы больше узнаете о C++.
Согласно стандарту C++ switch-конструкция может иметь не более 16 384 case-инструкций. Но на практике (исходя из соображений эффективности) обычно ограничиваются гораздо меньшим их количеством.
Использование switch-инструкции демонстрируется в следующей программе. Она создает простую "справочную" систему, которая описывает назначение for-, if- и switch-инструкций. После отображения списка предлагаемых тем, по которым возможно предоставление справки, программа переходит в режим ожидания до тех пор, пока пользователь не сделает свой выбор. Введенное пользователем значение используется в инструкции switch для отображения информации по указанной теме. (Вы могли бы в качестве упражнения дополнить информацию по имеющимся темам, а также ввести в эту "справочную" систему новые темы.)
// Демонстрация switch-инструкции на примере простой «справочной» системы.
#include <iostream.h>
int main(){
int choice;
cout<<"Справка по темам:\n\n";
cout<< "1. for\n";
cout<< "2. if\n";
cout<< "3. switch\n\n";
cout << "Введите номер темы (1-3): ";
cin >> choice; cout << "\n";
switch(choice) {
case 1: cout << "for - это самый универсальный цикл в С++.\n"; break;
case 2: cout << "if - это инструкция условного ветвления.\n"; break;
case 3: cout << "switch - это инструкция многонаправленного ветвления.\n"; break;
default: cout << "Вы должны ввести число от 1 до З.\n";
return 0; }
Вот один из вариантов выполнения этой программы.
Справка по темам:
-
for
-
if
3. switch
Введите номер темы (1-3): 2
if - это инструкция условного ветвления.
Формально инструкция break необязательна, хотя в большинстве случаев использования switch-конструкций она присутствует. Инструкция break, стоящая в последовательности инструкций любой case-ветви, приводит к выходу из всей switch-конструкции и передает управление инструкции, расположенной сразу после нее. Но если инструкция break в case-ветви отсутствует, будут выполнены все инструкции, связанные с данной case-ветвью, а также все последующие инструкции, расположенные под ней, до тех пор, пока все-таки не встретится инструкция break, относящаяся к одной из последующих case-ветвей, или не будет достигнут конец switch-конструкции.
Рассмотрим внимательно следующую программу. Попробуйте предугадать, что будет отображено на экране при ее выполнении.
#include <iostream.h>
int main() {
int i;
for(i=0; i<5; i++)
{ switch(i) {
case 0: cout << "меньше l\n";
case 1: cout << "меньше 2\n";
case 2: cout << "меньше 3\n";
case 3: cout << "меньше 4\n";
case 4: cout << "меньше 5\n"; }
cout << '\n'; }
return 0; }
Вот как выглядят результаты выполнения этой программы.
меньше 1 меньше 2 меньше 3 меньше 4 меньше 5
меньше 2 меньше 3 меньше 4 меньше 5
меньше 3 меньше 4 меньше 5
меньше 4 меньше 5
меньше 5
Как видно по результатам, если инструкция break в одной case-ветви отсутствует, выполняются инструкции, относящиеся к следующей case-ветви.
Как показано в следующем примере, в switch-конструкцию можно включать "пустые" case-ветви.
switch (i) {
case 1:
case 2:
case 3: do_something (); break;
case 4: do_something_else(); break;
}
Если переменная i в этом фрагменте кода получает значение 1, 2 или 3, вызывается функция do_something (). Если же значение переменной i равно 4, делается обращение к функции do_something_else (). Использование "пачки" нескольких пустых case-ветвей характерно для случаев, когда они используют один и тот же код.
Вложенные инструкции switch
Инструкция switch может быть использована как часть case-последовательности внешней инструкции switch. В этом случае она называется вложенной инструкцией switch. Необходимо отметить, что case-константы внутренних и внешних инструкций switch могут иметь одинаковые значения, при этом никаких конфликтов не возникнет. Например, следующий фрагмент кода вполне допустим.
switch(chl) {
case 'A': cout <<"Эта константа А - часть внешней инструкции switch";
switch(ch2) { case 'A': cout « "Эта константа А - часть внутренней инструкции switch";
break;
case 'В': // ...
break;
}
case 'B': // ...
}