几道C语言题,盼解~O(∩_∩)O~

来源:百度知道 编辑:UC知道 时间:2024/06/03 19:08:21
1. 阅读下列程序,程序的输出结果是
#include "stdio.h"
main()
{
int m,n;
float k;
for(m=6;m>2;m--)
{ k=0;
for(n=m;n>1;n--)
k=k+m*n;
}
printf("%f\n",k);
}
A)5.000000
B)15.000000
C)25.000000
D)35.000000

2. 执行下面程序的正确结果是()
main()
{ float a=1.9;
switch(a)
{ case 0∶printf("0000");
case 1∶printf("1111");
case 2∶printf("3333");
}
printf("%f",a);
}
A)1.900000
B)111133331.900000
C)33331.900000
D)00001111233331.900000

3. 若有条件表达式(exp)?a--:b--,则以下表达式和表达式(exp)完全等价的是()
A.(exp!=1)
B.(exp!=0)
C.(exp= =1)
D.(exp= =0)
提供正确答案为1.B; 2.B;3.D;
第三道题本人觉得应该选B,但答案选D,求个为什么?O(∩_∩)O谢谢~

第一题,不用管外面的for,只看里面的,以为每次k都重新被赋值0;
看m的最后一个值3;很容易得到结果k=9+6=15

第二题,switch应该不会隐式转换数据类型吧。。如果题目真的可以运行。。那答案应该是B。
因为case没有break就会一直执行下一条,直到出switch

第三题。好奇怪。。我也和你一样。觉得应该是B。答案说是D。。实在理解不了。。

出这题的人变态,我刚才到msdn上查了。
The exp function returns the exponential value of the floating-point parameter, x, if successful. On overflow, the function returns INF (infinite) and on underflow, exp returns 0.

出题的这个人也许是指最后一句话的情况。。
你的题目在VC6.0上肯定能运行。。但是在c编译器的情况下,无参数exp是否能运行??你可以去验证下,我手头没有c编译器。
如果在c编译器的情况下:无参数exp溢出的话,那么答案的确是D。。因为当exp溢出的时候它的返回值是0.。。。。

经过亲自调试后,第三题答案为B

编译环境:
VC++6.0

1题目:在每一次进入外层循环后,都有k=0,所以只有最后一次进入才能被准确赋值,最后一次是m=3,进入。n的初值为m就为3,因此k=9然后k=9+6=15.选择B

2题目:1.9进入case选择后应该是取出小数部分,从case1开始运行,没有break所以case2也被执行。因此是B。

3题目:exp != 0为真,exp = 0 为假。因此选择B

1.很简单,k=3*3+3*2=15,注k每次都要清零
2.第二题中,由于case没有和float匹配,显示错误,但若是强制转换为int型的话,就是111133331.900000!这是由于没有break的缘故!
3.还不清楚!我也认为选b