Работа со структурами в языке программирования Си++
Структура – это объединение одного либо более объектов (переменных, массивов, указателей, других структур). Понятие структурной переменной. Создание массивов структур. Использование вложенных структур в виде элементов массивов person, date, pibm.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 15.07.2010 |
Размер файла | 17,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Лабораторная работа №6
“Работа со структурами в языке программирования Си++”
Цель работы: познакомиться с понятием структуры и структурной переменной. Научиться создавать массивы структур и работать со вложенными структурами.
Теоретические сведения
Структура - это объединение одного либо более объектов (переменных, массивов, указателей, других структур). Как и массив, она представляет собой совокупность данных, но отличается от него тем, что к ее элементам необходимо обращаться по имени, и ее различные элементы не обязательно должны принадлежать одному типу.
Структуры удобно использовать там, где разнообразные данные, относящиеся к одному и тому же объекту, необходимо объединять. Например, ученика средней школы характеризуют следующие данные: фамилия, имя, дата рождения, класс, возраст.
Объявление структуры осуществляется с помощью ключевого слова 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 (“ персональная ЭВМ % s\n\n “, 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 месяц”
“ и год рождения гражданина ind1\n”);
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 (“ персональная ЭВМ %s\n ”, 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
Задание
Из таблицы взять задание по варианту и написать программу.
Содержание отчета
Отчет должен содержать:
задание к работе;
программу;
результаты расчетов.
№ вар. |
Задание |
|
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, определите количество пассажиров, имеющих более трех вещей. |
Литература
Подбельский В.В. Язык Cu ++: Учебное пособие. - М.: Финансы и статистика,1995, - 560 с.
Страуструп Б. Язык программирования Сг ++. - М.: Радио и связь, 1991. - 352 стр.
Собоцинский В.В. Практический курс Turbo Cu ++. Основы объктно- ориентированного программирования. - М.: Свет, 1993. - 236 с.
Романов В.Ю. Программирование на языке Cu ++. Практический подход. - М.: Компьтер, 1993. - 160 с.
Уинер Р. Язык турбо Cu . - М.: Мир, 1991. - 384 с.
Юлин В.А., Булатова И.Р. Приглашение к Cu. - Мн.: Высш. Шк., 1990,- 224 с.
Котлинская Г.П., Галиновский О.И. Программирование на языке Cu. -Мн.: Высш. Шк., 1991. - 156 с.
Подобные документы
Способы ограждения пользователей от деталей фактического устройства данных. Список описателей переменных, указателей или массивов. Статические или динамические структуры данных. Доступ к различным элементам данных. Добавление и удаление элементов.
презентация [57,8 K], добавлен 14.10.2013Разработка программ на языке Turbo Pascal на основе использования массивов данных. Особенности хранения данных, способы объявления переменных, действия над элементами массивов, их ввод и вывод. Практическое применение одномерных и многомерных массивов.
методичка [17,8 K], добавлен 25.11.2010Понятие массива и правила описания массивов в программах на языке С. Рассмотрение основных алгоритмов обработки одномерных массивов. Примеры программ на языке С для всех рассмотренных алгоритмов. Примеры решения задач по обработке одномерных массивов.
учебное пособие [1,1 M], добавлен 22.02.2011Реализация различных методов сортировки. Алгоритмические языки программирования. Обработка большого числа единообразно организованных данных. Алгоритмы сортировки массивов. Анализ проблем реализации и использования различных видов сортировок массивов.
курсовая работа [640,3 K], добавлен 07.07.2011Использование класса статических массивов структур и базы данных "ODER" при создании программы на языке С++. Основные формы выдачи результатов. Технические и программные средства. Тесты для проверки работоспособности алгоритма создания программы.
курсовая работа [1,1 M], добавлен 17.03.2015Обработка сложных структур данных как одна из наиболее распространенных возможностей применения языка программирования С++. Преимущества использования подпрограмм. Передача параметров, одномерных и двумерных массивов, функции и их возврат в функцию.
курсовая работа [1,1 M], добавлен 24.11.2013Особенности создания массивов в AutoCAD 2012, основные команды. Создание прямоугольного массива путем размножения выбранных элементов с заданным количеством рядов и столбцов, образующих прямоугольную матрицу. Этапы проектирования кругового массива.
курсовая работа [1,1 M], добавлен 20.05.2014Разработка и реализация типовых алгоритмов обработки одномерных массивов на языке Delphi. Максимальный и минимальный элемент массива. Значение и расположение элементов массива. Элементы массива, находящиеся перед максимальным или минимальным элементом.
лабораторная работа [12,8 K], добавлен 02.12.2014Основные операции над матрицами. Формирование матрицы из файла. Ввод матрицы с клавиатуры. Заполнение матрицы случайными числами. Способы формирования двухмерных массивов в среде программирования С++. Произведение определенных элементов матрицы.
курсовая работа [537,0 K], добавлен 02.06.2015Ознакомление с основными понятиями и организацией ввода-вывода, обработкой массивов. Описание одномерных и двумерных массивов. Описание строк и операции с ними. Комбинированный тип данных - записи. Характеристика записей, использующих вариантную часть.
реферат [84,6 K], добавлен 09.02.2011