亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為什么答案是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語言入門
  • 參與學習       926904    人
  • 解答問題       21532    個

C語言入門視頻教程,帶你進入編程世界的必修課-C語言

進入課程

為什么答案是45

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號