Re: [考題] 102自來水程式設計概要

看板Examination作者 (跟節拍器不合)時間10年前 (2013/08/24 17:30), 編輯推噓2(2011)
留言13則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《winterQ (DOMO)》之銘言: : 27.有關C++程式碼的執行結果,下列何者正確? : int b,i; : for(b=1,i=0;i<100;i++) b=b*3%7; : 答案是 (4)b的值變成4 : 我個人是猜b的值變成3,b的初始值設在迴圈跟外面不是一樣嗎? : 還有*跟%優先權不是一樣? b=1*3%7 => 3%7=3? 先跑第一次是: b=1*3%7 => b=3%7 => b=3------i=0.6.12.18.24.30.36.42.48.54.60 66.72.78.84.90.96 跑第二次是: b=3*3%7 => b=9%7 => b=2------i=1.97 跑第三次是: b=2*3%7 => b=6%7 => b=6------i=2.98 跑第四次是: b=6*3%7 => b=18%7 => b=4-----i=3.99(答案) 跑第五次是: b=4*3%7 => b=12%7 => b=5-----i=4 跑第六次是: b=5*3%7 => b=15%7 => b=1-----i=5 跑第七次是: b=1*3%7 => b=3%7 => b=3------i=6(循環到了) 所以當i=99時,跑到的位置是b=4 我也用程式跑過驗證過了 : 32.下列的C++程式碼總共宣告了三個同名變數x: : static int x=1; : int main() : { : int x=2; : for(int i=1,x=3;i<5;i++){ : x*=i; : } : cout<<x<<endl; : return 0; : } : 答案是 (1)程式會印出2 : 我個人是猜程式會印出72,覺得static沒影響這程式 : x在主程式設值為2,迴圈又設值為3,答案會印出2,所以代表沒有跑迴圈? 我的觀念是: 主程式裡面自己宣告了X變數,所以不關外面靜態的事 先宣告了X=2,跑回圈時又宣告X=3 我覺得迴圈是有跑完,只是沒有顯示而已 而當離開迴圈時,當然就只顯示當初宣告的2 不知道這觀念是否成立,也想請高手替我改正 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.166.127.195

08/24 18:02, , 1F
最不會錯的驗證方式讓寫程式跑一次 不會太花時間的
08/24 18:02, 1F

08/24 18:38, , 2F
內部變數優先於外部變數,不過這要看編譯器
08/24 18:38, 2F

08/24 20:11, , 3F
第二題有跑迴圈 所以x*=i不是也會改變x的值,但卻只顯示當
08/24 20:11, 3F

08/24 20:13, , 4F
初宣告的2,不太懂說,有大大能解釋一下嗎?
08/24 20:13, 4F

08/24 20:46, , 5F
第二題是變數的作用範圍和生命週期觀念
08/24 20:46, 5F

08/24 20:47, , 7F
392
08/24 20:47, 7F

08/24 21:48, , 8F
所以迴圈內的x生命週期只在迴圈內,迴圈結束後即結束
08/24 21:48, 8F

08/24 21:50, , 9F
所以印出x的值是迴圈外的值,跟迴圈內x無關
08/24 21:50, 9F

08/24 21:51, , 10F
若迴圈沒有重新設x的值,只有外面的x,答案才會是48
08/24 21:51, 10F

08/24 21:54, , 11F
不知道這樣理解對不對?
08/24 21:54, 11F

08/24 23:39, , 12F
其實你可以做個嘗試,將FOR迴圈x刪掉,看結果你會懂得
08/24 23:39, 12F

08/24 23:40, , 13F
for(int i = 1;i<5;i++)
08/24 23:40, 13F
文章代碼(AID): #1I67qsnx (Examination)
文章代碼(AID): #1I67qsnx (Examination)