- •Часть 1
- •40 01 02 – 02 Информационные системы и технологии (в экономике)
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах
- •3. Перечень тем лабораторных занятий, их содержание и объем в часах
- •Теоретический раздел
- •Тема № 1. Введение в программирование
- •Происхождение языка с.
- •Основные характеристики алгоритмического языка с
- •Область применения
- •Системы программирования
- •Исходные и объектные модули, процессы компиляции и связывания
- •Алфавит языка
- •Лексемы (cTokens)
- •Тема № 2. Выражения и операции языка Унарные операции
- •Бинарные операции
- •Условная трехместная операция
- •Операция явного преобразования типа
- •Приоритет операций. Порядок вычисления выражений.
- •Организация ввода-вывода информации
- •Тема № 3. Управляющие структуры. Ветвления и циклы
- •Операторы преобразования данных – это операторы присваивания и произвольные выражения, завершенные символом «;».
- •Операторы управления работой программы называют управляющими конструкциями программы.
- •Тема № 4. Организация данных. Массивы и указатели Массивы
- •Инициализация массивов
- •Указатели
- •Функции для выделения и освобождения памяти
- •Тема № 5. Функции. Символьные строки и функции над ними Определение функций
- •Описание функций
- •Вызов функции
- •Передача параметров
- •Указатели на функции
- •Массивы указателей на функции
- •Главная функция. Передача аргументов главной функции
- •Рекурсивные программы
- •Стандартные функции ввода-вывода строк
- •Стандартные функции обработки строк
- •Тема № 6. Классы памяти и препроцессор языка Си Локальные и глобальные переменные
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Регистровые переменные
- •Область видимости и функции
- •Препроцессор и его директивы
- •Тема № 7. Структуры Декларация структур
- •Инициализация структур
- •Доступ к элементам структур
- •Элементы-массивы
- •Массивы структур
- •Указатели на структуры
- •Доступ к элементам структуры, определенной через указатель
- •Структуры и функции
- •Объединения
- •Битовые поля
- •Практический раздел Виртуальные лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Контрольные работы
- •Содержание пояснительной записки.
- •Задание для контрольной работы №1
- •Задание для контрольной работы №2
- •Варианты индивидуальных заданий
- •Теоретические вопросы
- •Пример оформления титульного листа для виртуальных лабораторных работ
- •Пример оформления титульного листа для контрольных
Автоматические (локальные) переменные
По умолчанию объявленные в функции переменные являются автоматическими. Тем не менее, это можно явно задать с помощью ключевого слова auto:
void main()
{
auto int Numb;
…
Это выполняется, например, в целях подчеркивания того факта, что описание внешней функции намеренно перекрывается, либо когда требуется не изменять класс памяти переменной.
Автоматическая переменная имеет
- область видимости в пределах блока. Другая функция может использовать переменную с тем же именем, но это будет независимая переменная, хранимая в другом месте памяти.
- не имеет связывания. Ее нельзя дважды объявлять в одном и том же блоке. Можно определять переменные, имеющие одинаковые имена, но существующие в различных блоках.
- автоматическую продолжительность хранения. Она начинает существовать при вызове функции, которая содержит переменную. Когда функция завершается, автоматическая переменная исчезает – область памяти, которую она занимала, может использоваться для других целей.
Внешние (глобальные) переменные
Внешняя переменная должна быть определена, причем только один раз, вне текста любой функции. В этом случае ей будет выделена память. Она должна быть описана (декларирована) во всех функциях, которые хотят ею пользоваться. Описание содержит сведения о типе переменной. Описание может быть явным, в виде инструкции extern, или неявным, когда нужная информация получается из контекста.
Правило! Если переменная описана в другом модуле, применение ключевого слова extern в ее описании обязательно. Если определение внешней переменной в исходном файле расположено выше функции, где она используется, то в описании extern нет необходимости.
Модуль А:
…
int e_name;
extern double mult, coef[]; //Можно не указывать размер массива
int funcA0()
{ … // e_name, mult, coef[]
}
int main()
{ …
}
Модуль B:
…
extern int e_name;
double mult, bound;
int funcB0()
{ … // e_name, mult, bound
}
…
Модуль C:
…
extern int e_name;
extern double mult;
double coef[10];
int funcC0()
{ … // e_name, mult, coef[10]
}
Отметим, что в случае совпадения имен внутренней и внешней переменной какой-то функции, в данной функции будет использоваться внутренняя переменная, т. е.:
int e_name;
int funcA0();
int funcA0()
{ int e_name = 11;
printf (“\nfuncA0: e_name = %d”, e_name);
}
int main()
{ …
e_name = 77;
…
funcA0();
…
printf (“\nmain: e_name = %d”, e_name);
}
В результате:
funcA0: e_name = 11
main: e_name = 77
Поскольку внешние переменные доступны всюду, их можно использовать в качестве связующих данных между функциями как альтернативы связей через аргументы и возвращаемые значения. Для любой функции внешняя переменная доступна по ее имени, если только это имя было должным образом описано.
Статические переменные
Название «статическая» означает, что переменная сохраняет свое значение после выхода из функции. Область видимости статических локальных переменных такая же, как автоматических, но они не исчезают при завершении функции, которая их содержит. Таким образом, статический класс памяти имеет область видимости в пределах блока, но статическую продолжительность хранения. Компьютер запоминает значения статических переменных в промежутках между вызовами функции.
void Stat()
{
int i;
for (i=0; i< 3; i++)
printf ("\nValue=%d",GetNext());
printf ("\n");
}
int GetNext()
{
static int X=0;
return (X++); // (X++) == X++, Возвращается X, а не X++
}
Результат:
Value=0
Value=1
Value=2
Следует отметить, что переменные типа static могут также объявляться вне всех функций. При этом создается внешняя статическая переменная. Различие между обычной и статической внешней переменной состоит в их связывании. Обычная внешняя переменная может использоваться функциями в любом модуле программы (требуется объявление его в этом модуле как extern), а статическая – только функциями одного модуля (недопустимо extern static).
Имена статических локальных переменных известны только функции или блоку кода в которых они объявлены, а имена статических глобальных переменных известны только в файле, в котором они находятся. В сущности, модификатор static разрешает использование функциями переменных, не беспокоя другие функции. Статические переменные позволяют «прятать» части программы.
