Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Лабораторная работа 8. Структуры и перечисления

Читайте также:
  1. II. Организационные структуры управления и тенденции в их развитии
  2. III. Проблема сознания, социальной структуры и насилия
  3. III. Разработка новой организационной структуры «Дормаша».
  4. IV. РАБОТА ПРАКТИКАНТА
  5. А работающие пенсионеры? Где тут справедливость: ограничить в выплатах тех, кто работает и зарабатывает больше остальных?
  6. Адаптивные структуры управления
  7. Амплитудно-временные характеристики электрокардиограммы здорового человека Анализ электрокардиограммы здорового человека Работа 5.8 – стр.188

 

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 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Таинственный портрет| Массивы структур

mybiblioteka.su - 2015-2024 год. (0.011 сек.)