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

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

Кафедра «ИПОВС»

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

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

Цель работы:

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

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

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

Рассмотрим, например, музыкальную коллекцию на компакт-дисках (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();

}

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

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

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

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

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

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

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

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