PAPAmidNIHGT - 7 months ago 39
C Question

# How to print main diagonal of matrix and how to fill matrix with random numbers

I have matrix

`a[i][j]`
for example
`i = j = d`
(for example
`3`
) . How can I fill it with random numbers and then I need to show main diagonal and another diagonal over and below matrix. Almost all examples that I found were for c++ but I need to do it in C.

I thought about
`cycle`
but I don't know how to use it. According to my idea it should take point
`a[0][0]`
and
`i = 0`
,
`i++`
,
`i < d`
and
`j=0`
,
`j++`
,
`j < d`
. This will be main diagonal. And another one is
`i = d`
,
`i--`
,
`j=0`
,
`j++`
. Therefore it will take both diagonals and then print it though
`printf`

It should look like this

``````1  6  11 16  - main diagonal

13 10 7  4   - additional diagonal
``````

``````1  2   3   4

5  6   7   8

9  10  11  12  - random matrix

13 14  15  16
``````

``````1  6  11  16 - main diagonal

13 10 7   4  - additional diagonal
``````

Answer

Here is a version that populates a square matrix with random numbers, and then stores the primary and secondary diagonals in two arrays. These two arrays are filled at the same time in a single loop. Then the program displays the contents of each of the three arrays.

``````#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
size_t d = 4;
int a[d][d];
int primary[d], secondary[d];
size_t i, j;

srand(time(NULL));

/* Fill array with random numbers */
for (i = 0; i < d; i++)
for (j = 0; j < d; j++)
a[i][j] = rand() % 100;

/* Store diagonals */
for (i = 0; i < d; i++) {
primary[i] = a[i][i];
secondary[i] = a[d - (i + 1)][i];
}

/* Display arrays */
puts("2d Array:");
for (i = 0; i < d; i++) {
for (j = 0; j < d; j++) {
printf("%-5d", a[i][j]);
}
putchar('\n');
}
putchar('\n');

puts("Primary Diagonal:");
for (i = 0; i < d; i++)
printf("%-5d", primary[i]);
printf("\n\n");

puts("Secondary Diagonal:");
for (i = 0; i < d; i++)
printf("%-5d", secondary[i]);
printf("\n\n");

return 0;
}
``````

Here is a sample run:

``````2d Array:
65   59   91   10
17   25   19   44
94   77   68   21
91   76   18   19

Primary Diagonal:
65   25   68   19

Secondary Diagonal:
91   77   19   10
``````