回 帖 发 新 帖 刷新版面

主题:几个有趣的题。

在下从杂志上摘了几个题,有时间的朋友可以看看。
(1)下列程序的输出结果是:A)3    B)3.2   C)0   D)3.07
main()
{
    double d=3.2;intx,y;
    x=1.2;y=(x+3.8)/5.0;
    printf("%d \n",d*y);
}

(2)已知x,y为double型,则表达式x=1,y=x+3/2的值是:
A)1    B)2    C)2.0        D)2.5

(3)下列程序的输出结果:
#include<stdlib.h>
main(){
int a=3,b=2,c=1;
c-=++b;
b*=a+c;
    {
        int b=5,c=12;
        c/=b*2;
        a-=c;
        printf("%d,%d,%d,",a,b,c);
        a+=--c;
    }
printf("%d,%d,%d,",a,b,c);
}

(4)int a[10]={1,2,3,4,5,6,7,8,9,10},*p=a;
则值为3的表达式是:
A)p+=2,*(p++)    B)p+=2,*++p    C)p+=3,*p++    D)p+=2,++*p

有感兴趣的朋友,请先把您的想法写出来,在下会在近期公布答案。

回复列表 (共40个回复)

沙发

1) C

2) C

3) 输出:
2 3 1
2 3 -2

4) A

肯定是参加考试的复习题,还什么杂志,小孩的把戏。不懂就说。

板凳

  (2)选b

3 楼

哈哈,slot1同志的答案3有问题,不是2  3  1  2  3  -2请再仔细研究一下吧。
另外,如确有问题在下定会虚心请教各位前辈,此贴之目的是帮助一些初学者们澄清一些问题。所以,以后这种趣味题阁下就不劳费心了,被您一下子全答了,有了参考,不利于初学者们多多思考。至少,您可以等到后期做一些指导工作。
如有机会,在下会继续登一些趣味题,以回报www.programfan.com上众多侠客对我的无私帮助。

4 楼

个人认为...
这些题小有些无聊...
不觉得如何有趣...

PS:上面第一个b的输出应该是5才对......

5 楼

(3)2,5,1,2,3,-2,

6 楼

这些题虽小,但能反映一方面的问题.觉得无趣的朋友可以不做.

7 楼

2 5 1
2 3 -2

8 楼

第3题答案输出结果应为:2、5、1、2、3、-2
这是涉及复合语句的问题。
复合语句就是用一对“{}”把若干语句括起来构成一个语句组,复合语句是C语言中最重要的一种语句,语句的形式如下:
{语句1,语句2,……,语句N}
一个复合语句在语法上视为一条语句,在复合语句中,花括号内的语句数量不限,可以有执行语句,也可以有定义部分,定义部分应该出现在可执行语句的前面,复合语句可以嵌套使用。复合语句还可以嵌套任何结构的控制语句。[u]使用好复合语句的关键是理解和掌握变量的作用域。[/u]
本题解析:
本题程序中函数main的首部定义了3个整形变量a、b、c,按它们的初值,可计算执行复合语句之前的c的值为-2,b为3。进入复合语句后,变量b、c被重新定义,并赋以初值,用户可计算出复合语句中a、b、c的值分别为2、5、1,最后执行复合语句中的最后一条语句,可以得a的值为2。变量b、c在main首部及复合语句中均被说明,[u]在复合语句中,说明b、c的作用域只限制在本复合语句中,[/u]所以执行复合语句之后的printf语句中的b、c的输出值与复合语句中的b、c值无关,其值应该取复合语句之前的两个赋值语句的计算结果,即b值为3,c值为-2,也就是说,第二个printf语句的输出结果是2、3、-2。(以上内容摘自书上,仅作参考,如有错误,概不负责。---手要累S了。:)

9 楼

小声说一句,除了我给的第3题的答案没有人的是对的。

10 楼

对于其余题还有没有想发表看法,或想知道具体原因的朋友?swardman原意为您服务。:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册