- •Задание:
- •Задание:
- •Лабораторная работа 4 Переменные, типы данных и выражения
- •1. Идентификаторы
- •2. Типы данных
- •2.2 Вещественные числа
- •2.3 Преобразование типов в выражениях
- •2.4 Символьный тип
- •2.5 Символьные строки
- •2.6 Типы данных, определяемые пользователем
- •3. Вывод вещественных чисел на экран
- •4. Описания, константы и перечисления
- •4.1 Тип "Перечисление"
- •4.2 Расположение описаний констант и переменных в исходном тексте
- •5. Присваивание и выражения
- •5.1 Краткая форма записи операторов присваивания
- •5.2 Логические выражения и операторы
- •6. Сводка результатов
- •Лабораторная работа 5 Функции и процедурная абстракция
- •1. Назначение подпрограмм
- •2. Определение новых функций
- •3. Способы передачи параметров внутрь функций
- •3.1 Передача параметров по значению
- •3.2 Передача параметров по ссылке
- •4. Полиморфизм и перегрузка функций
- •5. Процедурная абстракция и "хороший" стиль программирования
- •6. Модульное программирование
- •Лабораторные работа 6 Текстовые файлы и потоки ввода/вывода
- •1. Потоки ввода/вывода
- •Создание потоков
- •1.2 Подключение и отключение потоков от файлов
- •2. Проверка ошибок выполнения файловых операций
- •3. Символьный ввод/вывод
- •3.1 Функция ввода "get(...)"
- •3.2 Функция вывода "put(...)"
- •3.3 Функция "putback(...)"
- •4. Проверка достижения конца файла при операциях ввода
- •4.1 Проверка конца файла с помощью функции "eof()"
- •5. Передача потоков функциям в качестве параметров
- •Лабораторные работа 7 Операторы ветвления и циклы
- •1. Логические значения, выражения и функции
- •2. Циклы "for", "while" и "do...While"
- •3. Множественное ветвление и оператор "switch"
- •4. Блоки и область видимости переменных
- •5. Замечание о вложенных циклах
- •6. Сводка результатов
- •Задание:
- •Лабораторные работа 8 Массивы и символьные строки
- •1. Назначение массивов
- •1.1 Объявление массивов
- •1.2 Использование элементов массивов в выражениях
- •2. Передача массивов в качестве параметров функций
- •3. Сортировка массивов
- •4. Двумерные массивы
- •5. Символьные строки
- •5.2 Объявление и инициализация символьных строк
- •5.3 Библиотечные функции для работы с символьными строками
- •5.4 Чтение символьных строк из потока ввода с помощью функции "getline(...)"
- •6. Сводка результатов
4. Описания, константы и перечисления
Как вы уже знаете, в программах на Си++ переменные обязательно
должны быть описаны до первого использования, например, так:
float number;
После оператора описания до момента выполнения первого
оператора присваивания значение переменной "number" будет
неопределенным, т.е. эта переменная может иметь случайное значение. В
Си++ можно (и желательно) инициализировать переменные конкретными
значениями непосредственно при описании переменных. Например,
возможен следующий оператор описания с инициализацией:
float PI = 3.1416;
Если значение переменной в программе никогда не изменяется, то ее
целесообразно защитить от случайного изменения с помощью служебного
слова "const" – т.е., превратить в константу.
4.1 Тип "Перечисление"
Для описания набора связанных по смыслу констант типа "int" в Си++
есть оператор перечисления. Например, описание вида
enum { MON, TUES, WED, THURS, FRI, SAT, SUN };
эквивалентно описанию 7 констант-кодов дней недели:
const int MON = 0;
const int TUES = 1;
const int WED = 2;
const int THURS = 3;
const int FRI = 4;
const int SAT = 5;
const int SUN = 6;
По умолчанию членам перечисления "enum" присваиваются значения
0, 1, 2, и т.д.. При необходимости члены перечисления можно
инициализировать другими значениями. Неинициализированным явно
членам будут присвоены значения по порядку, начиная от предыдущего
проинициализированного члена:
enum { MON = 1, TUES, WED, THURS, FRI, SAT = -1, SUN };
В приведенном примере "FRI" имеет значение 5, а "SUN" – значение 0.
4.2 Расположение описаний констант и переменных в исходном тексте
В исходном тексте описания констант чаще всего размещаются в
заголовке программы перед функцией "main". После них, уже в теле функции
"main", размещаются описания переменных. Для иллюстрации этого порядка
ниже приведен фрагмент программы, которая рисует на экране окружность
заданного радиуса и вычисляет ее длину (набирать этот пример не надо,
поскольку он приведен не полностью.)
#include <iostream.h>
const float PI = 3.1416;
const float SCREEN_WIDTH = 317.24;
int drawCircle(float diameter); /* Это "прототип функции" */
void main()
{
float radius = 0;
cout << "Введите радиус окружности.\n";
cin >> radius;
drawCircle(radius*2);
cout.setf(ios::fixed);
cout.precision(2);
cout << "Длина окружности радиуса " << radius;
cout << " примерно равна " << 2*PI*radius << ".\n";
}
int drawCircle(float diameter)
{
float radius = 0;
if (diameter > SCREEN_WIDTH)
radius = SCREEN_WIDTH/2.0;
else
radius = diameter/2.0;
...
...
}
После определения функции "main()" в этой программе содержится
определение функции рисования окружности "drawCircle(...)". Детали
реализации этой функции сейчас не существенны (будем считать, что
функция drawCircle(...)" реализована корректно и ею можно пользоваться так
же, как, например, функцией "sqrt(...)"). Обратите внимание, что, хотя
переменная "radius" используется в обеих функциях "main()" и "drawCircle(...)", это
не одна и та же переменная, а две разных.
Если бы переменная "radius" была описана до функции "main", то в
таком случае она была бы глобальной переменной (общедоступной). Тогда,
предполагая, что внутри функции "drawCircle(...)" описания переменной уже
нет, если "drawCircle(...)" присвоит глобальной переменной значение
"SCREEN_WIDTH/2.0", то это значение чуть позже функция "main()" использует
для вычисления длины окружности и получится неверный результат.
В приведенной программе глобальной переменной нет, а есть две
локальных переменных ______・"radius". Например, первая переменная "radius"
является локальной переменной функции "main()", или, говорят, что функция
"main()" является областью видимости этой переменной.
Константы общего назначения, такие, как "PI" и "SCREEN_WIDTH",
принято описывать глобально, чтобы они были доступны внутри любой
функции.
Для контроля действий программы в приведенном фрагменте
предусмотрено повторное отображение данных, введенных пользователем.
Другими словами, заданное пользователем значение "radius" еще раз
печатается на экране перед отображением длины окружности.