Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методическое пособие 206

.pdf
Скачиваний:
5
Добавлен:
30.04.2022
Размер:
584.29 Кб
Скачать

Лабораторная работа №2 Структуры

Цель работы – научиться определять структуры, освоить формат доступа к элементам структуры и к элементам массива структур. Научится создавать текстовые файлы с массивом структур, овладеть техникой ввода и вывода элементов структур

Задания:

1. Изучить:

а) терминологию, которая связана со структурой; б) формат определения структуры; в) формат доступа к полям структуры; г) способ задания массива структур;

д) способы доступа к полям элемента массива структуры;

е) способы ввода и вывода элементов массива структур.

2.Разработать алгоритм решения в соответствии с за-

данием.

3.Составить программу решения задачи.

4.Подготовить тестовый вариант программы и исходных данных.

Контрольные вопросы :

1.Где может быть использована структура?

2.Как называются элементы структуры?

3.Как определить структуру?

4.Может ли структура содержать элементыодного типа?

5.Как обратиться к полям структуры?

6.Как обратится к элементу массива структур?

7.Какое ключевое слово начинает определение струк-

туры?

9

8. Как обратиться к полям структуры через указатель на

нее?

9.При помощи какой операции формируется доступ к полям структуры?

10.Какая разница между определениями структуры и

массива?

11.Опишите объект, для которого надо определить структуру и определите ее.

Варианты заданий :

Создать структуру «студент» со следующими данными: фамилия, имя, отчества, пол, факультет, курс, группа, отметки по пяти предметам, город(село) проживания. Сформировать текстовый файл со списком студентов. Для каждого пункта характеристики студента выделять строку. Данные о студентах отделяются друг от друга пустыми строками. Для выполнения задания данные из текстового файла ввести в массив структур программы.

1.Сформировать список студентов, в котором студен- ты-задолжники расположены по алфавиту. Список выдать на экран. Студентов-задолжников при выводе пометить.

2.Сформировать список студентов, в котором студен- ты-задолжники по двум предметам расположены по алфавиту. Список выдать на экран. Студентов-задолжников при выводе пометить.

3.Сформировать список студентов, в котором студент- ки-отличницы расположены по алфавиту. Список выдать на экран. Студенток-отличниц при выводе пометить.

4.Сформировать список студентов, в котором студент- ки-отличницы, проживающие в городе Ачинске и имеющих пятерки, расположены по алфавиту.

5.Сформировать список студентов, в котором студенты расположены по алфавиту мест проживания. Список выдать на экран.

10

6.Сформировать список студентов, в котором студен- ты-отличники, проживающие в городе Москве, расположены по алфавиту. Список выдать на экран. Студентов-москвичей при выводе пометить.

7.Сформировать список студентов, в котором студенты расположены по убыванию среднего балла. Этот список выдать.

8.Сформировать список студентов по курсам. Список по курсам формировать по убыванию процентов отличников среди юношей.

9.Сформировать список студентов по группам факультета ИВТ. Список по группам формировать по возрастанию количества неуспевающих студентов. Список выдать. Неуспевающих студентов при выводе пометить.

10.Выдать номер курса факультета ИВТ, на котором больший процент отличников юношей. Составить список студентов, в котором группы факультета ИВТ расположены по убыванию процента отличников в нем.

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

12.Сформировать список студентов, в котором студентки расположены по убыванию среднего балла. Список студентов выдать.

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

14.Выдать самую распространенную фамилию юношей из списка студентов первого курса. Сформировать список студентов, в котором студенты найденного курса располагаются

11

первыми. Если таких курсов несколько, то списки выдавать по убыванию номера курса.

15.Выдать самую распространенную фамилию юношей из списка студентов факультета ИВТ. Сформировать список студентов ИВТ, в котором на первом месте перечисляются группы с распространенной фамилией. Если таких групп несколько, то группы располагать по убыванию номеров групп. Список выдать. Студентов с самой распространенной фамилией при выводе пометить.

16.Выдать самую распространенную фамилию девушки из списка студентов из первого курса. Сформировать список, в котором на первом месте перечисляются факультеты с распространенной фамилией. Если факультетов несколько, то порядок по факультетам произвольный. Список выдать. Студенток с самой распространенной фамилией при выводе пометить.

17.Выдать самую распространенную фамилию девушки из списка студентов факультета ИВТ. Сформировать список студентов ИВТ, в котором на первом месте перечисляются группы с распространенной фамилией. Если таких групп несколько, то группы располагать по убыванию номеров групп. Список выдать. Студенток с самой распространенной фамилией при выводе пометить.

18.Выдать курс и фамилии студенток по алфавиту, на котором обучается больше всего девушек. Сформировать список студентов, в котором курсы расположить по уменьшению количества девушек в нем. Список выдать.

19.Выдать курс и фамилии девушек по алфавиту. На каком курсе обучается больше всего девушек факультета ИВТ? Сформировать список студентов ИВТ по курсам. Курсы располагать по возрастанию студенток в нем. Список выдать.

20.По заданному номеру курса подсчитать средней бал каждой группы. Сформировать список, в котором группы данного курса располагаются по убыванию среднего бала. Список выдать.

12

21.По заданному факультету подсчитать средней бал каждого курса. Сформировать список, в котором курсы данного факультета располагаются по убыванию среднего бала. Список выдать.

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

23.Сформировать список студентов по факультету ИВТ, в котором на первом месте перечисляются отличники. Студенты-отличники перечисляются в порядке убывания номеров курса. Внутри курса в порядке убывания номеров групп. Список отличников выдать.

