Лекция 18 Структуры
Цель: Познакомиться с типом STRUCT, научиться использовать структуру при решении задач
Структуры
Поля структуры
Инициализация и доступ
Инициализация и доступ
Массивы структур
Вопросы для самоконтроля:
368.50K
Категория: ПрограммированиеПрограммирование

Структуры данных

1. Лекция 18 Структуры

2. Цель: Познакомиться с типом STRUCT, научиться использовать структуру при решении задач

Цель: Познакомиться с типом STRUCT,
использовать структуру при решении задач
План:
1. Описание типа STRUCT.
2. Поля структуры.
3. Инициализация и доступ к данным.
4. Массивы структур.
научиться

3. Структуры

• Структура – это множество поименованных элементов в общем
случае разных типов.
• Объявление типа struct имеет вид:
struct имя_типа {описание элементов};
• Элементы структуры называются полями, могут иметь любой
тип, в том числе быть указателями на тип самой структуры.
struct book
{
char title[81];
char author[21];
int year;
int page;
float price;
};

4. Поля структуры

• Имена полей в структуре должны различаться.
• Имена элементов разных структур могут совпадать.
• Элементом структуры может быть другая структура.
struct pets { char name[10];
int age };
struct boy { char name[10];
int age;
pets pet };

5. Инициализация и доступ

• Элементы структуры в памяти запоминаются
последовательно, в том порядке, в котором они
объявляются: первому элементу соответствует
меньший адрес памяти, последнему - больший.
• Структурную
переменную
можно
инициализировать в операторе описания подобно
массиву:
struct book library= { “Язык С++”,
“Страуструп”,
1990,
500,
1000 };

6. Инициализация и доступ

• Доступ к элементам структуры осуществляется с
помощью операции точка:
library.author=”Павловская”;
// явная
инициализация
gets (library.author);
//ввод значения

7. Массивы структур

• Описание массива структур аналогично описанию
любого другого массива:
struct book catalog[10];
Каждый элемент массива catalog представляет собой
структуру типа book.
• Для доступа к элементу массива используется индекс,
который присоединяется к имени массива:
catalog[2].title
catalog[4].price
catalog[2].title[5]
3-й структуре
//6 элемент символьного массива в

8.

Известна информация о студентах: фамилия, группа,
оценки по 4 предметам. Найти средний балл каждого
студента и средний балл группы.
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Student{
char name[20];
char group[10];
int ball[4];
float sr_ball;
};
int main()
{
setlocale(LC_ALL, "Rus");
Student ki[5];
int k, ball_gr=0;

9.

for (int i = 0; i < 5; i++){
cout << "Введите имя: "; cin >> ki[i].name;
cout << "Введите группу: "; cin >> ki[i].group;
cout << "Введите оценки по предметам:"<<endl;
for (int j = 0; j < 4; j++){
cout << j+1<<" предмет: "; cin >> ki[i].ball[j]; }
}
for (int i = 0; i < 5; i++){
k = 0;
for (int j = 0; j < 4; j++){
k += ki[i].ball[j]; }
ki[i].sr_ball = float(k / 5);
}
k = 0;
for (int i = 0; i < 5; i++){
if (ki[i].sr_ball >= 4) k++;
ball_gr += ki[i].sr_ball;
}
cout << "Количество студентов: "<<k<<endl;
cout << "Средний балл группы: " << ball_gr<<endl;
}

10.

Ситуация, когда имя студента может содержать
несколько слов:
for (int i = 0; i < 5; i++){
cout << "Введите имя: "; gets_s(ki[i].name);
cout << "Введите группу: "; gets_s(ki[i].group);
cout << "Введите оценки по предметам:" << endl;
for (int j = 0; j < 4; j++){
cout << j + 1 << " предмет: "; cin >> ki[i].ball[j];
}
getchar();
}

11.

12.

Поле структуры – структура. Добавим дату рождения:
#include "stdafx.h"
#include <iostream>
using namespace std;
struct Date{
char month[12];
int day;
};
struct Student{
char name[20];
char group[10];
Date Bd;
int ball[4];
float sr_ball;
};
int main()
{
setlocale(LC_ALL, "Rus");
Student ki[5];
int k, ball_gr=0;
Date dy;

13.

for (int i = 0; i < 5; i++){
cout << "Введите имя: "; gets_s(ki[i].name);
cout << "Введите группу: "; gets_s(ki[i].group);
cout << "Введите день рождения: "<<endl;
cout << "Число: "; cin>>ki[i].Bd.day;
cout << "Месяц:" ; cin >> ki[i].Bd.month;
cout << "Введите оценки по предметам:" << endl;
for (int j = 0; j < 4; j++){
cout << j + 1 << " предмет: "; cin >> ki[i].ball[j];
getchar();}

14.

cout << "Введите нужную дату: ";
cin >> dy.day;
cin>>dy.month;
for (int i=0; i<5; i++)
if ((ki[i].Bd.day == dy.day) && (ki[i].Bd.month==dy.month))
cout<< ki[i].name << endl;
ОТВЕТ: ничего!

15.

struct Date{
int month;
int day;
};
struct Student{
char name[20];
char group[10];
Date Bd;
int ball[4];
float sr_ball;
};
………….
cout << "Введите нужную дату: ";
cin >> dy.day;
cin>>dy.month;
for (int i=0; i<5; i++)
if ((ki[i].Bd.day == dy.day) && (ki[i].Bd.month==dy.month))
cout<< ki[i].name << endl;

16.

17. Вопросы для самоконтроля:

1. Для каких целей мы используем тип struct? Приведите
примеры, когда рационально было бы использовать этот тип.
2. Как обратиться к полям структуры?
3. Можно ли создать массив структур?
4. Может ли поле структуры быть массивом?
5. Решить задачу: В задаче о студентах найдите количество и
фамилии студентов, средний балл которых выше среднего
балла группы.
English     Русский Правила