ЦЕЛЬ РАБОТЫ: Ознакомиться с областью видимости, временем жизни и инициализацией переменных разных классов памяти. Научиться целесообразно применять их в программах.
- Порядок выполнения работы.
1.1. Дополнить программу 1 так,чтобы можно было удостове-
риться, что в программе имеется три различных переменных с тремя
различными значениями, но с одинаковыми именами «ab».
1.2. В программе 2 (строка А2) объявить переменную b в клас-
се памяти auto (Приложение 1). Изучить отличие результатов прог-
рамм исходной 2 и модифицированной 2.
С помощью трассировки (Приложение 2) проследить за измене-
нием содержания регистра (Меню Window режим Register), содержаще-
го переменную ab.
1.3. В модифицированной по п.1.2 программе 2 в строке А1
объявить переменную «а» в классе памяти static (Приложение 1).
Изучить отличие результатов работы всех трех версий программы 2.
1.4. Проверить работоспособность программы 3 в случаях
— отсутствия объявления глобальной переменной glob в строке А1;
-описания переменной glob в классе памяти auto в строках А2 и А3.
Отладку осуществлять с использованием трассировки (Приложе-
ние 2).
/* Программа 1 */
#include <stdio.h>
void prog1A(void);
void prog1B(void);
int ab=1;
main()
{
int ab=0;
prog1A();
prog1B();
}
void prog1A(void)
{
auto int ab=2;
}
void prog1B(void)
{
printf(«Значение переменной ab = %d\n»,ab);
}
/* Программа 2 */
// Классы памяти: статическая переменная
#include <stdio.h>
void prog2A(void);
main()
{
register int ab;
for (ab=1;ab<=3;ab++)
{
printf(«Итерация %d\n»,ab);
prog2A();
}
}
void prog2A(void)
{
int a=1; // строка А1
static int b=1; // строка А2
printf(«a = %d и b = %d\n»,a++,b++);
}
/* Программа 3 */
// Классы памяти: глобальная переменная
#include <stdio.h>
void prog3A(void);
int glob; // внешняя переменная строка А1
main()
{
extern int glob; // строка А2
printf(» Введите числовой пароль \n»);
scanf («%d»,&glob);
while (glob!=57)
prog3A();
printf(» Вы получаете доступ к базе.\n»);
}
void prog3A(void)
{
extern int glob; // строка А3
printf(» Введите пароль еще раз \n»);
scanf («%d»,&glob);
return (0);
}
ИНДИВИДУАЛЬНЫЕ ЗАДАНИЯ.
- В программе 3 вводить пароль-ключ доступа к Базе (длиной не
более 6 байт).
- В программе 3 организовать подсчет количества раз ввода непра-
вильного пароля и вывод этого количества на экран.
- Даны отрезки a, b, c, d. Для каждой тройки этих отрезков вы-
числить площадь треугольника в функции и распечатать ответ в вы-
зывающей программе.
- Даны координаты отрезков a, b, c, d. Для каждой тройки этих
отрезков построить треугольники на экране дисплея.
- Даны две квадратные вещественные матрицы 10-го порядка. Напеча-
тать квадрат той из них, в которой наименьший след (сумма диаго-
нальных элементов).
*** Написать функции:
forward — переместиться на заданное расстояние;
left — повернуть налево на заданный угол;
right — повернуть направо на заданный угол;
pen_up — поднять перо;
pen_down — опустить перо.
Функции должны взаимодействовать через глобальные переменные:
xpos, ypos — координаты;
pen — поднято перо или нет;
angle — угол с осью абсцисс.
С помощью этих функций нарисовать на экране:
- Квадрат со стороной 75 единиц и центром, совпадающим с центром
экрана.
- Прямоугольник с отношением сторон 1:2 и со срезанными углами.
Положение прямоугольника на экране произвольно.
- Четыре крупные цифры — текущий год (цифры написаны по девяти-
сегментному шаблону, как на почтовых конвертах)&
- Те же цифры, что в зад.8, но по семисегментному шаблону, как в
электронных часах.
- Содержание отчета.
2.1. Текст программы 1 с изменениями, вызванными п.1.1. Рас-
печатать значения трех переменных с именем ab.
2.2. Измененные тексты программы 2 в соответствии с п.1.2 и
п.1.3. Результаты pаботы трех версий пpогpаммы. Значения всех ре-
гистров после выполнения всех версий программы 2.
2.3. Объяснить поведение программы 3 в случаях изменений по
п.1.4.
2.4. Индивидуальное задание.
- Вопросы по лабораторной работе:
- Описать программу 1.
- Описать программу 2.
- Описать программу 3.
- Какие существуют классы памяти (Приложение 1).
- Время жизни, область действия и место создания в памяти
автоматических переменных? Время инициализации.
- Время жизни, область действия и место создания в памяти
внешних переменных? Время инициализации.
- Время жизни, область действия и место создания в памяти
внутренних статических переменных? Время инициализации.
- Время жизни, область действия и место создания в памяти
внешних статических переменных? Время инициализации.
- Время жизни, область действия и место создания регистро-
вых переменных? Время инициализации.
- Трассировка.
ПРИЛОЖЕHИЕ.
- Класс памяти определяет:
-область действия переменной;(какие функции имеют доступ к переменной);
-продолжительность ее существования в памяти.
Класс памяти устанавливается при описании переменной соот-
ветствующим ключевым словом.
Переменные, определенные ВНЕ функции, являются внешними и
имеют глобальную область действия.
Переменные, определенные ВНУТРИ функции, являются автомати-
ческими и локальными, если только не используются другие ключе-
вые слова.
Внешние переменные, определенные раньше функции, доступны
ей, ДАЖЕ если не описаны внутри ее.
Таблица
Класс памяти Ключевое слово Продолжительность Область
существования действия
(видимости)
Автоматический auto Временно Локальная
Регистровый register Временно Локальная
Статический static Постоянно Локальная
—————————————————————-
Внешний extern Постоянно Глобальная (все
файлы компиляции)
Внешний ста- static Постоянно Глобальная (oдин
тический файл компиляции)
Классы памяти, перечисленные выше (ниже) линии ——, описы-
ваются внутри (вне) функций.
Продолжительность существования — интервал выполнения прог-
раммы, в течение которого этот объект существует.
Область видимости — часть текста программы, в которой этот
объект может использоваться.
- Трассировка — каждый оператор программы выполняется пос-
ле нажатия определенной клавишы (F7). См. режим Trace into в ме-
ню Run.
Трассировка без захода в функцию — клавиша <F8>.
