如何打印矩阵的主对角线以及如何用随机数填充矩阵

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

我有矩阵 a[i][j] 例如 i = j = d (例如 3)。我怎样才能用随机数填充它,然后我需要在矩阵上方和下方显示主对角线和另一个对角线。我找到的几乎所有示例都是针对 C++ 的,但我需要在 C 中完成。

想过cycle但是不知道怎么用。按照我的想法应该取点a[0][0]i = 0i++i < dj=0j++j < d。这将是主对角线。另一个是 i = di--j=0j++ 。因此它将采用两条对角线,然后通过 printf

打印它

它应该是这样的

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

如果我错了请纠正我,但您希望打印具有一定数量 rows/cols?

的方阵的二氢酚
// You could put this code in main() or another function
int z = 3; /* z here represents the number of rows/cols in the square matrix
int matrix[z][z];
int i = 0, j = 0;
srand(time(0)); /* Part of stdlib.h and time.h; this will suffice for pur purposes */
// Fix matrix with random values
for (; i < z; ++i) {
  for (j = 0; j < z; ++i) {
    matrix[i][j] = rand() % 100; /* Part of stdlib.h; use % with rand to keep it within a certain range */
  }
}
// Print matrix
for (i = 0; i < z; ++i) {
  for (j = 0; j < z; ++j) {
    printf("%i", matrix[i][j]);
  }
  printf("\n");
// Print top-left to bottom right diagonal
for (i = 0; i < z; ++i) {
  printf("%i", matrix[i][i]); /* Part of stdio.h */
}
printf("\n");
// Print other diagonal
for (i = z - 1; i >= 0; --i) {
  printf("%i", matrix[i][z - (i + 1)]);
}

为了解释它是如何工作的,它首先声明了几个变量。我选择 z 来表示列数和行数,但名称无关紧要。 (从技术上讲,z 可以是 const,这可能是个好主意。)矩阵声明为 int matrix[z][z];这只是意味着矩阵由 z 行和 z 列组成。变量i和j的最后声明用于循环变量。

它接下来要做的是使用 srand() 为随机数生成器播种。 srand()rand() 都定义在 header stdlib.h 中。种子不是自动选择的;在这种情况下,我们使用 time.h 中的 time() 来播种。然后,程序循环遍历矩阵并使用标准库函数 rand() 为其分配一个随机值。 Rand returns 一个从 0 到 RAND_MAX 的值;使用模数 (%) 来限制范围。

其他的一切都应该在评论或 self-explanatory 中得到很好的解释,但请注意 printf() 的第一个参数是一个格式字符串(这里,%i 代表一个整数),它指定如何使用给它的附加参数。

这是一个用随机数填充方阵的版本,然后将主对角线和次对角线存储在两个数组中。这两个数组在一个循环中同时填充。然后程序分别显示三个数组的内容。

#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;
}

这是一个示例 运行:

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