C语言二维数组用1到n的数字填充对角线

C语言二维数组用1到n的数字填充对角线,c,C,我有一个用0填充的2d数组,我试图用1到n的数字填充主对角线,这是主代码: #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { srand(time(NULL)); int m, n, i, j; printf("Number of rows and columns:"); scanf("%d"

我有一个用0填充的2d数组,我试图用1到n的数字填充主对角线,这是主代码:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
    
int main()
{
    srand(time(NULL));
    int m, n, i, j;
    printf("Number of rows and columns:");
    scanf("%d", &n);
    int a[n][n];
    for (i = 0; i < n; i++)
        for(j = 0; j < n; j++)
            a[i][j] = rand() % 1;
    printf("The matrix is:\n");
    for (i = 0; i < n; i++)
    {
        printf(" \n ");
        for(j = 0; j < n; j++)
        {
            printf(" %d\t ", a[i][j]);
        }
    }
} 

我试图做的是手动填充对角线,但这不是我想要做的。我想让它自动填充。我需要在不使用任何函数的情况下执行此操作。

最简单的方法是在用零填充矩阵后添加此部分

for (int i = 0; i < n; i++)
{
    for (int j = 0; j < n; j++)
    {
        arr[i][j] = ((i == j) * (i + 1));
    }
}
for (i = 0; i < n; i++)
    arr[i][i] = i + 1;

最简单的方法是在用零填充矩阵后添加此部分

for (i = 0; i < n; i++)
    arr[i][i] = i + 1;

对角线位于[i][i],因此单圈就足够了。但在您的程序中,它并不像您所说的那样用零填充。您所说的rand%1是什么意思?这不是零。@AbdelAzizAbdelLatef此表达式始终等于0。@EugeneSh。你错了。数组中填充了零。rand%1是一种生成0的奇怪方式。为什么不直接使用0呢?对角线位于[i][i],所以一个循环就足够了。但在您的程序中,它并不像您所说的那样用零填充。您所说的rand%1是什么意思?这不是零。@AbdelAzizAbdelLatef此表达式始终等于0。@EugeneSh。你错了。数组中填充了零。rand%1是一种生成0的奇怪方式。为什么不直接使用0呢?