Similar presentations:
Структуры данных
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. Решить задачу: В задаче о студентах найдите количество и
фамилии студентов, средний балл которых выше среднего
балла группы.