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

为什么答案是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;    

}


正在回答

1 回答

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

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

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


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

海问香00 提问者

什么是“只要有一个值为0那么表达式的结果就是真。”呀。没明白这句话的意思 我的逻辑是正常执行的话不是遇到这几个其中任意一个就执行下面的公式,然后正好是25才对呀。我还是没明白,能不能再详细一点。
2019-02-23 回复 有任何疑惑可以回复我~
#2

海问香00 提问者

想了一个点 头都炸了还没想出来
2019-02-23 回复 有任何疑惑可以回复我~
#3

白腿小隼熊猫鸟 回复 海问香00 提问者

额,我上面写的是「因为你写的是逻辑或,所以只要有一个值不为0那么表达式的结果就是真,」,再聚焦一下,我写的是「一个值不为0」,而不是你刚刚回复的「一个值为0」,这两个的意思就反了哦! 说回你的代码,你原来的if()的判断表达式用的是「逻辑或」,也就是那两条竖线,逻辑或的意思就是只要那两条竖线的左边或右边有一个值不为0(因为0就是逻辑上的假,1是逻辑上的真),那么if()的判断表达式的结果就是真,就会执行if()后面的语句。根据实际数组里的数据,它们都是不为0的数,所以每次进入if()都判断为真,都会执行if()后面的语句。这样,可以理解了吧?
2019-02-24 回复 有任何疑惑可以回复我~
#4

白腿小隼熊猫鸟 回复 海问香00 提问者

如果你想执行的是「遇到这几个其中任意一个就执行下面的公式」,那么不是用if()来判断,而是应该用switch来判断呀。if()判断的是括号里面的值是真还是假,并不是去对比。
2019-02-24 回复 有任何疑惑可以回复我~
#5

海问香00 提问者 回复 白腿小隼熊猫鸟

明白了 谢谢你耐心的回答 我写的都是非0的 才明白过来
2019-02-24 回复 有任何疑惑可以回复我~
#6

白腿小隼熊猫鸟 回复 海问香00 提问者

不用客气。共同学习进步更有乐趣嘛!
2019-02-24 回复 有任何疑惑可以回复我~
查看3条回复

举报

0/150
提交
取消
C语言入门
  • 参与学习       926207    人
  • 解答问题       20797    个

C语言入门视频教程,带你进入编程世界的必修课-C语言

进入课程

为什么答案是45

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