- •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.Понятие о наследовании. Управление доступом к членам базового класса. Использование защищенных членов.
-
Алгоритмы линейного типа. Операторы ввода-вывода. Генератор случайных чисел.
-
Алгоритмы с ветвлением. Условные выражения. Инструкция if (полная и неполная форма). Вложенные if-инструкции. Конструкция if-else-if.
В этой главе вы узнаете, как управлять ходом выполнения С++-программы. Существует три категории управляющих инструкций: инструкции выбора (if, switch), итерационные инструкции (состоящие из for-, while- и do-while-циклов) и инструкции перехода (break, continue, return и goto).
За исключением return, все остальные перечисленные выше инструкции описаны в этой главе.
Инструкция if
Инструкция if позволяет сделать выбор между двумя выполняемыми ветвями программы.
Инструкция if была представлена в главе 2, но здесь мы рассмотрим ее более детально. Полный формат ее записи таков.
if(выражение) инструкция; else инструкция;
Здесь под элементом инструкция понимается одна инструкция языка C++. Часть else необязательна. Вместо элемента инструкция может быть использован блок инструкций. В этом случае формат записи i f-инструкции принимает такой вид.
i f (выражение) {
последовательность инструкций }
else {
последовательность инструкций }
Если элемент выражение, который представляет собой условное выражение, при вычислении даст значение ИСТИНА, будет выполнена if-инструкция; в противном случае — else-инструкция (если таковая существует). Обе инструкции никогда не выполняются. Условное выражение, управляющее выполнением if-инструкции, может иметь любой тип, действительный для С++-выражений, но главное, чтобы результат его вычисления можно было интерпретировать как значение ИСТИНА или ЛОЖЬ.
Использование if-инструкции рассмотрим на примере программы, которая представляет собой версию игры "Угадай магическое число". Программа генерирует случайное число и предлагает вам его угадать. Если вы угадываете число, программа выводит на экран сообщение одобрения ** Правильно **. В этой программе представлена еще одна библиотечная функция rand (), которая возвращает случайным образом выбранное целое число. Для использования этой функции необходимо включить в программу заголовок <cstdlib>.
// Программа "Угадай магическое число".
#include <iostream.h>
#include <stdlib.h>
int. main (){
int magic; // магическое число
int guess; // вариант пользователя
magic = rand(); // Получаем случайное число.
cout << "Введите свой вариант магического числа: "; cin >> guess;
if (guess == magic) cout << "** Правильно **"; return 0; }
В этой программе для проверки того, совпадает ли с "магическим числом" вариант, предложенный пользователем, используется оператор отношения "==". При совпадении чисел на экран выводится сообщение ** Правильно **.
Попробуем усовершенствовать нашу программу и в ее новую версию включим else-зетвь для вывода сообщения о том, что предположение пользователя оказалось неверным.
//Программа "Угадай магическое число": 1-е усовершенствование.
#include <iostream.h>
#include <stdlib.h>
int main (){
int magic; // магическое число
int guess; // вариант пользователя
magic = rand(); // Получаем случайное число.
cout << "Введите свой вариант магического числа: "; cin >> guess;
if (guess == magic) cout << "** Правильно **";
else cout << "...Очень жаль, но вы ошиблись.";
return 0; }
Условное выражение
Иногда новичков в C++ сбивает с толку тот факт, что для управления if-инструкцией можно использовать любое действительное С++-выражение. Другими словами, тип выражения необязательно ограничивать операторами отношений и логическими операторами или операндами типа bool. Главное, чтобы результат вычисления условного выражения можно было интерпретировать как значение ИСТИНА или ЛОЖЬ. Как вы помните из предыдущей главы, нуль автоматически преобразуется в false, а все ненулевые значения — в true. Это означает, что любое выражение, которое дает в результате нулевое или ненулевое значение, можно использовать для управления if-инструкцией. Например, следующая программа считывает с клавиатуры два целых числа и отображает частное от деления первого на второе. Чтобы не допустить деления на нуль, в программе используется if -инструкция.
// Деление первого числа на второе.
#include <iostream.h>
int main() {
int a, b;
cout << "Введите два числа: "; cin >> a >> b;
if(b) cout « a/b « '\n';
else cout << "На нуль делить нельзя.\n";
return 0; }
Обратите внимание на то, что значение переменной b (делимое) сравнивается с нулем с помощью инструкции if (b), а не инструкции if (b != 0). Дело в том, что, если значение b равно нулю, условное выражение, управляющее инструкцией if, оценивается как ЛОЖЬ, что приводит к выполнению else-ветви. В противном случае (если b содержит ненулевое значение) условие оценивается как ИСТИНА, и деление благополучно выполняется. Нет никакой необходимости использовать следующую if-инструкцию, которая к тому же не свидетельствует о хорошем стиле программирования на C++. if(b != 0) cout « a/b « '\n';
Эта форма if-инструкции считается устаревшей и потенциально неэффективной.
Вложенные if-инструкции
Вложенные i f-инструкции образуются в том случае, если в качестве элемента инструкция (см. полный формат записи) используется другая if-инструкция. Вложенные if-инструкции очень популярны в программировании. Главное здесь — помнить, что else-инструкция всегда относится к ближайшей if-инструкции, которая находится внутри того же программного блока, но еще не связана ни с какой другой else-инструкцией. Вот пример.
if(i) (
if(j) statement1;
if(k) statement2; // Эта if-инструкция
else statement3; // связана с этой else-инструкцией.
}
else statement4}; // Эта else-инструкция связана с if (i) .
Как утверждается в комментариях, последняя else-инструкция не связана с инструкцией if (j ), поскольку они не находятся в одном блоке (несмотря на то, что эта if-инструкция — ближайшая, которая не имеет при себе "else-пары"). Внутренняя else-инструкция связана с инструкцией if (к), поскольку она— ближайшая и находится внутри того же блока.
Вложенная i f-инструкция — это инструкция, которая используется в качестве элемента инструкция любой другой if- или else-инструкции.
Язык C++ позволяет 256 уровней вложения, но на практике редко приходится вкладывать if-инструкции на "такую глубину".
Продемонстрируем использование вложенных инструкций с помощью очередного совершенствования программы "Угадай магическое число" (здесь игрок получает реакцию программы на неправильный ответ).
//Программа "Угадай магическое число": 2-е усовершенствование.
#include <iostream.h>
#include <stdlib.h>
Int main(){
int magic; // магическое число
int guess; // вариант пользователя
magic = rand(); // Получаем случайное число.
cout << "Введите свой вариант магического числа: " ; cin » guess;
if (guess == magic) {
cout << "** Правильно **\n";
cout << magic << " и есть то самое магическое число. \n";
else {
cout « "...Очень жаль, но вы ошиблись.";
if(guess > magic) cout <<" Ваш вариант превышает магическое число.\n";
else cout << " Ваш вариант меньше магического числа.\n";
return 0; }
Конструкция if -else-if
Очень распространенной в программировании конструкцией, в основе которой лежит сложенная if-инструкция, является "лестница" if-else-if. Ее можно представить в следующем виде.
if(условие)
инструкция; else if(условие)
инструкция; else if(условие)
инструкция ;
else
инструкция;
Здесь под элементом условие понимается условное выражение. Условные выражения вычисляются сверху вниз. Как только в какой-нибудь ветви обнаружится истинный результат, будет выполнена инструкция, связанная с этой ветвью, а вся остальная "лестница" опускается. Если окажется, что ни одно из условий не является истинным, будет выполнена последняя else-инструкция (можно считать, что она выполняет роль условия, которое действует по умолчанию). Если последняя else-инструкция не задана, а все остальные оказались ложными, то вообще никакое действие не будет выполнено.
"Лестница" if-else-if— это последовательность вложенных if-else-инструкций.
Работа if -else-if-''лестницы" демонстрируется в следующей программе.
// Демонстрация использования "лестницы" if-else-if.
#include <iostream.h>
int main() {
int x;
for(x=0; x<6; x++) {
if (x==l) cout << "x равен единице.\n";
else if(x==2) cout « "x равен двум.\n";
else if(x==3) cout << "x равен трем.\n";
else if(x==4) cout << "x равен четырем.\n";
else cout << "x не попадает в диапазон от 1 до 4.\n"; }
return 0; }
Результаты выполнения этой программы таковы.
х не попадает в диапазон от 1 до 4.
х равен единице.
х равен двум.
х равен трем.
х равен четырем.
х не попадает в диапазон от 1 до 4.
Как видите, последняя else-инструкция выполняется только в том случае, если все предыдущие if-условия дали ложный результат.