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

programmirovanie / ОПиАЯ_№3_7

.doc
Скачиваний:
33
Добавлен:
03.03.2016
Размер:
79.36 Кб
Скачать

3.5 СТРУКТУРЫ

Составные типы:

  • массив;

  • множества (в Си не существует, только в Pascal);

  • записи(структуры);

  • файлы;

Структурная переменная- конечный набор логически связанных элементов(полей), возможно, различных типов, упорядоченных в заданном программистском смысле и объявленных общим именем

Приемная карточка студента:

Student

личный номер

Ф.И.О.

Пол

Год рождения

Адрес

Телефон

ОБЪЯВЛЕНИЕ структурной переменной:

  1. Определение структурного типа (т.е. задание шаблона структуры)

  2. Собственно объявление переменной.

Шаблон предоставляет компилятору информацию, необходимую для резервирования места в памяти и организации доступа к полям структурной переменной. Шаблон именуется. Объявление структурной переменной состоит из имени шаблона и имени структурной переменной.

Для доступа к полям структуры применяют операцию «.» Она формирует ссылку на нужное поле из имени структурной переменной и имени поля, т.е.

Имя_структурной_переменной.имя_поля

Может быть любой тип, в т.ч. структурный; обладает всеми свойствами обычной переменной.

ОПРЕДЕЛЕНИЕ ШАБЛОНА

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

    nme

  • 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[0].name = “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;

}