Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Язык программирования Сpp 25.09.11 (2).doc
Скачиваний:
16
Добавлен:
19.08.2019
Размер:
10.09 Mб
Скачать

4. Структуры

Массив это упорядоченная совокупность однородных элементов. Иначе говоря, все элементы должны иметь одинаковый тип. Ну, а что делать, если нужно в массив записать элементы разного типа? Например, необходимо хранить вместе номер квартиры, ее площадь и имя хозяина. Первая величина целая, вторая действительная, а третья вообще строка. Конечно, эти величины можно записать в разные переменные, но С++ позволяет их агрегировать, т.е. рассматривать совокупность нескольких величин разного типа, как одну переменную. Такие агрегированные (объединенные) переменные называются структурами. Структура это упорядоченная совокупность элементов разного типа. Упорядоченность, в отличие от массива, заключается не в присвоении номера элементу, а в присвоении имени.

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

typedef char name[50];

Теперь можно пользоваться новым типом name. Рассмотрим пример, в котором принято такое объявление.

#include <iostream>

using namespace std;

int main(void)

{

typedef char name[50];

name n1,n2;

cin>>n1>>n2;

cout<<n1<<endl<<n2;

char z;

cin>>z;

return 0;

}

На самом деле, typedef не определяет новый тип, а просто дает имя шаблону (для существующих типов), по которому нужно строить или хранить данные. А вот теперь рассмотрим как, на самом деле, можно создать новый тип данных. Для этого вернемся к объявленной теме.

Описание структуры, а точнее структурного типа, выглядит следующим образом:

struct Имя_структурного типа

/ к имени структуры предъявляются обычные,

// для имен переменных, требования

{

объявление членов (иногда говорят полей) структуры, например,

int number;

double temperature;

char day;

}; // Описание заканчивается точкой с запятой !!!

Вместо термина «Имя структуры» иногда используется термин дескриптор структуры.

Обращение к члену структуры производится с указанием через точку имени структуры и имени элемента:

Имя_структуры.Имя_члена_структуры

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

#include<iostream.h>

#include<windows.h>

struct book{

char name[10];

int page;

float price;

};

int main(void)

{

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

book b1;

cout<<"Название книги: ";

cin>>b1.name;

cout<<"Цена: ";

cin>>b1.price;

cout<<"число страниц: ";

cin>>b1.page;

cout<<b1.name<<endl<<b1.price<<endl<<b1.page;

char z;

cin>>z;

return 0;

}

Можно создать массив из струтур

#include<iostream.h>

#include<windows.h>

struct book{

char name[10];

int page;

float price;

};

main(){

book b[3];

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

for(int i=0;i<3;i++){

cout<<"Фамилия автора: " ;

cin>>b[i].name;

}

SetConsoleOutputCP(1251);

for(int i=0;i<3;i++){

cout<<"Имеются книги следующих автров: " <<b[i].name<<endl;;

}

char z;

cin>>z;

}

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

#include <iostream>

#include <cmath> //подключение библиотеки арифметических функций

using namespace std;

//------------------------------------------

struct account{ //объявление о создании структурного типа

// далее идет описание структуры

double beginSum; //начальная сумма

double procentStavka; //процентная ставка