Объявления двумерного массива выполняется аналогично одномерному вместе с объявлением всех переменных программы

<тип> name [n][m];

где: n – количество строк в массиве, целое число.

m – количество элементов в строке массива, целое число.

Например

int b[5][6], q[10][15];

float y[7][5];

 

Обращение к элементу матрицы выполняется через индексы элементов.

a[0][0] a[1][2] a[i][j] a[9][3]

y[0][0] y[0][1]... y[5][7]

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

Начальные индексы у элементов многомерных массивов равны 0.

Индексы для элементов массива d[3][4]:

       

d[0][0] d[0][1] d[0][2] d[0][3]

d[1][0] d[1][1] d[1][2] d[1][3]

d[2][0] d[2][1] d[2][2] d[2][3]

 

 

4.4.2 Инициализация многомерных массивов:

 

int t[3][4] = { {2, 7, -1, -10},   

            {5, 12, 18, -3},     

            {11, -8, 25, 4} };

                            

Для работы с многомерными массивами чаще всего используются сложные циклы for. Количество операторов цикла for равна размерности массива. Параметрами этих циклов является индексы элементов массива.

 

4.4.3 Ввод значений элементов матрицы

 

С помощью клавиатуры

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

for(j=0; j<m; j++)

   scanf(“%d”, &a[i][j]);

 

 

С помощью датчика случайных чисел

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

for(j=0; j<m; j++)

   a[i][j]= 10+0.001*rand();

 

 

4.4.4 Вывод элементов матрицы  на печать

 

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

{

printf(“\n”);

for(j=0; j<m; j++)

printf(“ %6.2f ”, a[i][j]);

}

 

Пример 4.4. Задана матрица действительных чисел, размером 10х9. Найти сумму всех отрицательных элементов. Результат – простая переменная

 

 

 

 

Int main()

{

float a[10][9], s;

int i,j;

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

{

printf("\n");

for (j=0; j<9; j++)

{

 a[i][j]=-5+0.001*rand();

 printf("%6.1f",a[i][j]);

}

}

s=0;

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

for(j=0; j<9; j++)

if(a[i][j]<0) s=s+a[i][j];

printf("\n сумма= %6.2f",s);

return 0;

 }

 

Пример 4.5. Задан массив A размером 10х9. Найти суммы положительных элементов в каждой строке. Результат - одномерный массив.

 

Текст програми

void main()

{

float a[10][9], s[10];

int i,j;

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

 {

 printf("\n");

 for (j=0; j<9; j++)

 {

a[i][j]=-5+0.001*rand();

printf("%6.1f",a[i][j]);

}

}

printf("\n");

printf("\n");

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

{

s[i]=0;

for(j=0; j<9; j++)

if(a[i][j]>0) s[i]=s[i]+a[i][j];

}

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

printf(" %5.0f",s[i]);

  }

 

Приклад 4.6. В матрице размером 8х8 найти значение и положение максимального элемента, лежащего выше главной диагонали

 

 

 


 Текст програми

void main()

{

float a[8][8],max;

int i,j,nstr,nstb;

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

 {

 printf("\n");

 for (j=0; j<9; j++)

 {

a[i][j]=-5+0.001*rand();

printf("%6.1f",a[i][j]);

}

}

printf("\n");

max=-1000;

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

{

for(j=i+1; j<9; j++)

if(a[i][j]>max){max=a[i][j];nstr=i; nstb=j;}

}

  

printf("%d %d %5.1f",nstr, nstb, max);

  }

 





double arrow
Сейчас читают про: