- •Н. А. Аленский основы программирования
- •§ 1. Структура простой программы. Ввод, вывод
- •1.1. Пример первой программы
- •1.2. Директива препроцессора #include
- •1.3. Структура программы
- •1.4. Комментарии
- •1.5. Ключевые слова и идентификаторы
- •1.6. Простой ввод, вывод
- •§ 2. Оператор if
- •2.1. Полная форма
- •2.2. Сокращённая форма
- •2.3. Особенности оператора
- •Задачи и упражнения
- •§ 3. Выражения
- •3.1. Константы
- •Непосредственно записать в выражении;
- •3.2. Операции и их приоритет
- •3.3. Операции отношения и логические операции
- •3.4. Особенности операции присваивания
- •3.5. Тернарная операция (?)
- •Задачи и упражнения
- •§ 4. Оператор выбора switch
- •Задачи и упражнения
- •§ 5. Операторы цикла
- •5.1. Оператор while c предусловием
- •Правила использования и особенности оператора while
- •5.2. Оператор цикла do … while c постусловием
- •5.3. Оператор for
- •5.4. Операторы continue и break
- •Задачи и упражнения
- •§ 6. Введение в одномерные массивы
- •6.1. Что такое массив. Объявление одномерного массива
- •6.2. Способы определения массивов
- •6.3. Вывод одномерного массива. Функции printf и сprintf
- •6.4. Некоторые типы простых задач при работе с массивами
- •Задачи и упражнения
- •§ 1. Функции без результатов. Передача параметров по значению
- •1.1. Примеры. Правила оформления и вызова функций
- •Void line2(int Len, y, char ch) // ошибка,
- •1.2. Формальные и фактические параметры
- •1.3. Передача параметров по значению
- •§ 2. Функции типа void с несколькими результатами
- •2.1. Пример
- •2.2. Что такое ссылочный тип
- •2.3. Возврат значений из функции с помощью ссылочного типа
- •Задачи и упражнения
- •§ 3. Функции с одним результатом. Оператор return
- •Задачи и упражнения
- •§ 4. Одномерные массивы в функциях. Сортировка массива
- •Задачи и упражнения.
- •§ 5. Область действия имён. Локальные и глобальные имена
- •§ 6. Дополнительные возможности функций
- •Встраиваемые функции (inlineфункции)
- •6.2. Параметры по умолчанию
- •6.3. Перегрузка функций
- •§ 1. Примеры
- •§ 2. Класс. Поля и методы класса
- •§ 3. Создание объектов. Конструктор
- •Задачи и упражнения.
- •Глава 4 простые типы данных § 1. Целый тип
- •1.1. Битовые операции
- •1.2. Использование битовых операций
- •1.3. Упаковка и распаковка информации
- •Задачи и упражнения.
- •§ 2. Логический тип
- •§ 3. Символьный тип
- •Глава 5 матрицы (двухмерные массивы) § 1. Объявление, способы определения
- •§ 2. Вывод матриц
- •§ 3. Типы алгоритмов на обработку матриц
- •3.1. Построчная обработка
- •3.2. Обработка матрицы по столбцам
- •3.3. Обработка всей матрицы
- •3.4. Обработка части матрицы
- •3.5. Преобразование матрицы
- •Упражнения.
- •3.6. Построение матриц
- •§ 4. Передача матрицы в качестве параметра функции
- •Задачи и упражнения.
- •Б. Обработка матрицы по столбцам.
- •Даны две матрицы a и b одинаковой размерности. Построить матрицу с, каждый элемент которой определяется по правилу:
- •Список рекомендуемой литературы
- •Сборники задач по программированию
- •Оглавление
- •Задачи и упражнения …….……………………………………...12
- •3.1. Константы ………………………………………………...…14
§ 4. Оператор выбора switch
Аналогичный оператор есть и в других языках (case в Pascal). Он используется, если уровень вложенности if достаточно большой (2.3). Тогда соответствующая часть программы при использовании switch становится более наглядной и легче для понимания и отладки.
Например, пусть дана z — оценка по “старой” 5балльной системе. В зависимости от неё вывести текст “не явился”, если z=1, “не удовл.”, если z=2, “удовл.”, если z=3, и т. д.
// Первый вариант с помощью if:
if (z==1) cout<<”не явился”;
else if (z==2) cout <<”не удовл.”;
else if (z==3) cout <<”удовл.”;
else if (z==4) cout <<”хор.”;
else if (z==5) cout <<”отл.”;
else cout<<”Ошибка”;
// Второй вариант с оператором switch предпочтительнее:
switch (z)
{ case 1: cout<<”не явился”; break;
case 2: cout <<”не удовл.”; break;
case 3: cout <<”удовл.”; break;
case 4: cout <<”хор.”; break;
case 5: cout <<”отл.”; break;
default: cout<<”Ошибка ”;
} // Конец оператора switch.
// Здесь оператор, следующий после switch.
Работу оператора рассмотрим на нескольких тестах. Пусть z=1, тогда выводится “не явился” и с помощью break передаётся управление на оператор, следующий после switch, а остальные ветви пропускаются. Если, например, z=3, то первые две ветви пропускаются, выполняется cout <<”удовл.”; и break передаёт управление на оператор, следующий после switch. Если z не является оценкой, например, числом 30, то первые пять ветвей пропускаются, выводится “Ошибка” и выполняется оператор, следующий после switch.
Оператор switch имеет следующий общий вид:
switch (выражение)
{ case константное_выражение1:
последовательность_операторов1; break;
case константное_выражение2:
последовательность_операторов2; break;
…
case константное_выражениеN:
последовательность_операторовN; break;
default:
последовательность_операторов;
}
Выражение, записываемое после ключевого слова switch обязательно в скобках, может быть целого, символьного или перечисляемого типа. Чаще всего это просто целочисленная или символьная переменная. Нельзя использовать выражение вещественного или строкового типа. В константном выражении можно использовать константы, определённые одним из указанных в 3.1 способов, и нельзя записывать выражения, в том числе переменные или вызовы функций. Чаще всего здесь используется обычная целая или символьная константа.
Работает оператор следующим образом. Значения константных выражений вычисляются во время компиляции. Во время выполнения вычисляется значение выражения и сравнивается с первой константой на строгое равенство. Если не совпало, оно же сравнивается со второй константой и т. д. Если значение выражения совпало с одной из констант, выполняется соответствующая последовательность операторов, и break передаёт управление на оператор, следующий после switch. Если break отсутствует, то выполняется следующая последовательность операторов, хотя значение выражения и не совпадает со следующей константой. Обязательность break для пропуска остальных ветвей — основная особенность этого оператора по сравнению с другими языками. В случае отсутствия совпадений выполняются операторы, записанные после default, который необязателен. Если его нет, то в случае отсутствия соответствий ничего не выполняется.
В отличие от языка Pascal нельзя указать диапазон констант. Разрешается для нескольких констант указать одну и ту же последовательность операторов. Например, анализ оценок по 10балльной системе будет выглядеть так:
switch (z){ case 1: case 2: case 3: cout <<”не удовл.” ; break;
case 4:
case 5: cout <<”удовл.”; break;
case 6: case 7: case 8: cout <<”хор.”; break;
case 9: case 10: cout <<”отл.” ; break;
default: cout<<”Ошибка ”;
}
При этом ключевые слова case желательно записывать в “столбик”, как это сделано во второй ветви.
Допускается вложенность операторов switch, когда в любой последовательности операторов используется другой оператор switch. Константы или значения константных выражений внутреннего и внешнего операторов switch могут совпадать. На одном уровне switch они должны быть различными. Допустима следующая часть программы:
char flag1, flag2; ……
switch (flag1)
{ case ‘A’: switch (flag2)
{ case ‘A’: cout<<”AA”; break;
case ‘B’: cout<<”AB”; }
break;
case ‘X’:
…
}