- •Общие методические указания по выполнению лабораторных работ
- •Работа со структурами данных (struct)
- •Описание структур и структурных переменных
- •Вложенные структуры
- •Обращение к полям структуры
- •Например, для переменных, описанных шаблоном
- •Массивы структурных переменных
- •Объявление типов в языке Си
- •Введите оценки ( 2 целых числа от 3 до 5 ): 5 5
- •Использование структур в функциях
- •Использование глобальных данных
- •Обработка вложенных структур
- •Толстой л.Н. Война и мир 1995 6 Структуры и поразрядные операции
- •Поразрядные операции
- •Сдвиговые поразрядные операции
- •Операнд сдвиг число_битов
- •Структуры с битовыми полями
- •Работа с объединениями (union)
- •Работа с перечислениями (enum)
- •Работа с файлами Понятие файла и потока ввода-вывода данных в компьютере
- •Открытие и закрытие файла
- •Потоки стандартного ввода-вывода
- •Повторное открытие файла
- •Позиционирование указателя записи-чтения
- •Int fseek (указатель_потока, (long) смещение, начало_отсчета),
- •Начало_отсчета может принимать следующие значения:
- •Функции файлового ввода-вывода
- •Посимвольный ввод-вывод
- •Вывод символов из файла:
- •Построчный ввод-вывод Пусть описан символьный массив
- •Форматированный ввод-вывод данных
- •Блоковый ввод-вывод
- •Работа с динамическими структурами данных Динамическое распределение памяти
- •Очередь
- •Рекурсивные функции
- •Деревья
Введите оценки ( 2 целых числа от 3 до 5 ): 5 5
Сортировка студентов по среднему баллу.
Студент Средний балл:
Сидоров Д. С. 5.000
Иванов А. И. 4.500
3. Петров Т. Б. 3.500
Пример 2. Выполнить ввод данных и обработку массива структур с использованием указателей и массива указателей (*pgr []) для сортировки списка студентов в порядке убывания среднего балла, что позволяет избавиться от пересылки самих структур в массиве структур группы студентов (gr []).
Программа:
#include<stdio.h>
#include<conio.h>
#include<alloc.h> /* для динамического выделения памяти */
#define kstud 25 /* максимальное количество студентов в группе */
#define kball 6 /* максимальное количество баллов в сессию */
void main()
{ struct STUDENT { char *name; /*фамилия И. О. студента */
int ball [kball]; /* оценки в сессию */
float sb; /* средний балл */
} gr[kstud], /* массив структур студентов */
*pst, /* указатель на структуру */
*pgr [kstud ]; /* массив указателей */
int i, j, k, kst, kb; /* рабочие переменные */
float sum; /* сумматор */
clrscr(); /* очистка экрана */
printf (”Введите количество студентов в группе: ”);
scanf (”%d”, &kst);
printf (”Введите количество баллов в сессию: ”);
scanf (”%d”, &ks);
printf (”Ввод данных группы из %d студентов:\n”, kst );
for (i=0; i < kst; i++) /* цикл по студентам */
{ printf (”%2d. ”, i+1); /* ввод номера студента */
fflush (stdin); /* очистка буфера ввода */
(gr+1)->name=(char*)malloc(31); /* выделение динамич. памяти */
gets ((gr+i)->name); /* ввод фамилии И. О. */
printf (”Введите %d оценки (целые числа от 3 до 5): ”, kb);
for (j=0; j<kb; j++) /* цикл по баллам */
scanf (”%d”, &(gr+i)->ball[j]); /* ввод оценок */
pgr [i] = gr+i; /* запись указателей в массив указателей */
} /* конец ввода исходных данных */
for (i=0; i < kst; i++) /* цикл по студентам */
{ sum=0; /* очистка сумматора */
for (j=0; j < kb; j++) /* цикл по баллам */
sum += (gr+i)->ball[j]; /* вычисление суммы оценок */
(gr+i)->sb = sum / kb; /* вычисление среднего балла */
}
puts(”Сортировка студентов по среднему балу (через массив “ “ указателей).”);
for (i=0; i < kst–1; i++) /* цикл по студентам */
{ k=i; /* начальное значение индекса k */
for (j=i+1; j < kst; j++) /* цикл поиска max среднего балла */
if (pgr[j]->sb > pgr[k]->sb) k=j; /* индекс max среднего балла */
if ( k != i) /* если индекс k изменился, то */
{ pst = pgr[i]; /* перестановка указателей */
pgr[i] = pgr[k]; /* на структуры студентов */
pgr[k] = pst; /* в массиве указателей */
}
}
puts (”Студент: Средний балл:”);
for (i=0; i < kst; i++) /* цикл по студентам */
{ printf (” %u. %-20s %6.3f\n ”, i+1, pgr[i]->name, pgr[i]->sb);
free (pgr[i]->name); /*освобождение динамической памяти */
}
getch(); /* задержка экрана результатов */
} /* конец программы */
