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

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

Лабораторная работа № 9. Работа со структурами






 

Цель работы: научиться определять структуры, освоить формат доступа к элементам структуры и к элементам массива структур.

 

Краткие теоретические сведения

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

struct name

{
int member_name_l; | ———— Объявления элементов структуры
float member_name_2; } variable; | ———— Объявление переменной
}

Ключевое слово struct является обязательным при программировании на С, однако в C++ использовать ключевое слово struct необязательно. Пусть дана структура:

struct book {

char title[100]; //наименование книги

char author[100]; //автор

int year; //год издания

};

Для того чтобы объявить переменную для структуры с именем book используется такая запись:

struct book lib; //объявляется переменная типа book

После объявления переменной lib имеется возможность работать со структурой как с единым объектом данных, который имеет три поля: title, author и year. Обращение к тому или иному полю структуры осуществляется через точку: lib.title, lib.author и lib.year. Таким образом, для записи в структуру информации можно использовать следующий фрагмент программы:

printf(“Введите наименование книги: “);

scanf(“%s”, lib.title);

printf(“Введите автора книги: “);

scanf(“%s”, lib.author);

printf(“Введите год издания книги: “);

scanf(“%d”, & lib.year);

После этого в соответствующие поля будет записана введенная с клавиатуры информация и хранится в единой переменной lib.

Если функция не изменяет структуру, вы можете передать структуру в функцию по имени. Если функция изменяет элемент структуры, вы должны передавать эту структуру в функцию с помощью адреса. Для передачи переменной типа структуры с помощью адреса вы просто предваряете имя переменной оператором адреса C++ (&), как показано ниже:

some_function(& worker);

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

pointer_variable-> member = some_value;

Задание

1. Составить блок-схему алгоритма и программу в соответствии с заданным вариантом.

2. Составить отчет о проделанной работе (аналогично отчету для лабораторной работы №1)

 

Пример выполнения работы

Условие: В соревнованиях по фигурному катанию участвуют пары из разных городов. Имеются следующие сведения о каждой паре:

- фамилии, имена партнеров;

- город, откуда прибыла данная пара;

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

Подсчитать процент иногородних пар (допустим, что соревнования проходят в городе N).

 

#include< stdlib.h>

#include< string.h>

#include< stdio.h>

#include < windows.h>

#include < wincon.h>

 

#define CB 10 //Число судей

 

struct Sport

{

char* name;

char* town;

int ball[CB];

};

 

void print_sp(struct Sport* sp, int n);

double procent(struct Sport* sp, int n, char*t);

 

void main()

{

SetConsoleOutputCP(1251);

const int n=5;

struct Sport spms[n]=

{

{" Ivanov Ivanova", " Moscow", {5, 6, 5, 4, 5, 6, 6, 8, 3, 2}},

{" Petrov Petrova", " Kiev", {4, 7, 7, 8, 9, 10, 6, 6, 7, 3}},

{" Sidorov Sidorova", " Tomsk", {4, 6, 7, 8, 9, 10, 6, 7, 7, 2}},

{" Kotov Kotova", " Lipetsk", {2, 4, 6, 7, 8, 9, 5, 6, 7, 3}},

{" Frolov Frolova", " Moscow", {5, 7, 5, 7, 5, 4, 6, 8, 3, 2}}

};

print_sp(spms, n);

char str[]=" Moscow";

double pri;

pri=procent(spms, n, str);

printf(" Процент иногородних пар = %lf", pri);

}

/*

Функция выводит на экран массив элементов типа struct Sport.

*/

void print_sp(struct Sport* sp, int n)

{

int i, j;

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

{

printf(" %-18s%-10s", sp[i].name, sp[i].town);

for(j=0; j< CB; j++)

printf(" %2d", sp[i].ball[j]);

puts(" ");

}

}

/*

Функция возвращает процент иногородних пар.

sp – исходный массив структур из n элементов;

t – строка, содержащая название города, в котором проходят соревнования.

*/

double procent(struct Sport* sp, int n, char*t)

{

int count = 0;

int i;

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

if(strcmp(sp[i].town, t)! = 0)

count++;

 

double pr;

pr=((double)count/n)*100;

return pr;

}

 

Задания для самостоятельного выполнения

