作者grandoph (跟節拍器不合)
看板Examination
標題Re: [考題] 102自來水程式設計概要
時間Sat Aug 24 17:30:26 2013
※ 引述《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
1F:→ JengHau:最不會錯的驗證方式讓寫程式跑一次 不會太花時間的 08/24 18:02
2F:→ icewindful:內部變數優先於外部變數,不過這要看編譯器 08/24 18:38
3F:推 winterQ:第二題有跑迴圈 所以x*=i不是也會改變x的值,但卻只顯示當 08/24 20:11
4F:→ winterQ:初宣告的2,不太懂說,有大大能解釋一下嗎? 08/24 20:13
5F:→ kaitouGamer:第二題是變數的作用範圍和生命週期觀念 08/24 20:46
7F:→ kaitouGamer:392 08/24 20:47
8F:推 winterQ:所以迴圈內的x生命週期只在迴圈內,迴圈結束後即結束 08/24 21:48
9F:→ winterQ:所以印出x的值是迴圈外的值,跟迴圈內x無關 08/24 21:50
10F:→ winterQ:若迴圈沒有重新設x的值,只有外面的x,答案才會是48 08/24 21:51
11F:→ winterQ:不知道這樣理解對不對? 08/24 21:54
12F:→ icewindful:其實你可以做個嘗試,將FOR迴圈x刪掉,看結果你會懂得 08/24 23:39
13F:→ icewindful:for(int i = 1;i<5;i++) 08/24 23:40