Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка С++№3.doc
Скачиваний:
5
Добавлен:
19.11.2019
Размер:
103.94 Кб
Скачать

8

Лабораторная работа 3

РАБОТЫ СО СТРУКТУРАМИ

Цель работы: Закрепление знаний о структурах, составление программ с применением структур.

Теоретическое обоснование

Работа со строками

Строки в языке С++ представляются массивами символов. Признаком конца строки является ноль.

Для объявления строки длиной N символов, необходимо объявить массив char размером N+1 символ, т. к. последний символ строки является нулем:

char[5]=”word”; //правильно, 4 буквы, последний символ 0.

char[5]=”слово”; //неправильно, не хватает одного символа.

Для работы со строками в языке С++ используются стандартные функции, которые описаны в библиотечном файле string.h. Рассмотрим эти функции.

Функция определения длины строки strlen (s). Определяет длину строки s.

Функция копирование строки strcpy (s1, s2). Копирует содержимое строки s2 в строку s1. Массив s1 должен быть достаточно вместительным. Если при копировании места не хватает, то компилятор не выдает сообщение об ошибке и программа может работать, но неправильно.

Функция сцепления строк strcat (s1, s2). Присоединяет строку s2 к строке s1 и помещает новую строку s1. Строка s2 не изменяется. При этом, как и в предшествующем случае, нет никакого контроля. Нулевой байт строки s1 заменяется первым символом строки s2. Новая строка автоматически завершается нулевым байтом.

Функция сравнения строк strcmp (s1, s2). Результат: минус 1 –первая строка меньше второй; 1 – первая строка больше второй; 0 – строки равны.

Функция поиска подстроки в строке strstr (s1, s2). Поиск в строке s1 строки s2. Результат: 0 – строка не найдена; не 0 – номер позиции с которой строка s2 входит в строку s1.

Функция поиска символа в строке strchr (s, smb). Поиск символа smb в строке s. Результат: 0 – символ не найден; не 0 – номер позиции найденного символа в строке.

Функция strupr (s) делает все буквы строки s прописными (заглавными).

Функция strlwr (s) делает все буквы строки s строчными.

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

#include <string.h>

#include <iostream.h>

int main(){

char one[4]="ura"; //описание первой строки

char two[6]=""; // описание второй пустой строки

strcat(two,one); //добавление ко второй строке первой

cout<<two<<"\n";

strcat(two,"!"); // добавление ко к второй строке восклицательного знака

cout<<two<<"\n";

return 0;}

Пример 5.2. Дан массив из трех строк. Программа выводит на экран строки из массива в которых есть буква «а».

#include <string.h>

#include <iostream.h>

int main(){

char s[3][5]={"ghaj","rtrd","fgah"}; //описание массива из трех строк

for (int n=0;n<3;n++) //задаем цикл по строкам

if(strchr(s[n],'a')) //проверка наличия символа «а» в текущей строке

cout<<s[n]<<"\n";

return 0;}

Структуры

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

Структура в языке Си++ состоит из фиксированного числа элементов одного или нескольких типов. Формат описания структуры:

struct имя_структуры

{ тип_поля_1 имя_поля_1;

тип_поля_2 имя_поля_2;

тип_поля_N имя_ поля_N;};

Элементами или полями структуры могут быть переменные, массивы, ранее определенные структуры. Обращения к какому-либо элементу структуры имеет следующий формат: имя_структуры. имя_поля.

Пример 6.3. Структура содержит сведения о студентах: ФИО студента, курс, возраст.

struct student

{ char name[50];

   int kurs;

   int age; };

Чтобы использовать структуру необходимо объявить переменные типа struct student:

struct student s1, s2;

Переменные s1 и s2 являются переменными типа struct student. Компилятор автоматически выделит память под эти переменные. Обращение к полям структуры:

s1.kurs=3;

s1.age=20;

Для переменных s1 и s2 возможно присваивание s1=s2.

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

struct student stud1[10];

Здесь stud1 – имя массива структур, а stud1[0] – это первая структура, stud1[1] – вторая... stud1[9] – десятая структура. Чтобы получить доступ к полю age пятой структуры нужно написать

stud1[4].age

Чтобы получить доступ к полю kurs первой структуры нужно написать

stud1[0].kurs

Методика и порядок выполнения работы

1. Изучите теоретическое обоснование.

2. Проанализируйте, введите и выполните примеры 6.1 и 6.2.

3. Составьте блок-схемы и выполните программы работы со строками согласно вариантам (таблица 6.1), введите исходные данные, проанализируйте полученные результаты.

4. Проанализируйте, введите и выполните приведенный пример.

Дана информация о пяти товарах. Структура tovar содержит поля: наименование товара namе[20]; количество товара kol; цена товара cena. Определить суммарное количество товара.

//struct.c работа со структурами

#include <iostream.h>

struct tovar{char name[20]; int kol; float cena;} t[5];

int SumKol, N=5; //суммарное количество товаров

int main() {

for (i=0; i<N; i++){

cout<< "\n Введите наименование товара ";

cin >> t[i].name;

cout<< "\n Введите количество товара, шт";

cin >> t[i].kol);

cout<< "\n Введите цену товара, руб/кг ");

cin >> t[i]1.cena);}

