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

为什么答案是45

为什么答案是45

#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(arr[0][0]||arr[0][2]||arr[1][1]||arr[2][0]||arr[2][2])

            {

                sum+=arr[i][j];

            }

        }

       

       

       

       

    }

    printf("对角线元素之和是:%d\n",sum);

    return 0;    

}


提问者:海问香00 2019-02-20 15:14

个回答

  • 白腿小隼熊猫鸟
    2019-02-22 18:58:51
    已采纳

    判断语句if()括号里的条件表达式写得不对。你想的是把你全部列出来的元素累加起来,但是实际上if()语句执行的情况是,判断括号里的表达式的结果是真还是假,因为你写的是逻辑或,所以只要有一个值不为0那么表达式的结果就是真,那么就会执行if()后面的语句,所以你这样写的结果是把所有的数组元素都累加了一遍。

    可以观察对角线元素的下标的特点,一个是行等于列,一个是行加列等于2,所以可以把if()语句写成这样:

     if(i == j || (i + j) == 2)