Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на ЯВУ. Мет.ук. к лаб. работам...doc
Скачиваний:
14
Добавлен:
22.08.2019
Размер:
126.98 Кб
Скачать

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

  1. Что называется файлом? Физический и логический файлы.

  2. В чем состоит сходство и различие между массивом и файлом?

  3. Какие функции предназначены для открытия и закрытия файлов и как они работают?

  4. Как осуществляется ввод-вывод символов и символьных строк в файл?

  5. Форматированный ввод-вывод в файл.

  6. Ввод-вывод записей произвольной длины в файл.

  7. В чем отличие бинарных и текстовых файлов?

  8. Как осуществить корректировку файла (дозапись, вставка информации в файл, изменение части данных файла)?

ЛАБОРАТОРНАЯ РАБОТА №4

Динамическое управление памятью. Методические указания

В соответствии с полученным вариантом задания следует:

  1. Составить блок-схему решения задачи на уровне процедур и функций. Блок-схема должна отражать логическую структуру алгоритма.

  2. По разработанному алгоритму написать программу, удовлетворяющую следующим требованиям:

- пользовательские типы определить с помощью typedef;

- включить меню, содержащее пункты:

а) создание исходной динамической структуры данных;

б) вывод на экран информации, хранящейся в динамической структуре данных;

в) поиск заданной информации в динамической структуре;

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

д) выход из программы;

- алгоритм, соответствующий каждому пункту меню, реализовать в виде функции.

Явное объявление указателей выглядит следующим образом:

int *pi; //указатель на целое значение

int (*pMas)[10][20]; //указатель на массив целых чисел

long **pp; //указатель на указатель на переменную типа long

void *p; //нетипизированный указатель

Указатели являются статическими переменными. В начале работы программы значение указателя не определено. Указателю можно присвоить значение адреса выделенной под переменную области памяти или значение NULL – пустой адрес. После освобождения области памяти, с которой был связан указатель, его значение не определено.

Выделение и освобождение памяти под динамические переменные определенного типа выполняется функциями из библиотек alloc.h malloc.h и calloc.h:

void *malloc(unsigned n);

//Выделяет блок памяти размером n байт и присваивает адрес указателю.

void *calloc(unsigned n,unsigned size);

//Выделяет память под n элементов, каждый из которых требует для //хранения size байт. Блок памяти при этом заполняется нулями.

Для освобождения памяти, связанной с указателем, служит функция free

void free(void *p);

Примеры программ

Создать динамический список, записав в него все буквы латинского алфавита от A до Z.

#include <alloc.h>

struct elem

{

char sim;

struct elem *next;

};

struct elem *create(char a,char b)

{

struct elem *tmp,*beg;

tmp=(struct elem*)malloc(sizeof(struct elem));

tmp->sim=a;

beg=tmp;

a++;

for(char i=a;i<=b;i++)

{

tmp->next=(struct elem*)malloc(sizeof(struct elem));

tmp=tmp->next;

tmp->sim=i;

}

tmp->next=NULL;

return beg;

}

Оператор вызова процедуры имеет следующий вид:

struct elem *top;

top=create('A','Z');