Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

C_Kurs_Lekt / DOC_RAZNOE / Лаб раб 8-9 Работа с масивами

.pdf
Скачиваний:
13
Добавлен:
13.02.2016
Размер:
97.76 Кб
Скачать

Лабораторные работы №8, 9.

Работа 8 – одномерные массивы (векторы)

Работа 9 – двумерные массивы (матрицы)

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

Рассмотрим несколько примеров:

Для динамического выделения памяти используют функции: malloc, calloc, realloc, free (#include stdlib.h)

Мы будем использовать calloc – для выделения памяти и заполнения ее нулями и free для очистки (освобождения) памяти.

ВЕКТОРЫ 1) Целые числа

int n=15; // n – число элементов int *vekt; // указатель на массив

vekt = (int *)calloc(n,sizeof(int)); // выделение (без проверки) // … работаем с вектором, например,

vekt[10]= 12;

free(vekt); // очистка памяти

При работе с памятью лучше выполнять проверку правильности выделения памяти:

Т.е. вместо

vekt = (int *) calloc(n, sizeof(int));

пишем:

if(vekt =(int *)calloc(n, sizeof(int)) ==NULL) { printf("Ошибка выделения памяти!!! \n"); exit(1);

}

т.е. если программе не удалось выделить память – мы завершаем работу программы или пишем код для повторной попытки выделения памяти.

2)Действительные числа (для экономии места – пишем без проверки правильности выделения памяти)

int n=15; // n – число элементов double *vekt; // указатель на массив

vekt = (double *)calloc(n,sizeof(double)); // выделение (без проверки) // … работаем с вектором, например,

vekt[10]= 12.34; free(vekt); // очистка памяти

МАТРИЦЫ (двумерные массивы) 1) Целые числа

int n=5; // n – числострок

int m=7; // m – число столбцов

int **matrix; // указатель на указатель на целое ( матрица ) matrix = (int **)calloc(n,sizeof(int *));

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

matrix[i] = (int *)calloc(n,sizeof(int)); // … работаем с матрицей, например, matrix[1][6]= 5;

for(i=0; i <n; i++) free(matrix[i]);

free(matrix); // очистка памяти

2) Действительные числа int n=5; // n – числострок

int m=7; // m – число столбцов

double **matrix; // указатель на указатель на целое ( матрица ) matrix = (double **)calloc(n,sizeof(double *));

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

matrix[i] = (double *)calloc(n,sizeof(double)); // … работаем с матрицей, например, matrix[1][6]= 5.71;

for(i=0; i <n; i++) free(matrix[i]); free(matrix);

Как это выглядит в памяти ?

1)Для вектора

2)Для матрицы

Получение «случайных» чисел (псевдослучайных) CodeBlock

Для работы необходимо #include stdlib.h

1)

Целые числа от а до b - [a,b] a + rand()%(b – a + 1)

2)

Действительные числа от а до b - [a, b]

a + (double)rand()/RAND_MAX*(b – a)