为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个表达式把所有元素都求和了?而不是将一条对角线求和?

#include <stdio.h>
int main()
{
    int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int i,j;
    int sum=0;
    for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
           if(i==j);
           {
                sum=sum+arr[i][j];
           }
       }
    }
    
    printf("对角线元素之和是:%d\n",sum);
    return 0;    
}


输出:45

正在回答

3 回答

楼上两个都是对的;

if(i==j); 

//这里加分号就把if执行结束了,并没有进行判断。

//因为sum+=arr[i][j]总是被执行,所以所有数都被加了。

如果按i==j这个判断执行的吧,只加了下标[0][0]的1 ,[1][1]的5 , [2][2]的9 

所以一楼帮你把,[0][2]的3和[2][0]7加上了。

0 回复 有任何疑惑可以回复我~

帮你改正确了,如下

#include <stdio.h>
int main()
{
    int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
    int i,j;
    int sum=0;
    for(i=0;i<3;i++)
    {
       for(j=0;j<3;j++)
       {
           if(i==j)
           {
                sum=sum+arr[i][j];
           }
       }
    }
    sum=sum+arr[0][2];
    sum=sum+arr[2][0];
    printf("对角线元素之和是:%d\n",sum);
    return 0;    
}

1 回复 有任何疑惑可以回复我~
 if(i==j);

要去掉末尾的分号

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这个表达式把所有元素都求和了?而不是将一条对角线求和?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信