Студопедия — Лабораторная работа № 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; просмотров: 2269. Нарушение авторских прав; Мы поможем в написании вашей работы!



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

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

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

Логические цифровые микросхемы Более сложные элементы цифровой схемотехники (триггеры, мультиплексоры, декодеры и т.д.) не имеют...

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

Дренирование желчных протоков Показаниями к дренированию желчных протоков являются декомпрессия на фоне внутрипротоковой гипертензии, интраоперационная холангиография, контроль за динамикой восстановления пассажа желчи в 12-перстную кишку...

Деятельность сестер милосердия общин Красного Креста ярко проявилась в период Тритоны – интервалы, в которых содержится три тона. К тритонам относятся увеличенная кварта (ув.4) и уменьшенная квинта (ум.5). Их можно построить на ступенях натурального и гармонического мажора и минора.  ...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

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

Законы Генри, Дальтона, Сеченова. Применение этих законов при лечении кессонной болезни, лечении в барокамере и исследовании электролитного состава крови Закон Генри: Количество газа, растворенного при данной температуре в определенном объеме жидкости, при равновесии прямо пропорциональны давлению газа...

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