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

Void main(void)

{

struct{

char fio[20]; /* фамилия */

long num; /* телефон */

} tel1, tel2;

clrscr();

puts("введите фио абонента-");

gets(tel1.fio);

puts("введите его номер-");

scanf("%ld",&tel1.num);

tel2=tel1; /* нельзя так же сравнивать структуры */

puts("Введено:");

printf("Фамилия :%s номер: %ld\n",tel2.fio,tel2.num);

}

Пример 2.

/* Динамическое выделение памяти для структуры */

/* Обращение к элементам структуры через указатель */

#include <stdio.h>

#include <conio.h>

#include <alloc.h>

struct sprav {

char fio[20];

long num;

};

Void main(void)

{

struct sprav *tel1, *tel2;

clrscr();

/* Выделение памяти для структуры */

tel1=(struct sprav *)malloc(sizeof(struct sprav));

tel2=(struct sprav *)malloc(sizeof(struct sprav));

puts("введите фио абонента-");

gets(tel1->fio);

puts("введите его номер-");

scanf("%ld",&tel1->num);

*tel2= *tel1;

puts("Введено:");

printf("Фамилия :%s номер: %ld\n",(*tel2).fio,(*tel2).num);

}

Массив структур

Пример 3.

/* Массив структур. Обращение к элементам структуры через */

/* имя элемента массива */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#define SPRAV struct sprav

Void main(void)

{

SPRAV{

char fio[20];

long num;

};

SPRAV tel[5]; /* массив структур - 5 элементов */

char fio_tek[20];

int i;

clrscr();

/* ввод данных в массив структур */

for(i=0; i<5; i++)

{

puts("введите фио абонента-");

gets(tel[i].fio);

puts("введите его номер-");

scanf("%ld",&tel[i].num);

getchar();

}

puts("Выбор телефона по фамилии");

gets(fio_tek);

/* поиск структуры по фамилии абонента */

for(i=0; i<5; i++)

if(!strcmp(fio_tek,tel[i].fio)) break;

if(i!=5) /* цикл закончен по break */

printf("номер абонента %s равен %ld\n",fio_tek, \

tel[i].num);

else /* цикл выполнился полностью */

puts("Абонент не найден");

}

Пример 4.

/* Массив структур. Память выделяется динамически. */

/* Обращение к элементам структуры через указатель */

#include <stdio.h>

#include <conio.h>

#include <string.h>

#include <alloc.h>

typedef struct{

char fio[20];

long num;

} TEL;

Void main(void)

{

TEL *tel;

char fio_tek[20];

int i;

clrscr();

/* Выделение памяти для массива - 3 элемента */

tel=(TEL *)malloc(sizeof(TEL)*3);

for(i=0; i<3; i++)

{

puts("введите фио абонента-");

gets((tel+i)->fio);

puts("введите его номер-");

scanf("%ld",&(tel+i)->num);

getchar();

}

puts("Выбор телефона по фамилии");

gets(fio_tek);

for(i=0; i<5; i++,tel++)

if(!strcmp(fio_tek,tel->fio)) break;

if(i!=5)

printf("номер абонента %s равен %ld\n",fio_tek, \

tel->num);

else

puts("Абонент не найден");

}

Передача структуры в функцию

Непосредственный доступ к компонентам структуры - плохой стиль программирования. Все операции, которые разрешены применительно к структуре, должны быть при этом реализованы в виде отдельных функций. Не все компиляторы языка Си позволяют передавать структуры в функцию по значению, поэтому в примерах передача структуры идет через указатель.

Пример 5.

/* Передача структуры в функцию через указатель на структуру */

/* Определение комплексного числа через структуру и действия */

/* над комплексными числами ( ввод, вывод, вычисление суммы) */

#include <stdio.h>

typedef struct { float a; /* действительная часть */

float b; /* мнимая часть */

} COMPLEX;

void vvod(COMPLEX *,float,float);

void sum(COMPLEX *,COMPLEX *,COMPLEX *);

void out(COMPLEX *);

Соседние файлы в папке Лаб по С и С++