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

Московский Институт Электронной Техники Московский Институт Электронной Техники

Кафедра “ИПОВС”

Лабораторная работа

Структурный тип данных на языке С++

Цель работы:

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

Теоретические сведения

Иногда удобно иметь набор значение различного типа, с которыми можно обращаться как с элементом.

Рассмотрим, например, музыкальную коллекцию на компакт-дисках (CD). Также коллекция может включать в себя следующую информацию:

Название CD

Исполнитель

Число песен

Стоимость

Дата покупки

Эта структура имеет пять элементов (членов). Определим тип каждого их элементов структуры:

Имя элемента Тип данных Название Символьный массив из 25 символов Исполнитель Символьный массив из 20 символов Число песен Целый Стоимость С плавающей точкой Дата покупки Символьный массив из 8 символов

Определение структуры

Для определения структуры используется ключевое слово struct. Struct указывает, что далее привидено имя структуры, как имя нового типа данных.

Синтаксис оператора struct:

Struct <имя структуры>

{

<определение члена структуры>;

<- - - - - - - - - - - - - - - - - - -- - ->;

… … …

<определение члена структуры>;

} [одна или более переменных];

Определение члена структуры представляет собой определение перепенной стандартного типа или типа, который определил пользователь.

Пример структуры с информацией о CD:

Struct cd_info

{

char title[25];

char artist[20];

int num_songs;

float price;

char date_bought[8];

} col1, col2, col3;

Переменные структурного типа можно объявлять также как и переменные стандартных типов.

Struct cd_info

{

char title[25];

char artist[20];

int num songs;

float price;

char date_bought[8];

};

cd_info cd1, cd2, cd3;/*определение переменных cd1, cd2, cd3*/

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

Инициализация структуры

Структуры можно инициализировать одновременно с объявлением. Инициализация структурного типа производится, если после ее имени следует знак “=” и список значений в фигурных скобках, разделенных запятой.

Инициализация структуры, содержащей информацию о музыкальной коллекции на CD.

Struct cd_info

{

char title[25];

char artist[20];

int num_songs;

float price;

char date_bought[8];

};

cd_info cd={“Red Moon Men”,

“Sam and the Snuds”,

12,

11.95,

“02/13/97”

};

Значения переменных (членов) присваивается в порядке их объявления при определении структуры.

Доступ к элементам структуры

Доступ к элементам структуры осуществляется с помощью операции “точка”.

Синтаксис:

<имя переменной структурного типа>.<имя переменной члена структуры>

Пример:

#include <stdoi.h>

struct cd_info

{

…………………..

};

void main()

{

…………………..

//вывод содержимого переменной cd

printf(“Название: %s\n”, cd.title);

printf(“Исполнитель: %s\n”, cd.artist);

printf(“Количество песен: %d\n, cd.num_songs);

printf(“Стоимость: %5.2f\n”, cd.price);

printf(“Дата покупки: %s\n”, cd.date_bought);

}

Вложенные структуры

С++ позволяет определять одну структуру в рамках другой. Например, структура PersonInfo для записи роста, веса и даты рождения человека может быть определена следующим образом:

Sruct Date

{

int mounth;//месяц

int day;//число

int year;//год

};

struct PersonInfo

{

float height;//рост

float weight;//вес

Date birthday;//дата рождения

};

PersonInfo person // Объявление переменной типа PersonInfo

Чтобы получить доступ к переменной birthday – члену person нужно использовать операцию “точка”: person.birthday, но т.к. эта переменная в свою очередь является переменной структурного типа Date, то доступ, например, к году рождения будет добавлением операции “точка” к имени year: person.birthday. year.

Массивы структур

Массивы структур определяются также как и массивы с элементами стандартных типов.

Синтаксис:

<имя структуры><имя переменной структурного типа>[количество элементов массива];

Например: PersonInfo[20];

Нумерация элементов массива начинается с 0 и заканчивается индексом, равным количеству элементов массива –1.

Доступ к элементам массива структурного типа также осуществляется с использованием операции точка, например: personal[5].weight, personal[3].birthday.day и т.п.

Пример программирования

Задание: Сформировать массив, содержащий сведения о вкладах.

Каждая структура содержит поля:

Фамилия И. О. вкладчика,

Номер счета,

Тип вклада (срочный, депозит, обычный),

Сумма вклада,

Дата последнего обращения к вкладу.

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

Текст программы:

#include <conio.h>

