Программирование циклических процессов с использованием
Многомерных массивов. Динамическое распределение памяти
Цель работы:
Изучить работу с многомерными массивами, освоить возможности динамического размещения данных.
Краткие теоретические сведения
Кроме одномерных массивов возможна работа с многомерными массивами. Объявление многомерного массива:
<тип><имя>[<размер 1 >][<размер 2 >]…[<размер N>]={{список начальных значений}, {список начальных значений},…};
Наиболее быстро изменяется последний индекс элементов массива, поскольку многомерные массивы размещаются в памяти компьютера в последовательности столбцов.
Например, элементы двухмерного массива b[2][1] размещаются в памяти в следующем порядке:
b[0][0], b[0][1], b[1][0], b[1][1], b[2][0], b[2][1].
Следующий пример иллюстрирует определение массива целого типа, состоящего из трех строк и четырех столбцов, с инициализацией начальных значений:
int a[3][4] = {{0,1,2,0},{9,-2,0,0},{-7,1,6,8}};
Если в какой-то группе {…} отсутствует значение, то соответствующему элементу присваивается 0. Предыдущий оператор будет эквивалентен следующему определению:
|
|
int a[3][4] = {{0,1,2},{9,-2},{-7,1,6,8}};
При обработке двухмерных массивов используются вложенные циклы. Например, ввод массива int a[5][4]:
for(i=0;i<5;i++)
for(j=0;j<4;j++)
scanf(“%d”,&a[i][j]);
Пример программы
Создать двухмерный массив целых чисел NxM (N и M не более 50), используя функцию rand, и вывести на экран в форме матрицы, N,M ввести с клавиатуры:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define rnd (rand()/ 32768.0) /* rand - генератор случайных чисел от
0 до int, rnd – от 0 до 1 */
void main(void)
{ int i,j,n,m,a[50][50];
puts(“\n Input n, m:”); scanf(“%d %d”,&n,&m);
printf(“\n Array a \n”);
for(i=0; i<n; i++) // Оформление вывода в виде матрицы
for(j=0; j<m; j++) {
a[i][j]=rnd*10-5; // случайные числа от –5 до 5
printf(“%d%c“, a[i][j], (j= =m-1)?’\n’:’ ‘);
}
getch();
}