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

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

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


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


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


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


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


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


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


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


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


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


Например:


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-й ученик учится в третьем классе, а последующие строки – его дату рождения: 5.04.79.


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


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


#include < stdio.h >


struct computer { int mem;


int sp;


char model [20]; };


/* Объявление записи типа computer, состоящей из трех элементов: 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, которая состоит из трех элементов: 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 (первый цикл for); вывод на экран сведений о ПЭВМ (второй цикл 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 Воспользовавшись записью АНКЕТА из варианта №10, определите, сколько лиц мужского пола в возрасте старше 18 лет и младше 60 проживают на одной улице.
12 Воспользовавшись записью АНКЕТА из варианта №10, определите, сколько лиц женского пола в возрасте старше 30 лет проживают в одном доме.
13 Воспользовавшись записью АНКЕТА из варианта №10, определите, сколько детей до 7 лет проживают на одной улице.
14 Воспользовавшись записью АНКЕТА из варианта №10, определите, сколько лиц мужского пола и женского в возрасте до 50 лет проживают на одной улице.
15 Воспользовавшись записью АНКЕТА из варианта №10, определите, сколько детей от 1 года до 5 проживают в одном доме.
16 Опишите запись ТРАНСПОРТ и поместите в нее следующую информацию: Ф.И.О. (фамилия, имя, отчество пассажира), багаж (количество вещей, вес в кг). Определить число пассажиров, вес багажа которых превышает 30 кг.
17 Воспользовавшись записью ТРАНСПОРТ из варианта №16, определите, имеется ли пассажир, багаж которого состоит из одной вещи весом в 20 кг.
18 Воспользовавшись записью ТРАНСПОРТ из варианта №16, определите средний вес багажа.
19 Воспользовавшись записью ТРАНСПОРТ из варианта №16, определите количество пассажиров, вес багажа которых превосходит средний.
20 Воспользовавшись записью ТРАНСПОРТ из варианта №16, определите количество пассажиров, имеющих более трех вещей.

Литература


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 с.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Работа со структурами в языке программирования Си

Слов:1866
Символов:15628
Размер:30.52 Кб.