Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lekcii_1_10 / Лекция 04.docx
Скачиваний:
78
Добавлен:
21.05.2015
Размер:
2.04 Mб
Скачать

Int main()

{

 int i;

 // Вывод чисел на экран до нажатия любой клавиши.

 for(i=0; !kbhit(); i++)

  cout << i << ' ';

 return 0;

}

На каждой итерации цикла вызывается функция kbhit(). Если после запуска программы нажать какую-нибудь клавишу, эта функция возвратит значение ИСТИНА, в результате чего выражение !kbhit() даст значение ЛОЖЬ, и цикл остановится. Но если не нажимать клавишу, функция возвратит значение ЛОЖЬ, а выражение !kbhit() даст значение ИСТИНА, что позволит циклу продолжать "крутиться".

Отсутствие элементов в определении цикла

В C++ разрешается опустить любой элемент заголовка цикла (инициализация, условное выражение, инкремент) или даже все сразу. Например, мы хотим написать цикл, который должен выполняться до тех пор, пока с клавиатуры не будет введено число 123. Вот как выглядит такая программа.

#include <iostream>

using namespace std;

Int main()

{

 int x;

 for(x=0; x!=123; ) {

  cout << "Введите число: ";

  cin >> x;

 }

 return 0;

}

Здесь в заголовке цикла for отсутствует выражение инкремента. Это означает, что при каждом повторении цикла выполняется только одно действие: значение переменной х сравнивается с числом 123. Но если ввести с клавиатуры число 123, условное выражение, проверяемое в цикле, станет ложным, и цикл завершится. Поскольку выражение инкремента в заголовке цикла for отсутствует, управляющая переменная цикла не модифицируется.

Бесконечный цикл

Бесконечный циклэто цикл, который никогда не заканчивается.

Оставив пустым условное выражение цикла for, можно создать бесконечный цикл (цикл, который никогда не заканчивается). Способ создания такого цикла показан на примере следующей конструкции цикла for.

for(;;)

{

 //...

}

Этот цикл будет работать без конца.

Циклы временной задержки

В программах часто используются так называемые циклы временной задержки. Их задача — просто "убить время". Для создания таких циклов достаточно оставить пустым тело цикла, т.е. опустить те инструкции, которые повторяет цикл на каждой итерации. Вот пример:

for(x=0; х<1000; х++);

Этот цикл лишь инкрементирует значение переменной х и не делает ничего более. Точка с запятой (в конце строки) необходима по причине того, что цикл for ожидает получить инструкцию, которая может быть пустой (как в данном случае).

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

Инструкция switch

Инструкция switchэто инструкция многонаправленного ветвления, которая позволяет выбрать одну из множества альтернатив.

Прежде чем переходить к изучению других циклических С++-конструкций, познакомимся с еще одной инструкцией выбора — switch. Инструкция switch обеспечивает многонаправленное ветвление. Она позволяет делать выбор одной из множества альтернатив. Хотя многонаправленное тестирование можно реализовать с помощью последовательности вложенных if-инструкций, во многих ситуациях инструкция switch оказывается более эффективным решением. Она работает следующим образом. Значение выражения последовательно сравнивается с константами из заданного списка. При обнаружении совпадения для одного из условий сравнения выполняется последовательность инструкций, связанная с этим условием. Общий формат записи инструкции switch таков.

switch(выражение) {

 case константа1:

  последовательность инструкций

  break;

 case константа2:

  последовательность инструкци

  break;

 case константа3:

  последовательность инструкций

  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-константами), в то время как условное if-выражение может быть любого типа.

■ Никакие две case-константы в одной switch-инструкции не могут иметь идентичных значений.

■ Инструкция switch обычно более эффективна, чем вложенные if-инструкции.

■ Последовательность инструкций, связанная с каждой case-ветвью, не является блоком. Однако полная switch-инструкция определяет блок. Значимость этого факта станет очевидной после того, как вы больше узнаете о C++.

Согласно стандарту C++ switch-конструкция может иметь не более 16 384 case-инструкций. Но на практике (исходя из соображений эффективности) обычно ограничиваются гораздо меньшим их количеством.

Использование switch-инструкции демонстрируется в следующей программе. Она создает простую "справочную" систему, которая описывает назначение for-, if- и switch-инструкций. После отображения списка предлагаемых тем, по которым возможно предоставление справки, программа переходит в режим ожидания до тех пор, пока пользователь не сделает свой выбор. Введенное пользователем значение используется в инструкции switch для отображения информация по указанной теме. (Вы могли бы в качестве упражнения дополнить информацию по имеющимся темам, а также ввести в эту "справочную" систему новые темы.)

// Демонстрация switch-инструкции на примере простой "справочной" системы.

#include <iostream>

using namespace std;

Соседние файлы в папке lekcii_1_10