Массивы структур
Массив структур – это массив, каждый элемент которого является структурой. В памяти элементы массива структур размещаются последовательно.
Массивы структур широко используются для структурной организации данных в прикладных программах и системном программном обеспечении.
Из элементов структурного типа можно организовать массивы также как из элементов стандартного типа. Для объявления массива структур следует сначала определить структуру, а затем объявить массив переменных данного типа. Как и массивы переменных, массивы структур индексируются с нуля.
Например:
#include <iostream.h>
void main(){
struct Student {
char name[30];
char group[10];
float rating;
};
Student mas[35]; //массив структур
//ввод значений массива
for(int i=0;i<35;i++){
cout << "\nВведите имя: ";cin >> mas[i].name;
cout << "\nВведите группу: ";cin >> mas[i].group;
cout << "\nВведите рейтинг: ";cin >> mas[i].rating;
}
//вывод студентов, у которых рейтинг меньше 3
cout << "Рейтинг < 3: ";
for(i=0; i<35; i++)
if(mas[i].rating <3)
cout << "\n" << mas[i].name;
}
Пример 4. Программа определяет и печатает название самой высокой вершины из списка
#include <stdio.h>
struct peak {
char name[15];//название вершины
int height; //высота вершины
} list[30]; //массив структурного типа peak
int N;
void InputDate();
void PrintMaxPic();
void main() {
InputDate();
printf("\n");
PrintMaxPic();
}
void InputDate() {
int i;
printf("Введите количество вершин: "); scanf("%d",&N);
printf("\n");
for (i=0; i<N; i++) {
printf("Название: ");
scanf("%s",&list[i].name);
printf("Вершина: ");
scanf("%d",&list[i].height);
}
}
void PrintMaxPic(){
int i,max=list[0].height,num=0;
for (i=1; i<N; i++)
if (list[i].height>max) {
max=list[i].height;
num=i;
}
printf("Самая высокая вершина - %s, она равна %d",
list[num].name,max);
}
Пример 5. Программа инициализирует массив структур, сортирует и выводит его на печать.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#define num 5
struct {
char name[15];
int grade;
} x[num];
void init(void);
int sorts(const void *p1, const void *p2);
void print(void);
void main(){
printf("\n Введите имена:\n");
init();
printf("\n Первоначальный массив\n");
print();
printf("\n Отсортированный массив\n");
qsort((void *)x, num, sizeof(x[0]), sorts);
print();
}
void init(void){
int i, a=-10, b=10;
srand(time(NULL)*1000);
for (i=0; i!=num; i++){
gets(x[i].name);
x[i].grade =(rand()*1.0/(RAND_MAX)*(b-a)+a);
}
}
int sorts(const void *p1, const void *p2){
return( strcmp((char *)p1,(char *)p2));
}
void print(void){
int t;
for (t = 0; t != num; t++)
printf("%s\t\t%d\n", x[t].name, x[t].grade);
}
Задания
1.Наберите коды программ из Примера 1 и 4. Выполните компиляцию и запуск программ.
2.Описать переменную «студент», содержащую: имя, фамилию, отчество, название учебного заведения, номер группы. Создать список студентов (N>10). Определить и распечатать фамилии студентов, учащихся заданной группы и заданного учебного заведения.
3.Задана следующая структура:
struct point {
float x,y;
} A, B;
Описать переменную d, равную расстоянию между точками A и B.
Домашние задания
1.Наберите коды программ из Примеров 2, 3 и 5. Выполните компиляцию и запуск программ.
2.Описать переменную «круг», в которой содержатся все данные для построения круга на плоскости в декартовой системе координат. Определить площадь круга и длину окружности, ограничивающей круг.
3.Задана следующая структура:
struct card {
// масть карт
enum {spades, clubs, diamonds, hearts} suit;
// достоинство карт
enum{six, seven, eight, nine, ten, jack, queen, king, ace} value;
} c1, c2;
Описать логическую функцию Kick(с1, с2, сs), проверяющую, бьёт ли карта с1 карту с2, с учётом того, что масть cs является козырной.
4.Описать переменную «адрес», содержащую: название города, название улицы, номер дома, корпус, номер квартиры. Создать массив адресов. Поменять местами номер дома в N-ом адресе и номер квартиры в M-ом адресе.
Дата добавления: 2015-02-16; просмотров: 1549;