- •Часть 1
- •40 01 02 – 02 Информационные системы и технологии (в экономике)
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах
- •3. Перечень тем лабораторных занятий, их содержание и объем в часах
- •Теоретический раздел
- •Тема № 1. Введение в программирование
- •Происхождение языка с.
- •Основные характеристики алгоритмического языка с
- •Область применения
- •Системы программирования
- •Исходные и объектные модули, процессы компиляции и связывания
- •Алфавит языка
- •Лексемы (cTokens)
- •Тема № 2. Выражения и операции языка Унарные операции
- •Бинарные операции
- •Условная трехместная операция
- •Операция явного преобразования типа
- •Приоритет операций. Порядок вычисления выражений.
- •Организация ввода-вывода информации
- •Тема № 3. Управляющие структуры. Ветвления и циклы
- •Операторы преобразования данных – это операторы присваивания и произвольные выражения, завершенные символом «;».
- •Операторы управления работой программы называют управляющими конструкциями программы.
- •Тема № 4. Организация данных. Массивы и указатели Массивы
- •Инициализация массивов
- •Указатели
- •Функции для выделения и освобождения памяти
- •Тема № 5. Функции. Символьные строки и функции над ними Определение функций
- •Описание функций
- •Вызов функции
- •Передача параметров
- •Указатели на функции
- •Массивы указателей на функции
- •Главная функция. Передача аргументов главной функции
- •Рекурсивные программы
- •Стандартные функции ввода-вывода строк
- •Стандартные функции обработки строк
- •Тема № 6. Классы памяти и препроцессор языка Си Локальные и глобальные переменные
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Регистровые переменные
- •Область видимости и функции
- •Препроцессор и его директивы
- •Тема № 7. Структуры Декларация структур
- •Инициализация структур
- •Доступ к элементам структур
- •Элементы-массивы
- •Массивы структур
- •Указатели на структуры
- •Доступ к элементам структуры, определенной через указатель
- •Структуры и функции
- •Объединения
- •Битовые поля
- •Практический раздел Виртуальные лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Контрольные работы
- •Содержание пояснительной записки.
- •Задание для контрольной работы №1
- •Задание для контрольной работы №2
- •Варианты индивидуальных заданий
- •Теоретические вопросы
- •Пример оформления титульного листа для виртуальных лабораторных работ
- •Пример оформления титульного листа для контрольных
Регистровые переменные
Регистровые переменные являются временными, их значения сохраняются в регистрах, если последние доступны. Доступ к регистровым переменным более быстрый. В регистрах можно сохранять любые переменные, если размер занимаемой ими памяти не превышает разрядности регистра. Если компилятор не может сохранить переменные в регистрах, он трактует их как автоматические. Областью действия является блок. Операция получения адреса & не применима к регистровым переменным.
{
register int y;
…
}
Область видимости и функции
Функции также имеют классы памяти. Функция может быть внешней (по умолчанию) либо статической. К внешней функции имеют доступ функции из других модулей, а статическая функция может использоваться только в файле, который содержит ее описание.
Препроцессор и его директивы
В интегрированную среду Visual C++, как обязательный компонент, входит препроцессор. Назначение препроцессора – анализ и обработка исходного текста программы до ее компиляции. Используя возможности прекомпиляции, можно создавать программы, компилируемые по-разному, в зависимости от текущих потребностей (например, строя или не строя отладочную информацию
Управление работой препроцессора осуществляется при помощи директив, включаемых в исходный код программы. В результате выполнения всех директив препроцессора, образуется новый вариант исходного кода программы, который затем компилируется. Итак, на входе препроцессора – текст с препроцессорными директивами, на выходе препроцессора – текст без препроцессорных директив.
Поясним, что понимается под препроцессорными лексемами или лексемами препроцессора (preprocessing token). К ним относятся символьные константы, имена включаемых файлов, идентификаторы, знаки операций, препроцессорные числа, знаки препинания, строковые константы (строки) и любые символы, отличные от пробела.
Директива #include
Эта директива предназначена для включения в исходный текст программы исходного кода из указанных файлов, например, заголовочных файлов. В коде программы строка, содержащая директиву, заменяется содержимым файла (одна строка – 8 страниц).
Допустимо вложение директив, т.е. в файле, на который указывает директива #include могут также использоваться директивы #include на другие файлы. Однако глубина такого вложения ограничена. Обычно допускается до 10 уровней вложения.
Существенный момент в использовании директивы #include состоит в способе задания имени файла:
#include <stdio.h>
#include “myhead.h”
если имя файла заключено в кавычки – файл будет искаться в том же каталоге, в котором находится файл программы, а если в угловые скобки – то сначала поиск осуществляется в специальном стандартном каталоге, определяемом при установке на компьютере системы программирования.
Директива #define.
Эта директива предназначена для решения двух задач:
1. сокращения длины кода
2. реализации макроопределений функций.
Первая задача решается следующим образом. Управляющая строка имеет вид
#define <идентификатор> <последовательность лексем>
заставляет препроцессор заменять идентификатор на последовательность лексем. Пробелы в начале и конце последовательности выбрасываются.
Вторая задача - реализация макроопределений функций, обеспечивается следующей конструкцией:
#define <имя макроса>(<параметры>) <выражение>
Например, определение
#define АВС(а,в) ((а)>(в) ? (а)-(в) : (в)-(а))
задает макрос, возвращающий абсолютное значение разности его аргументов. В отличие от функции, делающей то же самое, аргументы и возвращаемое значение здесь могут иметь любой арифметический тип, и даже быть указателями (так как здесь не задаются типы аргументов).
Управляющая строка вида #undef предписывает препроцоссору забыть определение, данное идентификатору.
Другие директивы препроцессора: #if, #ifdef, #ifndef, #else, #endif
Командные строки препроцессора используются для условной компиляции различных частей исходного текста в зависимости от внешних условий.
#if <константное выражение>
Пример
#if ABC+3
Истина, если константное выражение ABC+3 не равно нулю.
#ifdef <идентификатор>
Пример
#ifdef ABC
Истина, если идентификатор ABC определен ранее командой # define.
#ifndef <идентификатор>
Пример
#ifndef ABC
Истина, если идентификатор ABC не определен в настоящий момент.
#else
…
#endif
Если предшествующие проверки: #if, #ifdef, #ifndef дают значение Истина, то строки от #else до #endif игнорируются при компиляции.
Если эти проверки дают значение Ложь, то строки от проверки до #else игнорируются. Команда #endif обозначает конец условной компиляции.