#include <stdio.h>

struct banks // объялвение структуры

{

char name [10]; //Имя вкладчика

int namber; //Номер счета

char type[10];//Тип счета

int summa; //Сумма вклада

char date[10]; //Дата последнего обращения

};

banks bank[10],per;

int n,i;

//****************************************************//

void sort(int nn) /*Функция сортировки вкладчиков по наибольшей сумме вклада методом “пузырька”*/

{

int a,b;

for (a=0;a<nn-1;a++)

{

for (b=0;b<nn-1;b++)

{

if (bank[b+1].summa>bank[b].summa) //условие сортировки

{

per=bank[b]; //Тело сортировки

bank[b]=bank[b+1];

bank[b+1]=per;

}

}

}

}

//******************************************************//

void sorts(int nn) /*Функция сортировки вкладчиков по алфавиту методом “пузырька”*/

{

int a,b;

for (a=0;a<nn-1;a++)

{

for (b=0;b<nn-1;b++)

{

if (bank[b+1].name[0]<bank[b].name[0])

{

per=bank[b];

bank[b]=bank[b+1];

bank[b+1]=per;

}

}

}

}

//******************************************************//

void wwod (int nn) //Функция ввода информации о вкладчиках

{

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

{

clrscr();

gotoxy(10,1);

printf(“%d”,i+1); printf(“ – Вкладчик \n\n\r”);

gotoxy(0,3);

printf(“Введите имя вкладчика: ”);

scanf(“%s”, bank[i].name);

printf(“Введите номер счета: ”);

scanf(“%d”, &bank[i].namber);

printf(“Введите тип счета: ”);

scanf(“%s”, bank[i].type);

printf(“Введите сумму: ”);

scanf(“%d”, &bank[i].summa);

printf(“Введите дату последнего обращения: ”);

scanf(“%s”, bank[i].date);

printf(”\n\n”);

}}

//******************************************************//

void wiwod (int nn) //Функция вывода информации

{

clrscr();

gotoxy(2,3);

printf(“имя вкладчика: номер счета: тип счета: сумма: дата последнего обращения: ”);

if (n<4) nn=n;

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

{

gotoxy(2,i*2+5);

printf(“%s”, bank[i].name); //Вывод имени вкладчика

gotoxy(18,i*2+5);

printf(“%d”, &bank[i].namber); //Вывод номера счета

gotoxy(33,i*2+5);

printf(“%s”, bank[i].type); //Вывод типа счета

gotoxy(47,i*2+5);

printf(“%d”, &bank[i].summa); //Вывод суммы вклада

gotoxy(58,i*2+5);

printf(“%s”, bank[i].date); //Вывод даты последнего обращения

printf(”\n\n”);

}}

//******************************************************//

void main(void) //Основная программа

{

clrscr(); //Очистка всего экрана

printf(“Введите количество вкладчиков: ”);

scanf(“%d”,&n);

wwod(n); //Ввод информации

wiwod(n); //Полная информация о вкладчиках

getch();

sort(n); //Сортировка информации по сумме вкладов

wiwod(n);

getch();

sorts(n); //Сортировка информации по имени вкладчика

wiwod(4); // Четыре вкладчика с наибольшей суммой вклада

getch();

}

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

Какова область применения структур?

Каким образом определяется структура?

Как определяются переменные типа структура?

Как осуществляется доступ к структурным членам?

Лабораторное задание

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

Требования к конспекту

Конспект по лабораторной работе должен содержать:

Название лаб. работы

Краткие теоретические сведения

Задание на лаб. работу

Текст программы

Конспект готовится до начала лаб. работы в классе IBM PC

Задание

