Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тема 6,7,8 базовый Си.docx
Скачиваний:
4
Добавлен:
16.11.2018
Размер:
117.96 Кб
Скачать

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:

  1. эстетическая : одним именем заменяется сложная декларация типа данных;

  2. стремление сделать текст программы более ясным . Например, вместо

  3. struct list * pstr; / * указатель на структуру типа list * /

можно объявить:

typedef struct list * Plist;

/ * указатель ( P List) на структуру типа list * /

Plist pstr;

  1. 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ю с другими функциями. В других языках программирования вспомогательным алгоритмам отвечают: подпрограммы языка Бейсик, процедуры и функции языка Паскаль.