作者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