Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции по проге / 14_Типы данных, определяемые пользователем

.pdf
Скачиваний:
32
Добавлен:
14.03.2016
Размер:
224.69 Кб
Скачать

Пример инициализации переменныхструктур

struct student Iam = {"Иванов И.И.", 1, 99.9};

struct student_ext other =

{

"Петров А.П.", 1, 21.0,

 

{ // массив subjects

 

{"Физика", 12},

// предмет 1

{"Программирование", 30}

// предмет 2

}

 

};

 

21

Операции над структурами

=

операция присваивания

. ->

обращение к полю структуры

Структуру можно присвоить другой структуре того же типа; при этом происходит поэлементное копирование данных

22

Обращение к полю структуры

<переменная-структура>.<имя поля> <указатель на структуру> -> <имя поля>

Операция обращения к полю структуры возвращает l-value выражение, т.е. полю структуры можно присваивать значения

23

Обращение к полю структуры в общем случае

<выражение 1>.<имя поля> <выражение 2> -> <имя поля>

где

<выражение 1> выражение, возвращающее структуру,

<выражение 2> выражение, возвращающее указатель на структуру

24

Примеры обращения к полю структуры

struct student

 

{

 

 

char

FIO[41];

// ФИО

int

course;

// номер курса

float

avg_rating;

// средний рейтинг

}

 

 

students[10];

Обращение к полю структуры, которая является элементом массива

 

strcpy(students[0].FIO, "Петров А.П.");

 

 

 

имя поля структуры

25

 

 

 

 

выражение, возвращающее структуру

Примеры обращения к полю структуры

struct student_ext

 

{

 

 

char

FIO[41];

// ФИО

struct

 

 

{

 

 

char name[36];

// название предмета

int

grade;

// оценка

}subjects[2];

}Iam;

Обращение к полю структуры, которая является полем другой структуры

Iam.subjects[1].grade = 99;

 

имя поля структуры

 

 

 

 

26

выражение, возвращающее структуру

Примеры обращения к полю структуры

struct student

 

{

 

 

char

FIO[41];

// ФИО

int

course;

// номер курса

float

avg_rating;

// средний рейтинг

};

struct student *getStudent(int group, int index);

Обращение к полю структуры, указатель на которую возвращается из функции

 

getStudent(160,i)->course += 1;

 

 

 

 

 

27

 

 

имя поля структуры

 

 

 

 

выражение, возвращающее указатель на структуру

Задание

Увеличить на единицу курс студента Iam

Напечатать на экране фамилию студента Iam

У студента other задать первым предметом философию и рейтинг равный 100 баллов

Напечатать на экране фамилию и средний рейтинг студента topStudent, имеющего лучшие показатели успеваемости

28

Пример обращения к полям структуры

Iam.course++; /* у операции "точка" приоритет выше, чем у операции ++ */

puts( Iam.FIO );

strcpy( other.subjects[0].name, "Философия");

other.subjects[0].grade = 100;

printf("%s %f", topStudent->FIO, topStudent->avg_rating);

29

Задание

Напечатать на экране фамилию и средний рейтинг студента topStudent, имеющего лучшие показатели успеваемости, используя операцию "точка"

30