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

 

Цель работы: приобретение навыков программирования при решении задач с использованием типа структура.

Отчет на лабораторную работу должен содержать:

- задание по варианту;

- листинг программы, записанного по правилам языка Си/Си++ (все значения для вычисления ввести с клавиатуры.);

- составить блок-схему данного алгоритма;

- скриншот результата программы .

 

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

1. Даны сведения о студентах группы: ФИО студента, дата рождения студента, место рождения студента. Вывести список группы по убыванию года рождения студента.

2. Даны сведения о результатах аттестации: ФИО студента, название пяти предметов и баллы, полученные по каждому предмету. Вывести фамилии студентов, аттестованных по всем предметам.

3. Даны сведения о результатах аттестации, что и в предыдущей задаче. Вывести фамилии студентов, не аттестованных по тем предметам.

4. Даны сведения о книгах, поступивших в библиотеку: ФИО автора, название книги, название издательства, год издания, дата поступления книги в библиотеку. Вывести сведения о книгах, изданных издательством “Мир”, которые поступили в библиотеку за последние пять лет.

5. Даны сведения о результатах сессии: ФИО студента, названия четырех предметов и оценки, полученные по каждому предмету. Вывести список группы по убыванию общего балла.

6. Условие предыдущей задачи сохраняется. Требуется вывести фамилии студентов, общий балл которых отличается не более чем на 2 балла от максимального общего балла.

7. Условие предыдущей задачи сохраняется. Вывести фамилии студентов, балл по определенному предмету которых превышает средний балл по предмету на 0.5 балла.

8. Даны сведения об экспорте товаров: название страны, импортирующей товар, наименование товара и объем поставляемой партии в штуках. Найти страны, в которые экспортируется данный товар и общий объем его экспорта.

9. Условие предыдущей задачи сохраняется. Вывести сведения об экспорте товаров по убыванию объема экспорта определенного товара.

10. Условие предыдущей задачи сохраняется. Вывести сведения об экспорте товаров в определенные страны.

11. Даны сведения о студентах потока: ФИО студента, название группы, год рождения. Вывести сведения об однофамильцах потока.

12. Условие предыдущей задачи сохраняется. Требуется вывести сведения об однофамильцах определенной группы.

13. Даны сведения о сотрудниках фирмы: ФИО сотрудника, год рождения, адрес, номер телефона. Вывести сведения о сотрудниках, возраст которых не превышает средний возраст сотрудников.

14. Даны сведения об автомобиле: ФИО владельца, стоимость, марка и номер автомобиля. Найти количество автомобилей каждой марки.

15. Условие предыдущей задачи сохраняется. Требуется вывести сведения об автомобилях по возрастанию стоимости автомобиля.

 

9.2 Методические указания к выполнению лабораторной работы

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

Определение структуры состоит из двух шагов:

- объявление шаблона структуры;

- определение переменных типа объявленного шаблона.

Синтаксис объявления шаблона структуры:

struct имя_шаблона

{ тип 1 имя_переменой1 ;

тип 2 имя_переменой2 ;

тип n имя_переменойn ;

};

где struct- зарезервированное слово, определяющее структуру;

имя_шаблона - правильный идентификатор имени шаблона;

тип , имя_переменой – поле структуры, где задается тип и имя поля.

Пример:

struct person

{ char name [50];

char sex;

int vozrast;

} ;

Если в программе используется один экземпляр структуры, то имя такой структуры можно опустить.

Пример

struct

{ int chisl;

char sex;

int vozrast;

} ;

 

Для определения структуры-переменной описываем следующим образом:

struct имя_шаблона имя_переменной;

Пример

struct student aisu_12_1k [15];

Описание шаблона можно совмещать с определением структурной переменной.

Пример

struct student

{ char name [50];

char gruppa[10];

int kurs;

} aisu_12_1k [15], aisu_12_2k [15], ; aisu_12_1r [15];

 

Для организации доступа к полям структуры используется составное имя, в котором используется:

1. прямой доступ к элементу (оператор «.»).

Синтаксис: имя_переменной_структуры.имя_поля;

Пример

aisu_12_1r [5].kurs=1;

2. доступ по указателю (оператор «->»)

Синтаксис: имя_указателя->имя_поля;

(*имя_указателя).имя_поля;

Пример

….

point->kurs=1;

или

(* point) . kurs=1;

….

Полем структуры может быть элемент типа структура.

Пример

struct ozenka

{ char disziplina [50];

int ball;

} ;

struct student

{ char name [50];

char gruppa[10];

struct ozenka;

int kurs;

} aisu_12_1k [15], aisu_12_2k [15], ; aisu_12_1r [15];

В функцию можно передавать и структуру , как и другие типы данных. Компилятор передаст данные всей структуры в функцию (в стек) со всеми полями, которые в нее входят.

Пример

Создается массив данных о студентах группы. Определить средний балл за сессию и отсортировать список по сумме баллов.

#include <stdio.h>

#include <iostream.h>

#include <conio.h>

#include <string.h>

typedef struct _student

{ char fio[80];

int mark[5];

} student ;

 

void main()

{

int i. j, k, size;

student st[100], * stp[100], * tmp;

 

do

{

cout << endl << “введите количество студентов”;

cin>> size;

} while (size<100);

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

 

{fflush (stdin);

cout << “\nвведите фамилию студента: ”; / /вводим данные

cin>> st[i].fio;

cout << “\n введите его оценки ”;

for (j=0;j<5;j++)

cin>> st[i].mark[j];

stp[i]=&st[i];

}

 

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

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

if (strcmp(stp[i]->fio,stp[j]->fio)>o)

{tmp=stp[i];

stp[i]= stp[j];

stp[j]=tmp;

}

 

cout << “\n результат выполнения: “;

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

 

 

cout << stp[i]-> mark[j]<< “ ”;

}

}

 

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

1. Как описываются структуры в языке Си/Си++?

2. Какого типа могут поля структуры?

3. Как обратиться к полю?

4. Как объявить массив из структур?

5. Что такое структура?

6. Какими методами можно обращаться к полям структуры?

7. Как вводятся поля структуры?

8. Как выводятся поля структуры?