Учебная работа. Лабораторная работа: Работа со структурами в языке программирования Си

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Загрузка...
Контрольные рефераты

Учебная работа. Лабораторная работа: Работа со структурами в языке программирования Си

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

“Работа со структурами в языке программирования Си++”

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

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

структура – это объединение 1-го или наиболее объектов (переменных, массивов, указателей, остальных структур). Как и массив, она представляет собой совокупа данных, но различается от него тем, что к ее элементам нужно обращаться по имени, и ее разные элементы не непременно должны принадлежать одному типу.

Структуры комфортно применять там, где различные данные, относящиеся к одному и тому же объекту, нужно соединять воединыжды. к примеру, ученика средней школы охарактеризовывают последующие данные: фамилия, имя, дата рождения, класс, возраст.

Объявление структуры осуществляется при помощи главного слова struct, за которым следует ее тип, перечень частей, заключенных в фигурные скобки. Ее можно представить в последующем общем виде:

struct тип {тип элемента 1 имя элемента 1;

тип элемента n имя элемента n; };

Именованием элемента быть может хоть какой идентификатор. В одной строке можно записывать через запятую несколько идентификаторов 1-го типа.

К примеру:

struct date { int day;

int month;

int year;} ;

Российские буковкы применять в идентификаторе в языке СИ недозволено.

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

struct date {…} a, b, c;

При всем этом выделяется соответственная память.

Выведенное имя типа можно применять для объявления записи, к примеру: struct date day;. сейчас переменная day имеет тип date.

Разрешается вкладывать структуры одна на другую. Для наилучшего восприятия структуры используем российские буковкы в идентификаторах, в языке СИ этого созодать недозволено.

К примеру:

struct УЧЕНИК { char Фамилия [15];

имя [15];

struct DATA ДАТА РОЖДЕНИЯ;

int класс, возраст;};

Определенный выше тип DATA включает три элемента: денек, Месяц, Год, содержащие целые значения (int). Запись УЧЕНИК включает элементы: ФАМИЛИЯ [15]; имя[15]; ДАТА РОЖДЕНИЯ, КЛАСС, ВОЗРАСТ. ФАМИЛИЯ [15] и имя [15] – это символьные массивы из 15 компонент любой. Переменная ДАТА РОЖДЕНИЯ представлена составным элементом (вложенной структурой) ДАТА. Каждой дате рождения соответствуют денек месяца, месяц и год. Элементы КЛАСС и возраст содержат значения целого типа (int). Опосля введения типов ДАТА и УЧЕНИК можно объявить переменные, значения которых принадлежат сиим типам.

К примеру:

struct УЧЕНИК УЧЕНИКИ [50];

массив УЧЕНИКИ состоит из 50 частей типа УЧЕНИК.

В языке СИ разрешено применять массивы структуры; записи могут состоять из массивов и остальных записей.

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

К примеру:

Ученики [1]. КЛАСС = 3;

Ученики [1]. ДАТА РОЖДЕНИЯ. денек=5;

Ученики [1]. ДАТА РОЖДЕНИЯ. МЕСЯЦ=4;

Ученики [1]. ДАТА РОЖДЕНИЯ. ГОД=1979;

1-ая строчка показывает, что 1-й ученик обучается в 3-ем классе, а следующие строчки – его дату рождения: 5.04.79.

Любой тип элемента структуры определяется соответственной строчкой объявления в фигурных скобках. к примеру, массив УЧЕНИКИ имеет тип УЧЕНИК, год является целым числом. Потому что любой элемент записи относится к определенному типу, его составное имя может появляться всюду, где разрешено применять

/* Демонстрация записи */

#include < stdio.h >

struct computer { int mem;

int sp;

char model [20]; };

/* Объявление записи типа computer, состоящей из 3-х частей: mem, sp, model */

struct computer pibm =

{512, 1, “ПЭВМЕС 1840.05”}

/* Объявление и инициализация переменной pibm типа computer */

main ( )

{ printf (“ индивидуальная ЭВМ % snn “, pibm.model);

printf ( “размер оперативки — % d К б n”, pibm.mem);

printf (“производительность — % d млн. операций в секунду n”, pibm.sp);

/* вывод на экран значений частей структуры */

}

