用于矩阵和双指针

时间:2018-10-06 14:43:14

标签: c

输入方阵的大小作为标准输入(输入值的范围是2到10)。创建一个程序,以打印输入大小的单位矩阵。

单位矩阵是从左上角到右下角(主对角线)对角线为1,其他所有对角线为零的矩阵。

ex)输入:5

结果:

1 0 0 0 0\n
0 1 0 0 0\n
0 0 1 0 0\n
0 0 0 1 0\n
0 0 0 0 1\n

我的代码:

int main(){
int n;


scanf("%d", &n);

int **matrix = malloc(sizeof(int *) * n);

for (int i = 0; i < n; i++)
{
    matrix[i] = malloc(sizeof(int) * n);
    memset(matrix[i], 0, sizeof(int) * n);
}

for (int i = 0; i < n; i++)
{
    matrix[i][i] = 1;
    printf("%d ", matrix[i][i]);
}
printf("\n");



for (int i = 0; i < n; i++)
{
      free(matrix[i]);


}

free(matrix);

return 0;
}

..怎么了?

2 个答案:

答案 0 :(得分:0)

您需要两次循环才能打印输出:

for (int i = 0; i < n; i++)
{
    matrix[i][i] = 1;  // set identity
}

for (int j=0; j<n; j++)
{
    for (int i = 0; i < n; i++)
    {
        printf("%d ", matrix[j][i]);
    }
    printf("\n");
}

答案 1 :(得分:0)

一个错误是认为您需要数据结构来打印请求的输出。

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

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 2 || 10 < n) {
        perror("Input error!\n\n");
        return EXIT_FAILURE;
    }
    for (int i = 0; i < n; ++i) {
        for (int k = 0; k < n; ++k)
            printf(i == k ? "1 " : "0 ");
        putchar('\n');
    }
}