programmirovanie / ОПиАЯ_№3_7
.doc3.5 СТРУКТУРЫ
Составные типы:
-
массив;
-
множества (в Си не существует, только в 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;
}
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 имеет вид
-
N
-
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;
Jupit |
142.8 |
|
|
|
Mars |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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;
}