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

时间:2016-11-02 01:22:50

标签: c matrix random cycle

我有例如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

2 个答案:

答案 0 :(得分:1)

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

#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   

答案 1 :(得分:0)

如果我错了,请纠正我,但是你想打印一个具有一定行数/列数的方阵的diaganols?

// 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,这可能是个好主意。)Matrix声明为int matrix[z][z];这简单的意思是矩阵由z行和z列组成。变量i和j的最后一个声明用于循环变量。

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

其他所有内容都应该在评论中解释或不言自明,但请注意printf()的第一个参数是格式字符串(此处,%i代表一个整数),它指定了如何使用给它的附加参数。