Читайте также:
|
|
8.1. Структуры
Под структурами подразумевают группу переменных, объединенных общим именем. Удобство структуры состоит в первую очередь в том, что она позволяет группировать разнородные данные, что бывает весьма полезно при работе со всевозможными базами данных и записями.
Объявление структуры начинается с ключевого слова struct, после которого следует имя структуры и, в фигурных скобках, перечисляются поля структуры (типы и имена переменных, входящих в структуру). Общий синтаксис объявления структуры следующий:
struct имя{ тип1 поле1; тип2 поле2;
...
типN полеN;
};
Описание структуры - это некий шаблон, по которому впоследствии создаются переменные. С точки зрения использования в программе имеет смысл говорить лишь о переменных структуры. Фактически переменная структуры - это объект, который имеет имя (имя переменной структуры) и поля, тип и названия которых определяются описанием структуры. Чтобы в программе создать переменную структуры, необходимо указать имя структуры, в соответствии с описанием которой создается переменная, и имя этой переменной. Другими словами, переменная структуры в программе создается точно так же, как и переменная любого базового типа, только вместо названия типа переменной указывается название структуры.
Сама по себе переменная структуры интерес представляет больше спортивный, чем практический. Все данные, которые могут понадобиться в процессе выполнения программы, записаны в поля переменной. Обращение к полю переменной структуры осуществляется через так называемый точечный синтаксис (стандартный синтаксис для объектно-ориентированного программирования) - указывается имя переменной структуры, и через точку имя поля, к которому выполняется обращение, т.е. в формате структура.поле. Примеры объявления и использования структур приведены в листинге 8.1.
// Листинг 8_1 Объявление и использование структуры
// demoStruct1.cpp: Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
#include <conio.h>
struct Marks
{
char name[80];
int phys;
int chem;
int maths;
};
struct Exams
{
double phys;
double chem;
double maths;
};
int main()
{
Marks ivanov,petrov,sidorov;
strcpy(ivanov.name,"Sergei Ivanov");
ivanov.phys=4;
ivanov.chem=3;
ivanov.maths=3;
strcpy(petrov.name,"Igor Petrov");
petrov.phys=5;
petrov.chem=4;
petrov.maths=4;
strcpy(sidorov.name,"Ivan Sidorov");
sidorov.phys=5;
sidorov.chem=4;
sidorov.maths=3;
Exams LastYear,ThisYear;
LastYear.chem=4.33333;
LastYear.phys=3.66667;
LastYear.maths=3.33333;
ThisYear.chem=(double)(ivanov. chem+petrov. chem+sidorov.chem)/3;
ThisYear.phys=(double)(ivanov.phys+petrov.phys+sidorov.phys)/3;
ThisYear.maths= (double) (ivanov. maths+petrov. maths+sidorov. maths) /3;
cout<<"Last year marks: "<< endl;
cout<<"Physics " << LastYear.phys<<endl;
cout<<"Chemistry "<<LastYear.chem<<endl;
cout<<"Mathematics "<<LastYear.maths<<endl;
cout<<endl;
cout<<"This year marks: "<<endl;
cout<<"Physics "<<ThisYear.phys<<endl;
cout<<"Chemistry "<<ThisYear. chem<<endl;
cout<<"Mathematics "<<ThisYear.maths<<endl;
getch();
return 0;
}
В программе объявлены две структуры: Marks и Exams. В структуру Marks входят четыре поля: символьный массив name типа char и целочисленные поля (тип int) phys, chem и maths.
Структура Marks создается в программе для хранения информации об успеваемости учащихся. Оценки по трем предметам (физика, химия и математика) заносятся в целочисленные поля phys, chem и maths соответственно. Поле-массив name предназначено для записи имени и фамилии учащегося.
Назначение структуры Exams состоит в хранении средних оценок по каждому из предметов в разные годы. Каждому году соответствует переменная структуры. Переменные структуры создаются непосредственно в главном методе программы. У структуры три поля, которые имеют такие же названия (phys, chem и maths), однако теперь поля объявлены как имеющие тип double. Дело в том, что средняя оценка, в отличие от оценки учащегося по предмету, в общем случае не является целым числом.
Напомним, что описание структуры является лишь общим шаблоном, в соответствии с которым формируются переменные структуры. Чтобы было куда записать оценки, а также имя и фамилию, необходимо создать переменную структуры.
В главном методе программы сначала выполняется объявление переменных структуры Marks с именами ivanov, petrov и sidorov. Далее выполняется инициализация полей этих переменных структуры. В частности, заполнение массива name для переменной ivanov выполняется командой strcpy (ivanov. name, " Sergei Ivanov") (копирование строки "Sergei Ivanov" в поле-массив name). Обращаем внимание на способ ссылки на поле name переменной структуры ivanov: ссылка выполнена в виде ivanov. name. Аналогично выполняются ссылки на прочие поля переменных структуры:
ivanov.phys=4;
ivanov.chem=3;
ivanov.maths=3;
Точно так же заполняются поля двух других переменных (petrov и sidorov) структуры Marks.
Командой Exams LastYear, This Year в главном методе программы объявляются две переменные LastYear и ThisYear структуры Exams. Переменная LastYear предназначена для записи средних оценок прошлого года. Оценки (средние) за текущий год записываются в переменную ThisYear структуры Exams. Значения полям переменной структуры LastYear присваиваются командами
LastYear.chem=4.33333; LastYear.phys=3.66667; LastYear.maths=3.33333;
Соответствующие поля переменной структуры определяются как средние арифметические по набору учащихся (их в данном случае всего три):
ThisYear.chem=(double)(ivanov.chem+petrov.chem+sidorov.chem)/3; ThisYear.phys=(double)(ivanov.phys+petrov.phys+sidorov.phys)/3; ThisYear.maths=(double)(ivanov.maths+petrov.maths+sidorov.maths)/3;
Инструкция (double) использована для явного приведения типов, поскольку по умолчанию для целочисленных операндов операция деления выполняется как деление с отбрасыванием дробной части (целочисленное деление).
Далее полученные значения для полей переменных LastYear и ThisYear структуры Exams выводятся на экран. Результат имеет следующий вид:
Last year marks:
Physics 3.66667
Chemistry 4.33333
Mathematics 3.33333
This year marks:
Physics 4.66667
Chemistry 3.66667
Mathematics 3.33333
По отношению к структурам можно применять операцию присваивания. Для этого две переменные должны относиться к одной структуре. В результате такого присваивания из одной переменной в другую копируются значения всех полей структуры.
Дата добавления: 2015-08-03; просмотров: 42 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Таинственный портрет | | | Массивы структур |