Создать структуру «студент» со следующими данными: фамилия, имя, отчества, пол, факультет, курс, группа, отметки по пяти предметам, город (село) проживания. Сформировать текстовый файл со списком студентов. Для каждого пункта характеристики студента выделять строку. Данные о студентах отделяются друг от друга пустыми строками. Для выполнения задания данные из текстового файла ввести в массив структур программы.

1. Сформировать список студентов, в котором студенты-задолжники расположены по алфавиту. Список выдать на экран. Студентов-задолжников при выводе пометить.

2. Сформировать список студентов, в котором студенты-задолжники по двум предметам расположены по алфавиту. Список выдать на экран. Студентов-задолжников при выводе пометить.

3. Сформировать список студентов, в котором студентки-отличницы расположены по алфавиту. Список выдать на экран. Студенток-отличниц при выводе пометить.

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

5. Сформировать список студентов, в котором студенты расположены по алфавиту мест проживания. Список выдать на экран.

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

название передачи;

жанр передачи (например, художественный фильм, реклама; информационная программа, детская передача и т.д.);

время выхода в эфир (начало - часы, минуты, конец - часы, минуты).

Подсчитать количество художественных фильмов, показанных за эти сутки.

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

название передачи;

жанр передачи (например, художественный фильм, реклама; информационная программа, детская передача и т.д.);

время выхода в эфир (начало - часы, минуты, конец - часы, минуты).

Подсчитать суммарную длительность рекламы за сутки.

8. В таблице собраны следующие сведения о государствах Африки:

название государства;

территория (в тыс. кв. км);

численность населения (в млн. чел.);

имеется ли морская граница (да, нет);

столица.

Подсчитать количество стран, численность населения которых превышает заданную величину.

9. В таблице собраны следующие сведения о государствах Африки:

название государства;

территория (в тыс. кв. км);

численность населения (в млн. чел.);

имеется ли морская граница (да, нет);

столица.

Среди государств, имеющих морскую границу, определить то, численность населения которого максимальна.

10. В таблице собраны следующие сведения о государствах Африки:

название государства;

территория (в тыс. кв. км);

численность населения (в млн. чел.);

имеется ли морская граница (да, нет);

столица.

Среди государств, имеющих морскую границу, определить самое большое по занимаемой территории.

11. В магазине детских товаров есть сведения об имеющихся в продаже игрушках:

название игрушки (например, кукла, мяч, конструктор и т.п.);

адрес завода-изготовителя (город, улица, номер дома);

стоимость игрушки (в рублях);

возрастная категория, на которую ориентирована данная игрушка (например, от 2 до 5 лет);

может ли игрушка использоваться для спортивных игр (да или нет).

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

12. В соревнованиях по фигурному катанию участвуют пары из разных городов. Имеются следующие сведения о каждой паре:

фамилии, имена партнеров;

город, откуда прибыла данная пара;

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

Определить количество пар из города N, участвующих в соревновании.

13. В школьной администрации имеется следующая информация о каждом выпускнике 11 классов:

фамилия, имя, отчество;

дата рождения (год, месяц, число);

домашний адрес (улица, дом, квартира);

оценки аттестата о среднем образовании.

Определить, есть ли в этом списке выпускник Белкин Сергей Ильич.

Контрольные вопросы

1. Где может быть использована структура?

2. Как называются элементы структуры?

3. Как определить структуру?

4. Может ли структура содержать элементы одного типа?

5. Как обратиться к полям структуры?

6. Как обратится к элементу массива структур?

7. Какое ключевое слово начинает определение структуры?

8. Как обратиться к полям структуры через указатель на нее?

9. При помощи какой операции формируется доступ к полям структуры?

10. Какая разница между определениями структуры и массива?

11. Опишите объект, для которого надо определить структуру и опре-

делите ее.

 







Дата добавления: 2014-11-10; просмотров: 2279. Нарушение авторских прав; Мы поможем в написании вашей работы!



Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

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

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

Особенности массовой коммуникации Развитие средств связи и информации привело к возникновению явления массовой коммуникации...

Тема: Изучение приспособленности организмов к среде обитания Цель:выяснить механизм образования приспособлений к среде обитания и их относительный характер, сделать вывод о том, что приспособленность – результат действия естественного отбора...

Тема: Изучение фенотипов местных сортов растений Цель: расширить знания о задачах современной селекции. Оборудование:пакетики семян различных сортов томатов...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

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

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