3. Массивы структур. Указатели на структуры
3. Массивы структур. Указатели на структуры
При решении большинства задач приходится иметь дело не с одним, а с совокупностью однотипных объектов, которые отличаются только значениями, а не описанием. Поэтому в таких случаях создают и работают с массивами структур. Если количество объектов можно определить до запуска программы, то объявляют статический массив структур. В противном случае объявляют указатель на структурный тип. Указатели на структуры определяются, как и указатели на переменные других типов. Если объявлен указатель на структурный тип, то в этом случае говорят о динамическом массиве структур. Динамическим массивам структур ОП выделяется в процессе выполнения программы с помощью одной из соответствующих библиотечных функций, например malloc(). Допустим, что определён новый тип пользователя stud (студент) – структура с полями fio, kurs, facultet, spec. typedef struct { char fio[30]; // ФИО студента int kurs; // курс char facultet[50]; // наименование факультета char spec[50]; // специальность } stud; Тогда, чтобы решать задачи об обработке списков студентов, необходимо создать массив структур (статический или динамический) типа stud и обработать его согласно поставленной задаче.
3. 1. Определение статического массива структур
Объявление статического массива std из 20 структур типа stud: stud std[20]; Массив представлен на рис. 8.
Примеры обращения к полям элемента массива с номером i:
gets(std[i]. fio); //вводится с клавиатуры поле fio scanf(" %i", & std[i]. kurs); //с клавиатуры вводится целочисленное поле // kurs 3. 1. Определение динамического массива из n структур Объявление указателя на структуру типа stud: stud *st; int n; printf(" n=" ); scanf(" %i", & n); //ввод количества элементов динамического массива st st=(stud*)malloc(n*sizeof(stud)); // выделение динамической памяти // под n структур типа stud. Массив представлен на рис. 9. Значением переменной st будет адрес нулевого элемента (первой структуры) динамического массива структур. Число n будет определять количество однотипных объектов (структурный тип stud описывает каждый такой объект), информация о которых будет храниться в созданном динамическом массиве. Именем этого массива будет имя указателя st.
Примеры обращения к полям i-го элемента динамического массива структур st. gets((st+i)–> fio); //вводится с клавиатуры поле fio scanf(" %i", & (st+i)–> kurs); //с клавиатуры вводится целочисленное //поле kurs printf (" kurs=%i\n", (st+i)–> kurs); // на экран выводится значение поля // kurs Здесь операция & определяет адрес в ОП поля kurs i-го элемента динамического массива структур st. Операция –> (записанные последовательно друг за другом два знака: минус (–) и больше (> )) обозначает доступ к полю структуры через указатель:
Пример. Каждого студента можно описать при помощи следующих характеристик: ФИО, курс, специальность, предмет1, предмет2, предмет3. Написать программу, определяющую количество студентов:
1) сдавших сессию на «отлично»; 2) не сдавших хотя бы 1 экзамен.
Ход выполнения работы 1. Алгоритм решения данной задачи – алгоритм обработки одномерного массива. В задаче каждым элементом массива будет структура, т. е. элемент массива представляет собой набор переменных различного типа. Для ввода элемента массива нужно вводить значения каждого поля элемента массива поочередно. Так как работаем с массивом, то ввод-вывод элементов массива производится с помощью циклов с параметром. 2. Написать программу, соответствующую алгоритму. Запишем алгоритм решения задачи и соответствующие программы с использованием статического и динамического массивов. Использование динамических массивов:
Использование статических массивов:
3. Создать проект и реализовать данную задачу в среде Visual C++ 6. 0.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|