- •Лекция 1 Создание консольного приложения
- •2. Консоль. Построение консольного проекта
- •3. Запуск приложения
- •4. Сохранение и редактирование проекта
- •Лекция 2
- •4. Функции форматированного ввода и вывода
- •4.1. Функция форматированного ввода с клавиатуры
- •4.2. Функция форматированного вывода на экран
- •5. Математические функции
- •Лекция 3 Линейные вычислительные процессы
- •1. Алгоритм. Управляющие структуры
- •2. Линейные вычислительные алгоритмы
- •Лекция 4 Разветвляющиеся вычислительные процессы
- •1. Управляющая структура «развилка». Логические операции и операции отношения
- •2.1. Условный оператор if()
- •2.2. Условное выражение
- •2.3. Оператор выбора switch()
- •Лекция 5 Программирование разветвляющихся вычислительных процессов
- •Лекция 6 Циклические вычислительные процессы.
- •1. Типы циклов
- •3. Операторы безусловного перехода
- •Лекция 7 Вычисление последовательностей
- •4. Примеры вычисления последовательностей
- •5. Структура алгоритмов вычисления рекуррентных последовательностей
- •Лекция 8 Одномерные массивы
- •1. Массивы
- •1.1. Примеры программ обработки одномерных массивов
- •Лекция 9 Алгоритмы сортировки одномерных массивов
- •1. Сортировка одномерных массивов
- •1.1. Метод пузырька (метод обменной сортировкой с выбором)
- •1.2. Сортировка выбором
- •1.3. Сортировка простыми вставками
- •Лекция 10 Двухмерные массивы
- •1. Двухмерные массивы
- •Лекция 11 Алгоритмы матричной алгебры
- •1. Алгоритмы матричной алгебры
- •Лекция 12 Динамические массивы
- •1. Память компьютера. Адресное пространство
- •2. Динамическая память
- •3. Адреса и указатели
- •4. Указатели и массивы. Динамические массивы
- •5. Проблемы, связанные с указателями
- •6. Поразрядные операции
- •Лекция 13
- •1.2. Способы объявления и обращения к элементам двухмерных массивов
- •Лекция 14 Символы и строки
- •1. Символьный тип данных
- •2. Строки
- •Лекция 15 Структуры
- •1. Понятие структуры
- •2. Определение нового имени типа
- •3. Массивы структур. Указатели на структуры
- •3.1. Определение статического массива структур
- •3.1. Определение динамического массива из n структур
- •Лекция 16 Файлы
- •1. Потоковый ввод-вывод данных
- •3. Понятие файла. Функции работы с файлами
- •Лекция 17 Файлы
- •Лекция 18 Функции пользователя
- •I. Приёмы построения алгоритмов
- •2. Понятие функции
- •2.1. Определение функции
- •2.2. Область видимости переменных
- •2.3. Параметры функции
- •2.4. Описание функции
- •2.5. Организация вызова функции
- •2.5. Передача параметров в функцию
- •Лекция 19 Многофайловые программы
- •1. Создание многофайловой программы. Создание и добавление головного файла в проект
- •3. Рекурсия
- •Лекция 20 Нахождение приближенного значения корня нелинейного уравнения
- •На отрезке [a;b] с заданной точностью eps
- •1.1. Метод дихотомии (половинного деления)
- •1.2. Метод хорд
- •1.3. Метод касательных (Ньютона)
- •Лекция 21 Нахождение приближенного значения определенного интеграла
- •1. Нахождение приближенного значения определенного интеграла с заданной точностью
- •Лекция 22 Объектно-ориентированное программирование
- •Полиморфизм – это свойство класса, позволяющее определить одно и то же по имени, но разное по смыслу действие. Основные этапы ооп:
- •Уточнённое имя принадлежит классу (т.Е. Компонентной) функции
- •Лекция 23 Объектно-ориентированное программирование
- •1. Конструкторы и деструкторы
- •Лекция 24 Объектно-ориентированное программирование
- •1. Компонентные данные и компонентные функции
- •1.1. Компонентные данные
- •1.2. Определение компонентных функций
- •Лекция 25 Объектно-ориентированное программирование
- •1. Свойства классов
- •1.1. Наследование классов
- •1.2. Полиморфизм
- •Библиографический список
2.2. Область видимости переменных
Каждая переменная, используемая в теле функции, должна быть объявлена в теле функции, в списке формальных параметров или вне функции. Переменные, используемые в функциях:
глобальные (внешние): объявленные в программе либо как внешние (т.е. до заголовка главной функции main() с ключевым словом extern), либо как статические внешние;
локальные (внутренние): объявленные, доступные и используемые только в теле функции;
формальные – переменные, объявленные в списке формальных параметров и доступные только в теле функции.
Объявление переменной вводит её имя в области видимости. Имя переменной может использоваться только в определенной части программы. Для локальной переменной, описанной в теле функции, область видимости начинается с точки объявления до конца тела функции. Если переменная объявлена в блоке (границы блока определяются открывающейся и закрывающейся фигурными скобками), то область видимости её имени определяется границами этого блока. Описание переменной в блоке может скрывать (прятать) её имя во внутреннем блоке. Это значит, что можно переопределять имя внутри блока для ссылки на другой объект. После выхода из блока имя вновь обретает свое прежнее значение:
int x; // глобальное x (по отношению к функции func())
void func()
{
int x; // первое локальное x “прячет” глобальное x
x = 1; // присвоить первому локальному x значение 1
{
int x; // прячет первое локальное x
x = 2; // присвоить второму локальному x значение 2
}
x = 3; // присвоить первому локальному x значение 3
}
int* p = &x; // взять адрес глобального x (по отношению к функции
// func())
Скрытие имен неизбежно при написании больших программ. В этом случае легко не заметить, что имя скрыто и некоторые ошибки, возникающие из-за этого, очень трудно обнаружить. Следовательно, от скрытия имен нужно уходить при написании программ. Использование для глобальных переменных часто употребляемых имен вроде i или x как раз и приводит к ошибкам, вроде переобъявления переменной.
При объявлении переменная создается, когда встречается её описание, и уничтожается, когда её имя выходит из области видимости. Переменные с глобальными именами создаются и инициализируются только один раз и “живут” до завершения программы. Объекты, объявленные с ключевым словом static, ведут себя именно таким образом:
void func()
{
int b = 1; // инициализируется при каждом вызове func()
static int c = 1; // инициализируется только один раз
printf("a = %i\n", a++);
printf("b = %i\n", b++);
printf("c = %i\n", c++);
}
extern int a = 1;
int main()
{
while (a<4)
func();
return 1;
}
Функция func() вызывается в цикле while и производит вывод на экран следующее:
a = 1 b = 1 c = 1
a = 2 b = 1 c = 2
a = 3 b = 1 c = 3
Явно неинициализированная статическая (static) переменная неявно инициализируется нулем.
2.3. Параметры функции
Параметры функции определяются списком формальных параметров. Область видимости формальных параметров – тело функции. Имена формальных параметров используются в операторах тела функции. Формальными параметрами могут быть только идентификаторы.
Кроме формальных параметров есть фактические. При вызове функции фактические параметры заменяют формальные, т.е. все формальные параметры в теле функции будут заменены на соответствующие фактические. Этот процесс называется передачей фактических параметров в функцию. Это делается для обмена фактическими данными между вызывающей и вызываемой функцией и получения фактического результата после завершения работы вызываемой функции для передачи его в вызывающую функцию.
Между списками формальных и фактических параметров при вызове функции должно быть соответствие:
количества формальных и фактических параметров;
последовательности формальных и соответствующих им фактических параметров (первому формальному параметру соответствует первый фактический, второму – второй и т. д.);
типов формальных и соответствующих им фактических параметров.
Сопоставление формальных и фактических параметров производится при каждом вызове функции: первому формальному параметру будет сопоставлен первый фактический, второму – второй и т.д. При передаче параметров нарушение соответствия по количеству или типам параметров может привести к серьезным ошибкам, например к нарушению границ переменных, в том числе массивов. Некорректная по смыслу передача фактических параметров может привести к неверному результату, хотя алгоритм, записанный в функции, будет верен.
Список формальных параметров может содержать нуль и более объявлений переменных, разделенных запятыми. При объявлении формальных параметров для каждого элемента списка формальных параметров объявляется имя и тип только этого параметра. Объявление каждого формального параметра имеет форму
<имя_типа_параметра> <идентификатор_параметра>
Здесь <имя_типа_параметра> – имя допустимого типа значений, стандартного или определенного пользователем; <идентификатор_параметра> – имя формального параметра.
Отсутствие имени типа параметра в списке формальных параметров является синтаксической ошибкой.