- •Тема 6. Структуры
- •6.1 Понятие структуры в языке Си
- •6.2 Объявление типа структуры
- •6.3 Декларация переменных структурного типа
- •6.4 Доступ к элементам структурной переменной
- •6.5 Массивы структур
- •6.6 Оператор sizeof
- •6.7 Декларация typedef
- •7.2 Определение функции
- •7.3 Функции, вызывающие, I функции, вызываемые
- •7.4 Связи по данным между функциями
- •7.4.1 Вызов функции
- •7.4.2 Инструкция return (возврат)
- •7.5 Аппарат формальных и фактических аргументов
- •Входные аргументы;
- •Выходные аргументы;
- •Аргументы, которые обновляются.
- •7.6 Прототип функции
- •Тема 8. Передача аргументов функций
- •8.1 Способы передачи аргументов
- •8.1.1 Передача аргументов по значению
- •8.1.2 Передача аргументов по имени
- •8.1.3 Передача аргументов по ссылке
- •8.2 Особенности передачи аргументов в языке Си
- •8.3 Особые случаи передачи аргументов
- •8.3.1 Передача аргументом одномерного массива
- •Пример 6: сумма елеметiв массива (вариант 1).
- •Пример 7: сумма елеметiв массива (вариант 2).
- •8.3.2 Передача аргументом многомерного массива
- •8.3.3 Передача аргументом структуры
- •8.4 Аргументы командной строки
6.5 Массивы структур
Структуры можно объединять в массивы ( получаем таблицу ):
Пример 10: список студентов с результатами экзаменов.
# Define KST 35
struct list
{Char * fio;
int math;
int phys;
int r_l;
};
struct list group [KST];
Пример 11: Объявление таблицы с инициализацией.
struct list gr [] =
{
{"Андреев", 5, 5, 5},
{"Борисенко", 5, 4, 4},
..........
{"Якименко", 4, 4, 4}
};
6.6 Оператор sizeof
В декларации списка студентов мы определили размер этого списка (массива структур) с помощью поименованной константы KST:
# Define KST 35
Еще один вариант определения размера этого массива такой. Размер этого массива полностью определен во время компляцiи I дорвнюе произведения количества элементов массива на размер его отдельного элемента, поэтому число элементов массива вычисляется:
число элементов массива = <размер> group / <размер> struct list
В языке Си есть оператор sizeof (унарный, префiксний, правоасоцiативний, высший приоритет). Он работает во время компляцiи. Он применяется для исчисления размера любого объекта:
-
sizeof <обкт>
-
sizeof (<имя типа данных>)
Результат этого оператора целое, равной размеру (в байтах) объекта или типа данных.
Объектом может быть:
-
переменная;
-
массив;
-
структура.
Именем типа данных может быть:
-
имя базового типа (int, long, float, ...);
-
имя производной типа (структуры или указателя).
Поэтому в операторi препроцессору define возможные записи:
# Define KST (sizeof group / sizeof (struct list))
# Define KST (sizeof group / sizeof group [0])
Второй оператор содержит не <имя типа данных>, а объект (первый элемент массива group).
6.7 Декларация typedef
Эта декларация позволяет давать новые имена типам данных.
Синтаксис:
typedef <старое имя типа> <новое имя типа>;
Семантика:
<Старое имя> i <новое имя> становятся синонимами.
Пример 12: объявление таблицы с результами экзаменов студентов.
typedef INT Ekz ;
typedef CHAR * String ;
typedef Struct List
{String fio;
Ekz math;
Ekz phys;
Ekz r_l;
} Liststud ;
Liststud Group [KST];
Этот пример iлюстуе использования того имени типа данных, который был декларирован в typedef .
Синтаксис:
<Тип, объявленный typedef> <список змнних>
Принято имя типа-синоньма, объявление в typedef, начинать с большой буквы, чтобы отличать его от базовых типов.
Причины использования typedef:
-
эстетическая : одним именем заменяется сложная декларация типа данных;
-
стремление сделать текст программы более ясным . Например, вместо
-
struct list * pstr; / * указатель на структуру типа list * /
можно объявить:
typedef struct list * Plist;
/ * указатель ( P List) на структуру типа list * /
Plist pstr;
-
typedef використують для обеспечения машинной независимости программы на языке Си . Например, зависят от реализации величины цiлочисельних типов данных ( int, short, long ) i действительных ( double, long double ). При переносi на другую платформу меняют только декларации typedef , а не декларации всех переменных (целых i действительных).
typedef не создает новый тип данных, а создает только синоним для существующего типа данных.
Тема 7. Функции i структура программы
Цель: познакомиться с понятием функции в языке Си, со средствами Ci для определения функции, с типами функций по управлению, по способам связи между функциями, с понятием вызова функции i инструкцией return , с аппаратом формальных i фактических аргументов, с понятием прототипа функции .
7.1 Понятие функции в языке Си
7.2 Определение функции
7.3 Функции, вызывающие, i функции, вызываемые
7.4 Связи по данным между функциями
7.4.1 Вызов функции
7.4.2 Инструкция return (возврат)
7.5 Аппарат формальных и фактических аргументов
7.6 Прототип функции
7.1 Понятие функции в языке Си
Вспомним универсальный метод решения задач на ЭВМ - метод пошаговой детализации. С его помощью входное задача разбивается на пiдзадачi, между этими пiдзадачамы распределяются обязанности i определяется, как эти пiдзадачi взаимодействуют:
задача {
-
пiдзадача 1
-
пiдзадача 2
-
.. ...........
-
пiдзадача n}
На этапе разработки алгоритма каждом вспомогательного метода мы ставим в соответствие вспомогательный алгоритм. В языке Си вспомогательном алгоритма будет соответствовать понятию функция , которая будет выполнять свои обязанности фиксированным способом i выполнять взамодiю с другими функциями. В других языках программирования вспомогательным алгоритмам отвечают: подпрограммы языка Бейсик, процедуры и функции языка Паскаль.
