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

Id_структуры . Id_поля

или

(*указатель_структуры) . ID_поля

2) при помощи операции косвенной адресации (–>) в виде

указатель_структуры –> ID_поля

или

(&ID_структуры) –> ID_поля

Если в программе созданы объекты объявленного ранее шаблона:

Stud_Type s1, *s2;

то к полям объекта s1 можно обратиться следующим образом:

s1. Number, s1. Fio, s1. S_b;

или

(&s1) –> Number, (&s1) –> Fio, (&s1) –> S_b;

а к полям объекта, адрес которого s2:

s2 –> Number, s2 –> Fio, s2 –> S_b;

или

(*s2) . Number, (*s2) . Fio, (*s2) . S_b;

  1. Массивы структур.

Структурный тип «struct ID_структуры», как правило, используют для декларации массивов, элементами которых являются структурные переменные. Это позволяет создавать программы, оперирующие с простейшими базами данных.

Например, массив структур, объявленного ранее типа:

struct Person spisok[100];

причем ключевое слово struct можно не писать. Декларацию массива можно выполнить и в описании шаблона следующим образом:

struct Рerson {

char fio[40];

int day, month, year;

} spisok[100];

В данном случае обращение к полю, например, day элемента массива с индексом i может быть выполнено одним из следующих способов:

spisok[i].day=22; *(spisok+i).day=22; (spisok+i)–>day=22;

Пример. Приведем часть программы, иллюстрирующей создание массива структур и передачу структурных данных в функции:

struct Spisok {

char Fio[20];

double S_Bal;

};

// Описание прототипов функций пользователя

void Out(int, Spisok);

void In(int, Spisok *);

void main(void)

{

Spisok Stud[50], *sved;

. . .

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

Vvod(i, &Stud[i]);

puts("\n Spisok Students");

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

Out(i+1, Stud[i]);

. . .

}

// Функция вывода на экран данных одного элемента структуры

void Out(int nom, Spisok dan) {

printf("\n %3d – %20s %4.2lf ",nom, dan.Fio, dan.S_Bal);

}

// Функция ввода данных одного элемента структуры

void In (int nom, Spisok *sved) {

printf("\n Введите сведения %d : ", nom+1);

fflush(stdin);

puts("\n ФИО – ");

gets(sved–>Fio);

puts("\n Средний балл – ");

scanf(“%lf”, &sved–>S_Bal);

}

  1. Передача членов структур функциям. Передача целых структур функциям.

При передаче структур в функцию в качестве типа параметра неоходимо указвать имя структурного типа.

void func(key A){printf("Слово %s встречается %d раз",A[i].word,A[i].count); }

Передача масствов структур в функцию осуществляется как и передача обычных массивов.

Пример. Ввести изфайлаinputfile.dat информацию числе вхожденийключевого слова в текст программы на С. Вывести полученную информацию в файл output.dat.

#include

#include

struct key {// информация числе вхождений ключевого слова в текст программы на С

char word[10];// ключевое слово

int count;//число вхождений

};

key* input(int* n, char* fileName){// ввод из файла

//n - размер массива

//fileName - имя файла

// функция возвращает указатель на массив структур в динамической памяти

key* A;

FILE *fp;

// открытие файла на чтение

if ((fp = fopen(fileName, "r")) == NULL)

{ printf("Нельзя открыть %s\n", "inputfile.dat");

return NULL;

}

// ввод размера массива структур

fscanf(fp,"%d",n);

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

A=(key*)calloc(*n,sizeof(key));

// ввод значений

for (int i=0;i<*n;i++){

fscanf(fp,"%s",&A[i].word);

fscanf(fp,"%d",&A[i].count);

}

fclose(fp);

return A;

}

void output(int n, key* A, char* fileName){// вывод в файл массива структур

//n - размер массива

//А - указатель на массив структур

//fileName - имя файла

FILE *fp;

if ((fp = fopen("outputfile.dat", "w")) == NULL)

{ printf("Нельзя открыть %s\n", "outputfile.dat");

return;

}

// вывод значение

for (int i=0;i< n;i++){

fprintf(fp,"%s ",A[i].word);

fprintf(fp,"%d ",A[i].count);

}

fclose(fp);

}

void main()

{ key *A; //указатель на массив структур

int n; // кол-во элементов

A=input(&n,"inputfile.dat");

output(n,A,"outputfile.dat");

free(A);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]