- •«Утверждаю»
- •Учебно-методический комплекс
- •Астана График выполнения и сдачи заданий по дисциплине
- •Карта учебно-методической обеспеченности дисциплины Учебники, учебные пособия
- •Конспект лекционных занятий
- •Тема 1. Введение в программирование на Си. Структура программы. Директивы препроцессора. Типы данных.
- •Основные операции в языке Си.
- •Преобразование типов
- •Тема 2. Управляющие структуры. Выбор вариантов. Структура выбора If, If – Else, логические операции, операция условия, множественный выбор.
- •Тема 3. Управляющие структуры. Структуры повторения While, do – While, For. Управляющие операторы break и continue.
- •Тема 4. Массивы. Разработка программ с использованием одномерных и двумерных массивов.
- •Тема 5. Функции в Си. Создание и использование функций.
- •Тема 6. Классы памяти и разработка программ.
- •Тема 7. Указатели в Си.
- •Тема 8. Использование указателей при обработке одномерных и двумерных массивов.
- •Тема 9. Символы и строки в Си.
- •Тема 10. Функции операции над строками.
- •Функции сравнения из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 6.
- •Функции поиска из библиотеки обработки строк. Прототипы функций и краткое описание каждой из них приведены в таблице 7.
- •Другие функции из библиотеки обработки строк. В таблице 8 приведены прототипы и краткое описание остальных функций из библиотеки обработки строк.
- •Ниже приведены примеры программы, использующих функции работы со троками.
- •Тема 11. Структуры данных в Си.
- •Тема 12. Динамические структуры данных.
- •Тема 13. Работа с файлами в Си.
- •Тема 14. Графика в Си.
- •Тема 15. Объектно-ориентированное программирование.
- •Методические рекомендации по выполнению лабораторных заданий
- •Лабораторная работа № 3. Использование операторов цикла при решении задач.
- •Лабораторная работа №4. Разработка программ с использованием одномерных массивов.
- •Лабораторная работа №5. Разработка программ с использованием двумерных массивов.
- •Лабораторная работа № 6. Программирование задач с использованием нескольких функций на языке Си.
- •Лабораторная работа № 8. Программирование задач обработки структур данных.
- •Лабораторная работа № 9. Разработка программ с использованием файловых переменных.
- •Лабораторная работа № 10. Разработка программ с использованием графических функций языка Си.
- •Содержание отчета по выполнению лабораторной работы
- •1 Задание
- •Тема 1. Запись констант, стандартных функций, выражений, операторов присваивания. Запись программ линейных структур алгоритмов.
- •Тема 2. Алгоритмическое описание, запись программ линейных, разветвляющихся.
- •Тема 3. Алгоритмическое описание, запись программ циклических структур алгоритмов.
- •Тема 4. Алгоритмическое описание, составление программ обработки одномерного массива.
- •Тема 5. Алгоритмическое описание, составление программ обработки двумерного массива.
- •Тема 6-7. Составление программ решения задач с использованием функции.
- •Рекомендуемая литература:
- •Тема 8-9. Составление программ решения задач обработки массивов с использованием указателей.
- •Тема 10-11. Программирование задач обработки символьных и стрковых данных.
- •Рекомендуемая литература.
- •Тема 12. Методы сортировки.
- •Тема 13. Составление программ решения задач с использованием структур данных.
- •Тема 14. Составление программ решения задач с использованием файла произвольного доступа.
- •Рекомендуемая литература.
- •Тема 15. Алгоритмизация графических построений.
- •Варианты заданий:
- •Сведения
- •Перечень экзаменационных вопросов по пройденному курсу
- •Глоссарий
Тема 6. Классы памяти и разработка программ.
Класс памяти определяет область действия переменной и продолжительность ее существования в памяти. Класс памяти устанавливается при описании переменной с соответствующим ключевым словом. Ранее при рассмотрении функций было отмечено, что переменные, описанные в функции как локальные переменные, доступны только внутри функции. Для того, чтобы использовать переменную в нескольких функциях, необходимо описать ее как внешнюю переменную. Переменные, определенные вне функции, являются внешними и имеют глобальную область действия. Каждая переменная имеет тип, а также она принадлежит к некоторому классу памяти. Для описания классов памяти используется четыре ключевых слова: для описания внешнего класса используется ключевое слово extern, для автоматического класса – слово auto, для описания статического класса – слово statiс и для описания регистрового класса – register. Рассмотрим свойства переменных, относящихся к определенному классу памяти.
Автоматические переменные. Переменные, описанные внутри функции, считаются относящимися к классу auto, если нет другого явного описания класса памяти, то есть по умолчанию переменные, описанные в функции, являются автоматическими. Иногда переменные описывают явно с использованием слова auto, для того чтобы показать, что переменная описана только внутри этой функции. Ключевое слово auto указывается перед спецификацией типа переменной в описании переменной. Автоматические переменные имеют локальную область действия и начинают существовать при вызове функции, содержащей ее. При завершении работы функции автоматические переменные исчезают, а ячейки памяти, выделенные для автоматических переменных, могут снова использоваться для других переменных. (Переменные, описанные в начале функции доступны в пределах функции)
Внешние переменные. Переменная, описанная вне функции, является внешней. Внешнюю переменную можно описать в функции, которая использует ее, при помощи ключевого слова extern.
int l;
main()
{ extern int l;
scanf(“%d”,&l);
while(l!=20)
pr();
printf(“Поиск завешен \n”); }
pr()
{ extern int l;
printf(“Введите новое число \n”);
scanf(“%d”,&l); }
Если в функции pr() описание переменной l будет отсутствовать, внешняя переменная l будет известна в функции pr() по умолчанию. Если в функции main() и функции pr() ключевое слово extern не будет включено в описание переменной l внутри функции, то под этим именем создается новая автоматическая переменная. Внешняя переменная l не известна будет этим функциям. Если слово extern опущено в описании переменной l в функции pr(), тогда переменная l , которая находится в main() функции, никогда не получит нового значения.
Статические переменные. Статические переменные имеют локальную область действия, но в отличие от автоматических переменных они не исчезают, когда содержащая их функция закончит свою работу. Компилятор хранит их значения от одного вызова функции до другого.
main( )
{ int k;
for (k=1; k<=5; k++)
{ printf (“Интерация %d:\n”,k);
prnv( ); }
}
prnv( )
{ int av=1;
static int stv=1;
printf(“av=%d stv=%d\n”, av++, stv++); }
Функция prvn увеличивает каждую переменную после печати ее значения. Статическая переменная stv «помнит», что ее значение было увеличено по 1, в то время как для переменной av начальное значение устанавливается каждый раз заново. Это указывает на разницу в инициализации: av инициализируется каждый раз, когда вызывается функция prnv( ) , в то время как stv инициализируется только один раз при компиляции функции prnv( ).
Итерация 1:
av=1 stv=1
Итерация 2:
av=1 stv=2
Итерация 3:
av=1 stv=3
Итерация 4:
av=1 stv=4
Итерация 5:
av=1 stv=5
Итерация 6:
av=1 stv=6
Регистровые переменные. Обычно переменные хранятся в памяти машины. Регистровые переменные запоминаются в регистрах центрального процессора, где доступ к ним и работа с ними выполняются гораздо быстрее, чем в памяти. В остальном регистровые переменные аналогичны автоматическим переменным. Они создаются следующим образом:
main()
{ register int rv;
……….. }
Если имеется описание регистровой переменной, компилятор сравнивает требования описания с количеством доступных регистров. Если требования не может быть выполнено, переменная становится автоматической переменной.
Классы памяти |
Ключевое слово |
Продолжительность существования |
Область действия |
Автоматический |
auto |
Временно |
Локальная |
Регистровый |
register |
Временно |
Локальная |
Статический |
static |
Постоянно |
Локальная |
Внешний |
extern |
Постоянно |
Глобальная (все файлы) |
Внешний статический |
static |
Постоянно |
Глобальная (один файл) |
Основная литература: 1осн[193-199], 2осн[291-298], 3осн[69-80]
Дополнительная литература: 9доп[254-261]
Контрольные вопросы:
Какие переменные сохраняются в регистрах центрального процессора?
Для чего предназначены классы памяти?
Какие переменные имеют локальную область действия и перестают существовать после окончания работы функции?
Чем отличаются статические переменные от автоматических?
Чем отличаются регистровые переменные от автоматических?