回 帖 发 新 帖 刷新版面

主题:几个有趣的题。

在下从杂志上摘了几个题,有时间的朋友可以看看。
(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个回复)

11 楼

那,如果把(3)中“{}”复合语句第一句的“int”去掉的话,“{}”复合语句就没起到限制任何变量的作用域的作用了,也就是说有没有这个“{}”复合语句,程序的输出结果都一样,是这样的吧?

12 楼

我想应该是这样,我实际操作了一下,去掉int后,程序输出为:2,5,1,2,5,0

13 楼

  请把3个题目的争取答案给我们:
   有必要讲解下
   这里来的新手毕竟比老手多。。。。。。

14 楼

第四题解释给我听下好吗?第四题看的有点晕了,指针很头疼

15 楼

第四题解析:该题考查的主要内容就是指针与一维数组,当然它还涉及到了指针的移动以及运算符++和*之间的优先级问题。首先确定,值为3的数组元素是a[2],;因此也可用p[2]、*(a+2)、*(p+2)表示,但题目的4个选择答案中都没有出现,所以要再考虑其它途径。注意到4个表达式均为逗号表达式,它们的值应该分别等于各自最后一个表达式的值。再看表达式p+=2的作用,在进行这一运算之前,指针p指向数组元素a[0],表达式p+=2使指针p向后移动了2个存储单元,也即运算后指针p指向了数组a[2],同样,经过p+=3的运算后,指针p将指向数组元素a[3]。现在看答案A,先经p+=2运算,使p指向a[2],然后通过指针运算符*引用表达式p++所指向的元素,[u]我们知道,表达式p++的值就是p的值,所以*(p++)的值就等于*p的值,[/u]即a[2]的值是3,它正符合要求,因此A是正确答案。B表达式的值应该为4(先使p指向a[3],然后通过p取值),C表达式的值应该为4(先使p指向a[3],再通过p取值),D表达式的值也为4,(先使p指向a[2],再通过p取值,最后自增1)。

16 楼

着几道题挺有意思!

17 楼

第三题中的第二个printf语句中的a怎么不是3,请具体讲解以下全局变量和局部变量的概念,在程序中是任何改变的

18 楼

怎么没人解释一下前面两个题咯

19 楼

[color=0000FF] 对于第1和2题我想请教一下,这中时候X和Y的值是强制转换成整型还是X和Y本身强制转换成DOUBLE型???????我实在想不起来了~~~~~~~~~~ [/color]


3题:2,5,1   3,3,-2
4题:A

20 楼

第1题解析:程序先执行语句x=1.2,根据赋值运算的类型转换规则,这里要将double型的常量1.2转换为int型,即取整为1,然后将1赋值给变量x  。接下来执行语句y=(x+3.8)/5.0;根据运算符的优先级,先计算小括号内,再计算除法,最后执行赋值运算。小括号内的运算过程为:先将整型变量x的值1转换为double型1.0,然后与3.8进行加法运算,得到中间结果4.8。接着进行除法运算4.8/5.0,其结果小于1.0,这里没有必要计算出精确值,因为接着进行赋值运算,赋值号左连的变量y的类型为整型,于是对这个小于1.0的中间结果进行取整,结果为0,于是变量y的值为0。因此该程序的输出结果应该是0,即正确答案为C。
第2题解析:该表达式就是一个逗号表达式,所以要按照运算顺序先运算x=1,所以变量x的值为1.0,然后运算y=x+3/2,此表达式中需先计算二个整数相除3/2,结果为整数1,然后再与x相加,结果为2.0。由于逗号表达式x=1,y=x+3/2的值就是其最后一个表达式的值,此值即为2.0,所以正确的答案应该是C。

我来回复

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