В данной программке объявляется запись computer, которая состоит из 3-х частей: mem (память ЭВМ ), sp (быстродействие), model [20] (модель ПЭВМ). Переменная pibm имеет тип computer и является глобальной. Строчки pibm.model, pibm.mem, pibm. sp в операторе printf вызывают воззвание к подходящим элементам записи pibm типа computer, которым ранее были присвоены определенные значения.

Итог работы программки имеет вид:

индивидуальная ЭВМ ПЭВМ ЕС 1840.05

размер оперативки – 512 К б

производительность – 1 млн. операций за секунду

Разглядим внедрение в программке вложенных структур:

/* Демонстрация вложенных структур*/

# include < stdio.h >

struct date { int day;

int month;

int year; };

/* Объявление записи типа date*/

struct person { char fam [20];

char im [20];

char ot [20];

struct date f1;};

/* Объявление структуры типа person; одним из частей записи person является запись f1

типа date */

main ( )

{ struct person ind1;

/* обьявление переменной ind1 типа person */

printf ( “Укажите фамилию, имя, отчество, денек, n месяц”

“ и год рождения гражданина ind1n”);

scanf (“ % S % S % S %d %d”, &ind1.fam, &ind1.im, &ind1.ot,

& ind1.f1.day, &ind1.f1.month, &ind1.f1.year );

/* Ввод сведений о гражданине ind1 */

printf (“ Фамилия, имя, отчество: % S % S % S n”, ind1.fam, ind1.im, ind1.ot);

printf (“ Годрождения — % d n”, ind1.f1.year);

printf (“ Месяцрождения — % d -й n”, ind1.f1.month);

printf (“ денек рождения — % d -й n”, ind1.f1.day);

/* Вывод сведений о гражданине ind1 */

}

структура типа date ( дата) содержит три элемента: day (денек), month (месяц), year (год). структура типа person (человек) содержит четыре элемента: fam[20] (фамилия), im[20] (имя) , ot[20] (отчество), f1 (дата рождения). Крайний из их (f1) – это вложенная запись типа date.

Результаты работы программки:

Укажите фамилию, имя, отчество, денек, месяц и год рождения гражданина ind1

Алексеев

Сергей

Петрович

3

5

1978

Акцентированная информация вводится юзером.

Сведения о гражданине ind1

Фамилия, имя, отчество: Алексеев Сергей Петрович


Год рождения – 1978

Месяц рождения – 5-й

денек рождения – 3-й

В последующей программке разглядим внедрение структуры в виде частей массива pibm. Любой элемент состоит из последующих компонент: mem (память), sp (размер винчестера), model [20] (модель ПЭВМ):

/* Массивы записей */

#include < stdio.h >

struct computer { int mem, sp;

char model [20];

pibm [10];};

/* объявлениезаписитипа computer;

объявление массива pibm типа computer */

main ( )

{ int i, j, k, priz;

for ( i=0; i<10; i++)

{ printf (“Введите сведения о ПЭВМ %d и признак (0-конец;

n иная цифра- продолжение)n”, i);

printf (“ модельПЭВМ — ”);

scanf (“%S”, &pibm [i].model );

printf ( “объемоперативнойпамяти -”);

scanf (“%d”, &pibm[i].mem);

printf (“ объемвинчестера — ”);

scanf ( “%d , &pibm[i].sp ”);

printf (“признак — ”);

scanf (“ %d ”, &priz );

k=i;

if (!priz) break; }

/* тут !priz – операцияотрицания priz; break – выходизцикла for, если priz=0 */

for (i=0; i<10, i++);

{

printf ( “n О какой ПЭВМ Вы желаете получить сведения?n (Введите номер от 0 до 9)n” );

scanf ( “%d ”,&j );

if (j>k)

{ printf (“Нет сведений о данной нам ПЭВМ n”);

continue; }

printf (“ персональнаяЭВМ %sn ”, pibm[j].model);

printf (“размер оперативки — % d Мб n ”, pibm[j].mem);

printf (“размер винчестера — % d Мб n ”, pibm[j].sp);

printf (“ признак – “ );

scanf ( “ %d ”, &priz);

if (!priz) break; }

/* Ввод сведений о ПЭВМ и занесение в массив pibm записей типа computer (1-ый цикл for); вывод на экран сведений о ПЭВМ (2-ой цикл for) */

}

