【问题标题】:Printing Identity ("I") matrix in c在c中打印身份(“I”)矩阵
【发布时间】:2020-10-25 06:18:00
【问题描述】:

我正在尝试在方阵数组中打印出单位矩阵。

这是我当前的代码:

#include <stdio.h>

int main(){
    int n = 50;
    int i,j = 0;
    int a[n][n];

    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
            if (a[i] == a[j]){
                printf("1");
            } else {
                printf("0");
            }
        }
    }
    printf("/n");
    return 0;
}

我的 macOS 终端没有告诉我有任何语法错误并且可以正确编译。但是当我运行可执行文件时,我什么也没有打印出来。

我的代码有错误吗?

非常感谢您的帮助。

【问题讨论】:

  • 您从未初始化数组a,因此它包含垃圾。另一方面,您也根本不需要它。测试if (a[i] == a[j]) 应该只是if (i == j)
  • 另外,想想你的换行符 printf 应该放在哪里。 (C 中的换行符是 \n,而不是 /n
  • 非常感谢您的 cmets。你能帮我告诉我如何初始化我的数组 a
  • 眼睛?我想你的意思是I...
  • @AnttiHaapala,单位矩阵,在 numpy 中有一个叫做 eye 的函数,它会打印出单位矩阵...

标签: arrays c matrix


【解决方案1】:

发布的代码在初始化之前访问a。正如所指出的,如果它只是想打印一个单位矩阵(而不实际创建它),可以简单地将测试 a[i] == a[j] 替换为 i == j

如果您想实际初始化a,然后打印它,您可以按如下方式进行。首先,要初始化它,你可以这样做:

for (i=0; i<n; i++) {
    for (j=0; j<n; j++) {
        a[i][j] = i == j;
    }
}

如果ij 相等,则表达式i == j 的计算结果为1,否则为0,因此这将创建一个标识矩阵,其中1 在主对角线上,0 在其他位置.

初始化后,你可以改变它,使用它,打印它等。要打印它,你可以这样做:

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

这会在每个元素之前打印一个空格(作为分隔符),并以换行符结束每一行。根据您的需要,您可以将其更改为对每个元素使用固定宽度等。这实际上取决于您正在处理的值以及您希望它在打印时的外观。

【讨论】:

    【解决方案2】:

    您的代码存在问题,导致它无法输出您想要的内容。
    然而,您没有看到任何输出的事实有两种可能的解释。

    • 您在一个窗口中执行,该窗口在您能够感知输出之前关闭;从已经打开的命令提示符处执行以查看输出,因为这样您将有足够的时间
    • 刷新输出或在末尾添加换行符;您目前没有,而是输出一个斜杠和一个“n”,使用特殊换行符时情况会有所不同,如"\n"

    【讨论】:

      【解决方案3】:
      #include<stdio.h>
      int main()
      {
      int i,j,a[100][100],n=5;
      for(i=0;i<n;i++)
      {
       for(j=0;j<n;j++)
       {
         if(i=j)
      {
          printf("1\t");
      }
      else
      {
      printf("0\t");
      }
      }
      }
      return 0;
      }
      

      打印的条件不是a[i]=a[j],但必须是i=j。

      【讨论】:

      • 没有。那不是一个条件。在你的解释中它没有伤害,但在代码中它是完全错误的。 (作为一个相对较小的问题:如果令人分心的不一致,您的缩进。)
      • Urja,请考虑editing 你的答案以改进它。
      • 您希望这段代码有多少行输出?矩阵不应该有多个吗?
      • 你的意思可能是i == j
      • 另外,用 100 初始化数组的原因也没什么特别的,你可以用任意数字随机初始化。
      猜你喜欢
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-19
      • 2021-06-11
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多