Студопедия — Лабораторная работа 8. Структуры и перечисления
Студопедия Главная Случайная страница Обратная связь

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

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






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-29; просмотров: 356. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

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

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Типовые ситуационные задачи. Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической   Задача 1. Больной К., 38 лет, шахтер по профессии, во время планового медицинского осмотра предъявил жалобы на появление одышки при значительной физической нагрузке. Из медицинской книжки установлено, что он страдает врожденным пороком сердца....

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

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

Плейотропное действие генов. Примеры. Плейотропное действие генов - это зависимость нескольких признаков от одного гена, то есть множественное действие одного гена...

Методика обучения письму и письменной речи на иностранном языке в средней школе. Различают письмо и письменную речь. Письмо – объект овладения графической и орфографической системами иностранного языка для фиксации языкового и речевого материала...

Классификация холодных блюд и закусок. Урок №2 Тема: Холодные блюда и закуски. Значение холодных блюд и закусок. Классификация холодных блюд и закусок. Кулинарная обработка продуктов...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия