programmirovanie / ОПиАЯ_№3_8_структуры_слайды
.doc3.7 СТРУКТУРЫ
Составные типы:
-
массив;
-
множества (в Си не существует,
только в Pascal);
-
записи(структуры);
-
файлы;
Структурная переменная- конечный набор
логически связанных элементов(полей),
возможно, различных типов,
упорядоченных в заданном программистском
смысле и объявленных общим именем
Приемная карточка студента:
Student
личный номер
Ф.И.О.
Пол
Год рождения
Адрес
Телефон
ОБЪЯВЛЕНИЕ структурной переменной:
-
Определение структурного типа
(т.е. задание шаблона структуры)
-
Собственно объявление переменной.
Шаблон предоставляет компилятору
информацию, необходимую для
резервирования места в памяти и
организации доступа к полям структурной
переменной. Шаблон именуется.
Объявление структурной переменной
состоит из имени шаблона и имени
структурной переменной.
Для доступа к полям структуры применяют
операцию ”.”
Она формирует ссылку на нужное поле
из имени структурной переменной и
имени поля, т.е.
Имя_структурной_переменной.имя_поля
Может быть любой тип, в т.ч. структурный; обладает всеми свойствами обычной переменной.
ОПРЕДЕЛЕНИЕ ШАБЛОНА
struct [имя шаблона]
{тип_1 имя_поля_1,…,имя_поля_k;
тип_2…;
…
тип_n…;
};
Размер зарезервированной памяти определяется следующим образом:
k = sizeof (struct имя_шаблона);
ПРИМЕР
Разработать базу данных для планет
Солнечной системы
Name: Jupiter.
Diam: 142.700 km
D_from_sun: 778.3 million km
Orbital_period: 11.9 yr (период обращения)
Rot_period: 9.925 yr (период обращения
вокруг оси)
Тип структуры planet_S
struct planet_S
{char name[10];
double diam,
d_sun,
orbital_period,
rot_period;
};
struct planet_S plt[15];
1) plt[1].name = “Mars”;
plt[1].diam = 10000;
…
plt[2].name = “Aurora”;
plt[2].diam = 1000;
…
2) Инициализация
struct planet_S plt[]=
{ {“Mars”, 10000, 150000, 1.7, 25},
{“Aurora”, 1000, 30000, 1.1, 15},
{“____”, xx.xx, xx.xx, xx.xx, x.xx,}
}
3) Ввод с клавиатуры
Определяем тип структуры planet_t
typedef
struct planet_S
{
char name1[10];
double diam1, d_sun1, orbital_per1, a_rot_t1;
} planet_t;
5 компонентов – 1 символьный, 4 double
planet_t c_pl,
p_pl,
blank_planet=
{“_”, 0, 0, 0, 0};
c_pl, p_pl, blank_planet – структурные
переменные(имеют формат типа planet_t)
blank_planet имеет вид
-
.
-
.d
0.0
iam -
.d
0.0
_sun1 -
.o
0.0
rbital_per1 -
.
0.0
a_rot_t1
typedef struct
planet_S
{ char name1[10];
double diam1,
d_sun1,
orbital_per1,
a_rot_t1;
} planet_t;
struct planet_s c[10];
Jupit |
142.8 |
|
|
|
Mars |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
= “Jupit”
c[1].name
= “Mars”
c[1].diam
= 142.8
STRUC1
/*#include <stdlib.h>*/
/*#include <string.h>*/
#include <conio.h>
main()
{
/*typedef*/
struct pl_t
{
char name[10];
double d,
d_s,
orb,
a_rot;
};
double r;
struct pl_t plt[10];
plt[0].d=10;
plt[0].d_s=5;
printf("\n vvod name \n");
gets(plt[0].name);
printf("\n vvod orb");
scanf("%lf",&r);
plt[0].orb=r;
printf("\n plt[0].name %s ",plt[0].name);
printf("\n plt[0].d =%f",plt[0].d);
printf("\n plt[0].orb %lf",plt[0].orb);
getch();
}
STRUC2
#include <stdio.h>
/*#include <stdlib.h>*/
/*#include <string.h>*/
#include <conio.h>
main()
{
typedef
struct pl_s
{
char name[10];
double d,
d_s,
orb,
a_rot;
} pl_t;
double r;
pl_t plt[10];
plt[0].d=10;
plt[0].d_s=5;
printf("\n vvod name \n");
gets(plt[0].name);
printf("\n vvod orb");
scanf("%lf",&r);
plt[0].orb=r;
printf("\n plt[0].name %s ",plt[0].name);
printf("\n plt[0].d =%f",plt[0].d);
printf("\n plt[0].orb %lf",plt[0].orb);
getch();
}
STRUC3
#include <stdio.h>
/*#include <stdlib.h>*/
/*#include <string.h>*/
#include <conio.h>
/*void pr_pl(pl_t plr);*/
typedef
struct pl_s
{ /*Передача параметров для одной строки
char name[10]; без изменения*/
double d,
d_s,
orb,
a_rot;
} pl_t;
void pr_pl(pl_t plr);
main()
{
double r;
pl_t plt[10];
plt[0].d=10;
plt[0].d_s=5;
printf("\n vvod name \n");
gets(plt[0].name);
printf("\n vvod orb");
scanf("%lf",&r);
plt[0].orb=r;
pr_pl(plt[0]);
printf("\n plt[0].name %s ",plt[0].name);
printf("\n plt[0].d =%f",plt[0].d);
printf("\n plt[0].orb %lf",plt[0].orb);
getch();
}
void pr_pl(pl_t pl1)
{
printf("print_pl pl1.d %f",pl1.d);
}
STRUC4
#include <stdio.h>
/*#include <stdlib.h>*/
/*#include <string.h>*/
#include <conio.h>
/*void pr_pl(pl_t plr);*/
typedef
struct pl_s передача параметров с изменением
{ с изменением
char name[10]; для одной структуры
double d,
d_s,
orb,
a_rot;
} pl_t;
void pr_pl(pl_t *plr);
main()
{
double r;
pl_t plt[10];
plt[0].d=10;
plt[0].d_s=5;
printf("\n vvod name \n");
gets(plt[0].name);
printf("\n vvod orb");
scanf("%lf",&r);
plt[0].orb=r;
pr_pl(&plt[0]);
printf("\n plt[0].name %s ",plt[0].name);
printf("\n plt[0].d =%f",plt[0].d);
printf("\n plt[0].orb %lf",plt[0].orb);
getch();
}
void pr_pl(pl_t *pl1)
{
printf("print_pl pl1.d %f",(*pl1).d);
(*pl1).d=20;
}
STRUC5
#include <stdio.h>
/*#include <stdlib.h>*/
/*#include <string.h>*/
#include <conio.h>
/*void pr_pl(pl_t plr);*/
typedef
struct pl_s
{ Передача параметров
char name[10]; для
double d, всей структуры
d_s,
orb,
a_rot;
} pl_t[10];
void pr_pl(pl_t *plr);
main()
{
double r;
pl_t plt;
plt[0].d=10;
plt[0].d_s=5;
printf("\n vvod name \n");
gets(plt[0].name);
printf("\n vvod orb");
scanf("%lf",&r);
plt[0].orb=r;
pr_pl(&plt);
printf("\n plt[0].name %s ",plt[0].name);
printf("\n plt[0].d =%f",plt[0].d);
printf("\n plt[0].orb %lf",plt[0].orb);
getch();
}
void pr_pl(pl_t *pl1)
{
printf("print_pl pl1.d %f",(*pl1[0]).d);
(*pl1)[0].d=20;
}