Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабы / 5_6_7_8_new.doc
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
445.92 Кб
Скачать

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

1) Что может возвращать функция с помощью указателя в return?

2) Как можно возвратить из функции с помощью оператора return одномерный или двумерный динамический массив?

3) Что такое рекурсивная функция, какова ее структура?

4) Указатели на функции (определение указателя, массива указателей, определение типа указателя на функцию).

5) Как указатели на функции используются как параметры функций?

6) Что такое рекуррентная формула?

2.7. Варианты заданий лабораторной работы

  1. , при ;

= , при ;

берется со знаком «+» при и со знаком «-» при ;

  1. = , ;

= , при ;

= , при ;

  1. , при ;

  2. , ;

  3. , ;

  4. , ;

  5. , ;

  6. , при ;

  7. , при ;

  8. , при ;

  9. , при ;

  10. , при

  11. при ;

  12. , при ;

  13. , ;

  14. при ;

  15. при ;

  16. , при ;

  17. , при ;

, при ;

, при ;

  1. , при ;

  1. , при ;

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

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

3.1 Цель лабораторной работы

Целью лабораторной работы является освоение:

- правил объявления и работы с переменными структурных типов - структур, массивов структур, указателей на структуры;

- правил обращения к элементам структур и элементам массива структур;

- ввода и вывода значений элементов массива структур;

  • методов форматирования вывода данных в текстовой файл;

  • алгоритма поиска данных в массиве структурных данных.

3.2 Теоретические сведения Структура как совокупность данных

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

Массивы также объединяют одним именем множество элементов, но все элементы должны быть одного типа.

Элементы структуры могут быть разных типов и все они должны иметь различные имена. Перед определением структуры надо дать описание ее структурный тип, который и задает внутреннее строение структуры.

Введем простейший формат описания структурного типа:

struct <имя типа> {список компонентов структуры через ‘;’};

Пример определение структурного типа для определения структур, содержащих данные о студенте:

- ФИО студента (сhar fio [] ;);

- номер зачетки (unsigned int);

- отметки сессии (unsigned int mark [ ]);

- средний балл по результатам сессии (float).

struct student {

char fio [40];

unsigned int nz;

unsigned int mark [3];

float ball;

};

После определения типа можно определять конкретные структуры этого типа, массивы структур, указатели на структуру:

student st, stm [30], * pst;

Для обращения к элементу структуры чаще всего используется уточненное имя:

<имя структуры>.<имя элемента структуры>

Символьные данные можно представлять двумя способами.

Первый способ - в виде символьного массива:

сhar fio [40];

В этом случае имени массива нельзя присваивать строку, так как имя массива – указатель константа и присвоить ему новый адрес строковой константы нельзя. То есть,

st.fio = "Петров"; – не допустимо!

Чтобы поместить в это поле строку с фамилией надо воспользоваться функцией копирования:

strcpy (st.fio, "Петров");

Функция char* strcpy (char*s1, char* s2), описанная в модуле string.h, копирует символы строки s2 в строку s1 и возвращает строку s1.

Допустимо также введения значения компонента с клавиатуры, так как память под массив fio выделена:

cin>> st.fio; - допустимо.

Второй способ – символьные данные, например, фамилию в структуре можно было представлять, используя указатель:

char* FIO;

и тогда была бы допустима операция присваивания указателю адреса строки:

st.FIO ="Григорьев";

При объявлении указателя в качестве компонента структуры для представления массива символов (например, – фамилии студента) выделяется память только на указатель, а на элементы массива память не выделяется.

Если в данном случае надо ввести значение строки, например, с клавиатуры или из файла, следует выделить участок памяти динамически и присвоить указателю FIO адрес участка. Затем произвести ввод строки:

st.FIO=new char [40];

cin>> st.FIO;

При определении структуры можно провести её инициализацию – задание начальных значений её элементов, например, так:

student one =

{"Петров", 4123, {4, 3, 2}, (one.mark [0] +one.mark [1] +one.mark [2])/3.0};

Так как структурный тип обладает всеми правами типов, можно определять указатели на структуры:

<имя структурного типа> * <имя указателя на структуру> =

<инициирующее выражение>

Например,

student * ptr = &one; //указатель на структуру инициирован

// адресом структуры one

После того как указатель получил в качестве значения адрес структуры появляются возможности обращаться к элементам структуры, используя указатель:

1) имя указателя -> имя элемента структуры

cout<<ptr ->fio;

2) разыменование указателя и формирование уточненного имени:

(*имя указателя). имя элемента структуры

cout<< (*ptr ).fio ;

Выделение памяти под структуру или массив структур можно осуществлять динамически, во время исполнения программы.

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

student * ptr = new (student); …

delete ptr;

ptr = new student [10]; …

delete [] ptr;

Соседние файлы в папке лабы