SumKol=0;

for (i=0; i<N; i++) SumKol+= t[i].kol;

cout<< "Суммарное количество товара ", SumKol, " шт\n");

return 0;}

5. Составьте блок-схему и выполните программу работы со структурами согласно вариантам (таблица 6.2), введите исходные данные, проанализируйте полученный результат.

Таблица 6.1– Варианты заданий

№ вар.

Условия заданий

1

2

1

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

2

Дан массив из N структур. Структура содержит поля: фамилия, количество вещей, общий вес, рейс. Вывести на экран сведения о багаже, общий вес которого больше 20 кг.

Продолжение таблицы 6.1

1

2

3

Дан массив из N структур. Структура содержит поля: название поставщика, наименование товара, количество. Вывести информацию о товарах, поставляемых заданным поставщиком.

4

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

5

Дан массив из N структур. Структура содержит поля: фамилия, имя, пол, год рождения, месяц рождения. Вывести на экран дисплея фамилии и имена студентов мужского пола, родившихся весной.

6

Дан массив из N структур. Структура содержит поля: номер поезда, станция назначения, время отправления, время в пути. С экрана вводится интересующая станция. Вывести информацию о поездах, идущих к данной станции.

7

Дан массив из N структур. Структура содержит поля: фамилия, имя, номер автомобиля, марка автомобиля, цвет. С клавиатуры вводится интересующая марка автомобиля. Вывести сведения о владельце.

8

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

9

Дан массив из N структур. Структура содержит поля: вид спорта, количество секций, количество спортсменов в секции. Вывести общее число спортсменов.

10

Дан массив из N структур. Структура содержит поля: марка автобуса, скорость, вместимость. Вывести общую вместимость автобусов со скоростью не ниже 80 км/ч.

11

Дан массив из N структур. Структура содержит поля: наименование фабрики, год основания, число работающих. Вывести общее число работающих на фабриках основания до 2010 года.

12

Дан массив из N структур. Структура содержит поля: фамилия, группа, успеваемость. Вывести количество отличников.

Продолжение таблицы 6.1

2

13

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

14

Дан массив из N структур. Структура содержит поля: название пункта назначения, номер поезда, цена билета. Вывести количество поездов, на которые цена билета меньше 500 рублей.

15

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

16

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

17

Дана информация о вкладчиках в сберкассы. Структура имеет вид: № счета, фамилия, социальное положение, величина вклада. Вывести данные о том, сколько среди вкладчиков служащих, рабочих и колхозников.

18

Дана информация о больных. Структура имеет вид: фамилия, возраст, пол, давление. Вывести данные о больных женского пола с повышен­ным давлением (больше 140), затем о мужчинах с пониженным давлением.

19

Дана информация о студентах. Структура имеет вид: фамилия, год рождения, место рождения, факультет. Вывести дан­ные о старших по возрасту студентах, предполагая, что год рождения может быть одинаков.

20

Дана информация о студентах. Структура имеет вид: № зачетки, фамилия, год рождения, факультет. Вывести дан­ные о студентах по факультетам и определить, где их больше всего.

21

Дана информация о комнатах в общежитии. Структура имеет вид: фамилии, номер комнаты, площадь. Вывести данные о комнате, в которой наименьшая площадь (возможно размер площади повторяется).

22

Дана информация о квартирах. Структура имеет вид: фами­лия владельца, площадь, число комнат, этаж. Вывести данные о квартирах с самой большой площадью и самой маленькой.

23

Дана информация о клиентах фирмы и договорах, заключенных с ними в виде: фамилия клиента, месяц истечения договора, год истечения договора. Вывести на экран список клиентов, договор с которыми истекает в августе 2008 года.

24

Дана информация об автомобилях: марка автомобиля, страна изготовитель, стоимость. Вывести на экран сведения об автомобилях марка которых вводится с клавиатуры, а стоимость находится в интервале от 70 до 520 тыс.руб

25

Дана информация о протоколе лыжных гонок. Для каждого участника вводится фамилия, время старта (часы, минуты), время финиша (часы, минуты). Вывести на экран дисплея фамилии участков, выполнивших норму ГТО, которая вводится в минутах с клавиатуры.

26

Дана информация о школах. Структура имеет вид: номер школы, год, количество выпускников, число поступивших в ВУЗы. Вывести данные о школе с самым большим отношением числа поступивших к числу выпускников.

27

Дана информация о поездах, отправляющихся с Ленинградского вокзала г.Москвы: номер поезда, станция назначения, время отправления, время в пути. Вывести на экран информацию о поездах, следующих в Санкт-Петербург и находящихся в пути менее 8 часов. Посчитать среднее время в пути.

28

Дана информация о магазинах, продающих компьютеры. Структура имеет вид: фирма-производитель, цена, количество. Вводится сумма имеющихся в наличии денег. Вывести данные о компьютерах, которые можно купить на эту сумму по максимуму.

29

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

30

В чемпионате по волейболу принимают участие 5 команд. Дана информация: название команды, игра1, игра2, игра3 (где выигрыш -2очка, проигрыш -0, ничья-1). Каждая команда сыграла по 3 игры. Вывести на экран названия трех победителей (по числу очков) и количество побед каждой команды.