问答详情
源自:6-11 多维数组的遍历

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

#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

提问者:慕先生1377973 2018-10-22 23:24

个回答

  • 慕粉0247298809
    2018-11-08 17:34:18

    楼上两个都是对的;

    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加上了。

  • 复活的鲁路修
    2018-11-04 17:33:36

    帮你改正确了,如下

    #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;    
    }

  • 手写诗氤氲迷香
    2018-10-24 23:19:36

     if(i==j);

    要去掉末尾的分号