24.Сформировать список студентов, в котором студенты пятых курсов расположены в порядке убывания средних балов. Список выдать.

25.Сформировать список студентов, в котором неуспевающие студенты расположены в конце списка. Список выдать.

26.Исключить из списка студентов, которые по всем предметам имеют двойки. Новый список выдать.

27.Добавить в список одного студента. Студент должен быть внесен в соответствующий факультет и на соответствующий курс. Новый список выдать.

28.Из общего списка студентов сформировать список по факультетам (порядок по факультетам произвольный). Внутри факультета студентов группировать по возрастанию номеров курса. Список выдать.

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

13

реальные информационные объекты (человек, книги, приборы, машины и т. д.) характеризуются многими параметрами.

Пример решения варианта задания :

Личное дело студентов характеризуется пунктами: фамилия, пол и номер курса. Отсортировать список студентов по алфавиту. Список студентов занесен в текстовый файл.

Анализ задачи.

1. Начальные данные:

а) новый тип переменной styd, которая является струк-

турой;

б) константа n, которая определяет число студентов в

списке;

в) переменная i, j для параметров цикла; г) указатель на файл;

д) массив структур типа styd;

е) переменная st типа styd для промежуточных резуль татов преобразований;

ж) текстовый файл со списком студентов. Структура файла следующее: для каждой характеристики студента отводится строка. Характеристики студентов отделены друг от друга пустой строкой.

2. Составляем программу ввода в массив структур данных из текстового файла.

const n = 10; struct styd

{

сhar fam[60]; char pol; float ves;

};

void main()

14

{

FILE *f1;

styd sp[n], sp1; int i;

clrscr();

f1 = fopen("spis.dat","r"); for ( i = 0; i < n; i++)

{

fscanf(f1,"%s\n",&sp[i].fam);

fscanf(f1,"%c\n",&sp[i].pol);

fscanf(f1,"%f\n",&sp1.ves);

fscanf(f1,"%f\n",&sp[i].ves); fscanf(f1, "\n");

printf("Фамилие\t%s\n",sp[i].fam); printf(" пол\t%c\n",sp[i].pol); printf(" вес\t%f\n",sp[i].ves); printf("\n"); }

fclose(f1); getch(); }

Сортировка массива слов по алфавиту реализуется следующим фрагментом:

for ( i = 0; i < n-1; i++) { im = i;

for ( j = i+1; j < n; j++)

if ( strcmp( sp[im], sp[j]) > 0) im = j; strcpy(sr, sp[i]);

strcpy(sp[i] , sp[im]); strcpy(sp[im], sr); }

15

Здесь sp[n] – массив слов, sr – строка для промежуточных результатов преобразования. Сортировка массива структур реализуется следующим фрагментом.

for ( i = 0; i < n-1; i++) { im = i;

for ( j = i+1; j < n; j++)

if ( strcmp( sp[im].fam, sp[j].fam) > 0) im = j; sr = sp[i];

sp[i] = sp[im]; sp[im] = sr; }

Сравнение фрагментов показывает, что принципиальной разницы сортировки массива строк и массива структур по алфавиту нет. Просто элементы массива слов заменяются на элементы полей структур.

Фактически решение любых задач для массива структур алгоритмически ничем не отличается от решения подобных задач для массивов. И если поставлена задача для структуры, ее можно смело решать для массива, а затем там, где это надо, значение элементов массива заменить на соответствующие поля структуры. Приведем окончательный вариант программы решения поставленной задачи.

const n = 5; struct styd

{

char fam[60]; char pol; float ves;

}; void main() FILE *f1;

styd sp[n], sp1;

16

int i,j, im; clrscr();

cout << "\t\tДо сортировки:\n\n"; for ( i = 0; i < n; i++)

{

fscanf(f1,"%s\n",&sp[i].fam);

fscanf(f1,"%c\n",&sp[i].pol);

fscanf(f1,"%f\n",&sp[i].ves); fscanf(f1, "\n"); printf("Фамилие\t%s\n",sp[i].fam); printf(" пол\t%c\n",sp[i].pol); printf(" вес\t%f\n",sp[i].ves); printf("\n");

}

getch();

clrscr();

for ( i = 0; i < n-1; i++)

{

im = i;

for ( j = i+1; j < n; j++)

if ( strcmp( sp[im].fam, sp[j].fam) > 0) im = j; sp1 = sp[i];

sp[i] = sp[im]; sp[im] = sp1;

}

cout << "\t\tПосле сортировки:\n\n"; for ( i = 0; i < n; i++)

{ printf("Фамилие\t%s\n",sp[i].fam); printf(" пол\t%c\n",sp[i].pol); printf(" вес\t%f\n",sp[i].ves); printf("\n"); }

fclose(f1); getch(); }

17

Лабораторная работа №3 Односвязные списки

Цель работы – овладеть практическими навыками работы с односвязными списками. Научиться формировать списки, освоить технику программирования операций над списками.

Задания:

1. Изучить:

а) способы формирования списка; б) операции над списками: удалить элемент из списка;

добавить элемент в список, найти элемент в списке; способы вывода списка;

в) связный список стек, операции на стеке; г) связный список очередь, операции на очереди.

2.Разработать алгоритм решения в соответствии с за-

данием.

3.Составить программу решения задачи.

4.Отладить программу.

Контрольные вопросы :

Все вопросы в данном пункте рассматриваются для списка, элементами которого являются следующего объекты:

struct zvn { int inf; zvn *nx;}

1.Как определить объект для списка, элементами которого являются числа.

2.Как определить объект для списка, элементами которого являются слова.

3.Как определить объект для списка, элементами которого являются указатели.

18