Результаты работы программки:

Введите сведения о ПЭВМ и признак (0-конец; иная цифра – продолжение)

модель ПЭВМ – АТ 486 SX

размер оперативки – 32

размер винчестера – 4 Гбайта

признак – 1

Введите сведения о ПЭВМ и признак (0-конец; иная цифра – продолжение)

модель ПЭВМ – АТ 386 DX

размер оперативки – 64

размер винчестера – 14 Гбайт

признак – 0

О какой ПЭВМ Вы желаете получить сведения? (Введитн номер от 0 до 9)

1

модель ПЭВМ – АТ 386 DX

размер оперативки – 16 Мб

размер винчестера – 2,5 Гбайт

признак – 0

2.
Задание

Из таблицы взять задание по варианту и написать программку.

3.
Содержание отчета

отчет должен содержать:

1) задание к работе;

2) программку;

3) результаты расчетов.


№ вар.
Задание

1
Опишите запись СТУДЕНТ и расположите в нее последующую информацию: Ф.И.О., оценки (математика, физика, черчение, химия, сопромат). Обусловьте, сколько студентов имеют неудовлетворительную оценку по арифметике.

2
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте, сколько студентов имеют неудовлетворительную оценку хотя бы по одному предмету.

3
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте, сколько студентов сдали все экзамены на 5.

4
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте средний балл группы по физике.

5
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте количество хороших оценок, приобретенных группой по всем предметам.

6
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте, сколько студентов имеют средний балл от 4 до 5.

7
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте, какое количество неудовлетворительных оценок получено по всем предметам.

8
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте, какой из предметов был сдан группой лучше всего.

9
Воспользовавшись записью СТУДЕНТ из варианта №1, обусловьте, сколько студентов не имеют задолженностей.

10
Опишите запись имя, отчество), адресок (улица, номер дома, номер квартиры), пол, возраст. Обусловьте, сколько лиц дамского и сколько мужского пола проживают в одном доме.

11
Воспользовавшись записью лет и младше 60 проживают на одной улице.

12
Воспользовавшись записью АНКЕТА из варианта №10, обусловьте, сколько лиц дамского пола в возрасте старше 30 лет проживают в одном доме.

13
Воспользовавшись записью малышей до 7 лет проживают на одной улице.

14
Воспользовавшись записью сколько лиц мужского пола и дамского в возрасте до 50 лет проживают на одной улице.

15
Воспользовавшись записью малышей от 1 года до 5 проживают в одном доме.

16
Опишите запись ТРАНСПОРТ и расположите в нее последующую информацию: Ф.И.О. (фамилия, имя, отчество пассажира), багаж (количество вещей, вес в кг). Найти число пассажиров, вес багажа которых превосходит 30 кг.

17
Воспользовавшись записью ТРАНСПОРТ из варианта №16, обусловьте, имеется ли пассажир, багаж которого состоит из одной вещи весом в 20 кг.

18
Воспользовавшись записью ТРАНСПОРТ из варианта №16, обусловьте средний вес багажа.

19
Воспользовавшись записью ТРАНСПОРТ из варианта №16, обусловьте количество пассажиров, вес багажа которых превосходит средний.

20
Воспользовавшись записью ТРАНСПОРТ из варианта №16, обусловьте количество пассажиров, имеющих наиболее 3-х вещей.

Литература

1. Подбельский В.В. язык Cu ++: Учебное пособие. — М.: Деньги и статистика,1995, — 560 с.

2. Страуструп Б. язык программирования Сг ++. — М.: Радио и связь, 1991. — 352 стр.

3. Собоцинский В.В. Практический курс Turbo Cu ++. Базы объктно- нацеленного программирования. — М.: свет, 1993. — 236 с.

4. Романов В.Ю. Программирование на языке Cu ++. Практический подход. — М.: Компьтер, 1993. — 160 с.

5. Уинер Р. язык турбо Cu . — М.: Мир, 1991. — 384 с.

6. Юлин В.А., Булатова И.Р. Приглашение к Cu. — Мн.: Высш. Шк., 1990,- 224 с.

7. Котлинская Г.П., Галиновский О.И. Программирование на языке Cu. -Мн.: Высш. Шк., 1991. — 156 с.

]]>