Вариант Задание 1, 14 Сформировать массив, содержащий сведения о количестве изделий, собранных сборщиками цеха за неделю. Каждая структура содержит поля: Фамилия сборщика, количество изделий, собранных им ежедневно в течение шестидневной недели, т.е. раздельно по дням недели. Написать программу, выдающую на печать: фамилию сборщика и общее количество деталей, собранных за неделю; фамилию сборщика собравшего наибольшее количество изделий и день, когда он достиг наивысшей производительности труда. 2, 15 Сформировать массив, содержащий сведения о количестве изделий категории А, В, С, собранных рабочими за месяц. Структура имеет поля: фамилию сборщика, наименование цеха, количество изделий по категориям, собранных рабочим за месяц. Считая заданными значения расценок SA, SB, SC за выполненную работу по сборке единицы изделия категории А, В, С, выдавать следующую информацию: общее количество изделий категории А, В, С, собранных рабочими цеха; средний размер заработанной платы рабочих цеха Х; средний размер заработанной платы рабочих этого цеха. 3, 16 Сформировать массив, содержащий сведения о телефонах абонентов. Каждая структура имеет поля: фамилия абонентов, год установки телефона. Написать программу, выдающую следующую информацию: по вводимой фамилии абонента выдается номер телефона; определяется количество установленных телефонов с ХХХХ года. Номер года вводится с клавиатуры. 4, 17 Сформировать массив, содержащий сведения об ассортименте игрушек в магазине. Структура содержит: название игрушки, цена, количество, возрастные границы (2-5). Написать программу, выдающую следующие сведения: название игрушки, которые подходят детям от 1 до 3 лет; стоимость самой дорогой игрушки и ее наименование; название игрушки, которая по стоимости не превышает Х руб. и подходит ребенку в возрасте от А до В лет. Значения А, В, Х вводятся с клавиатуры. 5, 18 Сформировать массив, содержащий сведения о сдаче студентами сессии. Структура содержит: индекс группы, фамилию студента, оценки по пяти экзаменам (“З” – зачет, “Н” - незачет). Написать программу, выдающую информацию: фамилии неуспевающих студентов с указанием индексов групп и количества задолжностей; средний бал, полученный каждым студентом группы Х и всей группы в целом. 6, 19 Сформировать массив, содержащий сведения о личной коллекции книголюба. Структура содержит: шифр книги, автор, название, год издания, месторасположение (номер стеллажа). Написать программу, выдающую следующую информацию: месторасположение книги, автора Х, название Y; список книг автора Z, находящихся в коллекции; число книг издании ХХ года, имеющихся в библиотеке. 7, 20 Сформировать массив, содержащий сведения о наличии билетов в рейсах Аэрофлота. Структура содержит: номер рейса, пункт назначения, время вылета, время прибытия, количество свободных мест в салоне. Написать программу, выдающую следующую информацию: время отправки самолетов в город Х; наличие свободных мест на рейс в город Х с временем отправления Y. 8, 21 Сформировать массив, содержащий сведения об ассортименте обуви в магазине фирмы. Структура: артикул, наименование, количество, стоимость одной пары. Артикул начинается с буквы Д для дамской обуви, М для мужской, П для детской. Написать программу, выдающую следующую информацию: о наличии и стоимости обуви артикула Х; ассортиментный список дамской обучи с указанием наименования и имеющегося в наличии числа пар каждой модели. 9, 22 Сформировать массив, содержащий сведения о нападающих команды “Спартак”. Структура содержит: имена нападающих, число заброшенных ими шайб, сделанных голевых передач, заработанное штрафное время. Написать программу, которая определяет по сумме очков (голы+передачи) четырех лучших игроков. 10, 23 Сформировать массив, содержащий сведения о том, какие из пяти предлагаемых дисциплин по выбору желает получить студент. Структура содержит: фамилию студента, индекс группы, 5 дисциплин, средний балл успеваемости. Выбираемая дисциплина отличается символом “1”, иначе пробел. Написать программу, которая печатает список студентов, желающих прослушать дисциплину Х. Если число желающих превышает 4 человека, то отобрать студентов имеющих более высокий средний балл успеваемости. 11, 24 Сформировать массив, содержащий сведения об отправлении поездов дальнего следования с Казанского вокзала. Структура содержит: номер поезда, станцию назначения, время отправления, время в пути, наличие билетов. Написать программу, выдающую информацию: время отправления поездов в город Х во временном интервале от А до В часов; наличие билетов на поезд с номером ХХХ. 12, 25 Сформировать массив, содержащий сведения о сотрудниках института. Структура содержит: фамилия работающего, название отдела, год рождения, стаж работы, должность, оклад. Написать программу, которая позволяет получить информацию: список сотрудников пенсионного возраста на сегодняшний день с указанием стажа работы; средний стаж работающих в отделе Х. 13, 26 Сформировать массив, содержащий сведения о пациентах глазной клиники. Структура содержит: фамилия пациента, пол, возраст, место проживания (город), диагноз. Написать программу, которая выдает информацию: количество иногородних, прибывших в поликлинику; список пациентов старше Х лет с диагнозом J.

Соседние файлы в папке C_struct