- •Институт математики, экономики и механики кафедра математического обеспечения компьютерных систем в. С. Макогон, и. Н. Лисицына
- •Оглавление
- •Введение
- •Основныетипы данных, операции и выражения
- •Описание переменных.
- •Операции , выражения и операторы.
- •3. Операторы управления программой. Базовые управляющие структуры.
- •Операторы ветвления Условный оператор if
- •Оператор - переключатель
- •Операторы повторения (цикла).
- •4. Программирование алгоритмов линейной структуры.
- •5. Программирование разветвляющихся алгоритмов (оператор if).
- •6. Программирование разветвляющихся алгоритмов (оператор switch)
- •Оператор for
- •Цикл с постусловием do -while
- •8. Итерационные циклы
- •Задачи для самостоятельного решения
- •9. Программирование алгоритмов с использованием функций
- •Основные понятия численного решения уравнений
- •10. Программирование алгоритмов с использованием массивов
- •11. Символьные переменные и строки. Обработка строк.
- •Другие средства ввода-вывода символов и строк
- •Массивы строк
- •12. Указатели
- •Массивы указателей
- •2. Описание метода трапеций
- •3. Программный комплекс
- •13. Структуры
- •Указатели на структуры
- •14. Файлы. Потоковый ввод-вывод
- •Функции для работы с файлами
- •Открытие файловых потоков
- •Закрытие файловых потоков
- •Удаление файлов
- •Переименование файлов
- •Реинициализация
- •Функции для ввода-вывода по символам
- •1 Вариант) содержит только буквы исходной строки
- •2 Вариант) перевернута по отношению к исходной
- •Двоичные (бинарные) файлы. Блочно-ориентированный ввод-вывод.
Описание переменных.
По сути дела, переменная – это имя, присваиваемое некоторому участку памяти, где хранятся данные определенного типа. После определения переменной её имя можно использовать для операций с данными в памяти и, в частности, изменять значение переменной.
Описание переменных в общем случае имеет вид:
[класс памяти][const]тип имя[=значение [,имя [=значение…]]];
Поясним назначение составных частей этого описания.
Необязательный описатель класс памяти может принимать одно из значений: auto, extern, static, register. Об этом описателе мы поговорим позже.
Модификатор const служит для определения именованной константы; присвоенное ей значение изменить нельзя.
Поле тип есть один из описателей основных типов ( char, int, float, и т.д.)
Имя переменной выбирается по ранее рассмотренным правилам. При этом может осуществляться её начальная инициализация – переменной присваивается заданное значение.
В одном операторе можно описать несколько переменных одного типа, разделяя их запятыми.
Примеры.
int a = 25, b, c = -37;
const char ch = ‘\002’; double x, y, eps =1.0e-5;
double pi = 3.14;
char c, str; float х, dl;
С каждой переменной связаны две её важные характеристики: область действия ( область видимости ) и длительность существования («время жизни»). «Время жизни» переменной связано с выделением памяти под переменную и её освобождением. Область действия определяет ту часть программы, где описываемая переменная доступна для использования. В зависимости от области действия переменная может быть локальной или глобальной.
Атрибут класс памяти определяет «время жизни» переменной и может воздействовать на её область действия, которая зависит не только от самого описателя, но и от его местонахождения в теле программы. Если переменная определена внутри блока, то она называется локальной и область её действия – от точки описания до конца блока, включая все вложенные блоки. Если же переменная определена вне всяких блоков, она называется глобальной и областью её действия будет файл, в котором она определена – от точки описания до конца файла.
А теперь подробнее об описателях класса памяти.
Описатель auto определяет локальную переменную в блоке (функции), которая доступна только в пределах данного блока. Память под эту переменную выделяется в сегменте стека при активизации блока (функции), и освобождается при его завершении. Этот описатель принят по умолчанию и практически не используется.
Описатель extern служит для объявления глобальной переменной, которая определена в другом месте, вне всяких функций и, быть может, даже в другом файле. Эта переменная доступна всюду в других функциях, если они расположены текстуально ниже точки её определения, либо эта переменная в них объявлена с описателем extern.
Переменная класса static ведёт себя как локальная переменная auto, но выделение памяти и начальная инициализация такой переменной осуществляется только при первой активизации блока (функции), в котором определена static – переменная. Поэтому такая переменная от вызова к вызову функции сохраняет своё предыдущее значение.
Переменная с описателем класса памяти register предположительно размещается компилятором в регистрах микропроцессора для ускорения работы с описываемой переменной. Если такая возможность отсутствует, описатель registr заменяется на auto.
О классах памяти для функций более детально будет сказано далее (в разделе, посвященном функциям).
Если при определении переменной начальная инициализация отсутствует, то компилятор присваивает глобальным и статическим переменным нулевое значение, а автоматические переменные не инициализируются.
При описании переменных следует различать их определение и объявление. Объявление только информирует компилятор о типе и классе памяти объявляемой переменной, а определение предполагает, кроме того, и выделение памяти под переменную в соответствии с её типом. Чаще всего объявление и определение переменной совпадают. Однако для глобальных переменных это не так: такая переменная должна быть определена только один раз, а её объявление может встречаться в теле программы многократно.
Пример.
int x = 145; // определение внешней переменной
int main()
{
extern int y; // описание делает доступной внешнюю переменную y
extern int x; // это описание здесь не обязательно, но необходимо, если
// переменная х определена в другом файле
x=x+1; y=y-1;
cout << “x = “ << x << endl;
cout << “y = “ << y;
return 0;
}
int y = 541; // определение внешней переменной.
В результате на экран будет выведено:
х = 146
у = 540
Одна из особенностей языка С/С++, непривычная для тех, кто знаком с другими языками программирования – относительно либеральные правила, определяющие, когда, где и как должны описываться данные. Например, в отличие от языка Паскаль, требующего, чтобы переменные были полностью описаны до их использования в разделе описания данных, в языке С/С++ описание данных и их инициализация может возникнуть практически в любой точке программы, по мере необходимости в переменных определённого типа.