- •Часть 1
- •40 01 02 – 02 Информационные системы и технологии (в экономике)
- •Общие сведения Сведения об эумк
- •Методические рекомендации по изучению дисциплины
- •Рабочая учебная программа
- •Протокол согласования учебной программы по изучаемой учебной дисциплине с другими дисциплинами специальности
- •Содержание дисциплины
- •1. Название тем лекционных занятий, их содержание, объем в часах
- •3. Перечень тем лабораторных занятий, их содержание и объем в часах
- •Теоретический раздел
- •Тема № 1. Введение в программирование
- •Происхождение языка с.
- •Основные характеристики алгоритмического языка с
- •Область применения
- •Системы программирования
- •Исходные и объектные модули, процессы компиляции и связывания
- •Алфавит языка
- •Лексемы (cTokens)
- •Тема № 2. Выражения и операции языка Унарные операции
- •Бинарные операции
- •Условная трехместная операция
- •Операция явного преобразования типа
- •Приоритет операций. Порядок вычисления выражений.
- •Организация ввода-вывода информации
- •Тема № 3. Управляющие структуры. Ветвления и циклы
- •Операторы преобразования данных – это операторы присваивания и произвольные выражения, завершенные символом «;».
- •Операторы управления работой программы называют управляющими конструкциями программы.
- •Тема № 4. Организация данных. Массивы и указатели Массивы
- •Инициализация массивов
- •Указатели
- •Функции для выделения и освобождения памяти
- •Тема № 5. Функции. Символьные строки и функции над ними Определение функций
- •Описание функций
- •Вызов функции
- •Передача параметров
- •Указатели на функции
- •Массивы указателей на функции
- •Главная функция. Передача аргументов главной функции
- •Рекурсивные программы
- •Стандартные функции ввода-вывода строк
- •Стандартные функции обработки строк
- •Тема № 6. Классы памяти и препроцессор языка Си Локальные и глобальные переменные
- •Автоматические (локальные) переменные
- •Внешние (глобальные) переменные
- •Статические переменные
- •Регистровые переменные
- •Область видимости и функции
- •Препроцессор и его директивы
- •Тема № 7. Структуры Декларация структур
- •Инициализация структур
- •Доступ к элементам структур
- •Элементы-массивы
- •Массивы структур
- •Указатели на структуры
- •Доступ к элементам структуры, определенной через указатель
- •Структуры и функции
- •Объединения
- •Битовые поля
- •Практический раздел Виртуальные лабораторные работы
- •Лабораторная работа №1
- •Лабораторная работа №2
- •Контрольные работы
- •Содержание пояснительной записки.
- •Задание для контрольной работы №1
- •Задание для контрольной работы №2
- •Варианты индивидуальных заданий
- •Теоретические вопросы
- •Пример оформления титульного листа для виртуальных лабораторных работ
- •Пример оформления титульного листа для контрольных
Функции для выделения и освобождения памяти
|
Функция |
Прототип и краткое описание |
|
malloc |
void * malloc(unsigned s) Возвращает указатель на начало области (блока) динамической памяти длиной в s байт. При неудачном завершении возвращает значение NULL. |
|
calloc |
void * calloc(unsigned n, unsigned m) Возвращает указатель на начало области (блока) обнуленной динамической памяти, выделенной для размещения n элементов по m байт каждый. При неудачном завершении возвращает значение NULL. |
|
realloc |
void * realloc(void *bl, unsigned ns) Изменяет размер блока ранее выделенной динамической памяти до размера ns байт. bl – адрес начала изменяемого блока. Если bl равен NULL (память не выделялась), то функция выполняется как malloc. |
|
free |
void * free(void *bl) Освобождает ранее выделенный участок (блок) динамической памяти, адрес первого байта которого равен значению bl. |
Остановимся детальнее на рассмотрении оператора
matrix = (int* )malloc (n*m*sizeof(int));
Функция malloc(unsigned s) возвращает указатель (void *) на начало области памяти, данные в которой имеют тип void.
Вначале нужно создать указатель на область памяти (int *matrix;) и использовать его для функции malloc. Для задания фактического типа возвращаемое значение необходимо преобразовать к нужному типу при помощи оператора преобразования типа. В противном случае компилятор выдаст сообщение об ошибке.
Тема № 5. Функции. Символьные строки и функции над ними Определение функций
В С определены три производных типа:
массив
указатель
функция.
Функцию следует рассматривать с двух точек зрения:
функция – это один из производных типов данных,
функция – это минимальный исполняемый модуль программы на языке С.
Все функции в языке С имеют следующий формат определения:
<тип> <имя_функции> (<спецификация параметров>)
<тело функции>
Здесь
<тип> -
void (для функций, не возвращающих значения),
обозначение типа возвращаемого функцией значения.
<имя_функции> -
main для основной (главной) функции программы,
произвольно выбираемое программистом имя (идентификатор).
<спецификация параметров> -
это либо пусто,
либо список формальных параметров, каждый элемент которого имеет вид:
<обозначение_типа> <имя_параметра>
По сравнению с уже известными способами определения формальных параметров, существует возможность завершения списка параметров запятой с последующим многоточием «, …». Это означает, что при обращении к функции может быть указано большее число фактических параметров. Так, известные функции printf и scanf имеют прототипы:
int printf (const char *format, …);
int scanf (const char *format, …);
Указанные функции позволяют применять теоретически неограниченное количество фактических параметров. Обязательным является только параметр char *format – «форматная строка», внутри которой с помощью спецификаций преобразования определяется реальное количество параметров, участвующих в обменах.
<тело функции> - это часть определения функции, представляющая программный блок, т.е. ограниченный фигурными скобками фрагмент текста на языке С, размещенный непосредственно вслед за заголовком функции. Особенность С состоит в невозможности внутри тела функции определить другую функцию: определения функций не могут быть вложенными.
Для завершения (прерывания) работы функции служит оператор return. Существует две формы этого оператора:
return; // Возврат без передачи результата
return <выражение>; // Возврат значения
Первая форма используется для функций, перед именем которой в определении указан тип void. Для функций этого типа оператор return можно в тексте программы не писать вовсе – компилятор встроит его автоматически перед закрывающей фигурной скобкой тела функции.
<выражение> во второй форме оператора должно иметь тип, совпадающий с типом функции или допускающий автоматическое преобразование к типу возвращаемого функцией значения.
