You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

矩阵左对角线求和代码异常:添加printf语句致结果错误

问题分析与解决方案

哥们,我一眼就揪出你代码里的核心问题了,跟那个printf语句本身没关系,是你的求和逻辑完全写错了!

先看你出问题的这段代码:

for(i=0;i<=3;i++) {
  for(j=0;j<=3;j++) {
   if ( i == j) printf("%d\t",arr[i][j]);//This line is problematic**
   l_sum = l_sum + arr[i][j];
  }
}

不管i == j这个对角线条件成立不成立,你每次循环都会执行l_sum = l_sum + arr[i][j]——这等于把整个4x4矩阵里所有元素都加起来了,不是只加左对角线上的元素!

那为什么会出现“保留printf就错,删掉就对”的奇怪现象?大概率是你删除printf的时候,顺手把求和代码也调整到了if的条件块里(比如不小心加了大括号,把l_sum += arr[i][j]放进了if范围),这时候就只累加对角线元素了,自然得到正确结果5;而保留printf时,代码还是原样累加所有元素,得到的是整个矩阵的总和23。

修正后的代码

咱们把求和逻辑和对角线条件绑定,只在i == j的时候累加元素:

#include<stdio.h>
#include<conio.h>
int main() {
 int arr[4][4];
 int i,j,l_sum=0;
 printf("\nENTER THE VALUE IN ARRAY:");
 for(i=0;i<=3;i++) {
  for(j=0;j<=3;j++)
   scanf("%d",&arr[i][j]);
 }
 printf("The matrix is :\n");
 for(i=0;i<=3;i++) {
  for(j=0;j<=3 ;j++)
   printf("% 4d",arr[i][j]);
  printf("\n");
 }
 l_sum=0;
 for(i=0;i<=3;i++) {
  for(j=0;j<=3;j++) {
   if (i == j) {
       printf("%d\t",arr[i][j]); // 现在只会打印对角线元素
       l_sum = l_sum + arr[i][j]; // 只累加对角线元素
   }
  }
 }
 printf("\nSUM OF LEFT DIAGONAL IS :%d\n", l_sum);
 return 0;
}

或者更简洁点,利用左对角线i和j始终相等的特性,直接去掉内层循环:

l_sum=0;
for(i=0;i<=3;i++) {
    printf("%d\t",arr[i][i]);
    l_sum += arr[i][i];
}

这样代码更清晰,也不容易踩坑。

总结

你的原代码错误在于求和逻辑没有和对角线条件绑定,那个printf只是背了锅——它的存在让你没注意到求和语句的位置错误,删掉它时你无意中调整了代码结构,才得到了正确结果。

内容的提问来源于stack exchange,提问作者Encipher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 11:57:47