如何打印矩阵的主对角线以及如何用随机数填充矩阵
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 = 0
、i++
、i < d
和j=0
、j++
、j < d
。这将是主对角线。另一个是 i = d
、 i--
、 j=0
、 j++
。因此它将采用两条对角线,然后通过 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
我有矩阵 a[i][j]
例如 i = j = d
(例如 3
)。我怎样才能用随机数填充它,然后我需要在矩阵上方和下方显示主对角线和另一个对角线。我找到的几乎所有示例都是针对 C++ 的,但我需要在 C 中完成。
想过cycle
但是不知道怎么用。按照我的想法应该取点a[0][0]
和i = 0
、i++
、i < d
和j=0
、j++
、j < d
。这将是主对角线。另一个是 i = d
、 i--
、 j=0
、 j++
。因此它将采用两条对角线,然后通过 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