C语言选择题(3道题),帮忙解答一下,谢谢!

1.分析下面的C语言代码:
int a=1,b=10;
do{
b-=a; a++;
}while (b- -<0);
则执行循环语句后b的值为()。 (单选题)。
A. 9 B. -2 C. -1 D. 8
答案: D

2.#include<stdio.h>
void main()
{
int a=3,b=2,c=1;
int x=10,y=20;
if(a<b)
if(b!=0)
if(!x)
y=1;
else if(x)
y=0;
y=-1;
printf("%d",y);
}
上面的C程序的输出结果是( )。 (单选题)。
A. 20 B. 1 C. 0 D. -1
答案: B

3、表达式18/4*sqrt(4.0)/8值的数据类型为()。 (单选题)
A. int B. float C. double D. 不确定
答案: C
分别解释一下,答案是怎么得来的……

你好:
第一题:
先执行循环体:b-=a; a++;
b=b-a=10-1=9,a=2,
再判断条件:b--<0 b=9>0 然后b-- (注意无论判断条件是否满足,都执行),b=8
第二题:
答案错了,应选D
程序应该这么看:
int a=3,b=2,c=1;
int x=10,y=20;
if(a<b) 一开始a>b就不满足条件,所以下面的不执行!
if(b!=0)
if(!x) y=1;
else
if(x) y=0;
y=-1; 只执行这句!
printf("%d",y);

所以y=-1
第三题:
18/4*sqrt(4.0)/8这个运算中有浮点型数据即sqrt(4.0),系统会自动把其他类型的数据想double转换。
比如:
float b=6.5;
int a=2;
那么a+b的类型就是float,因为这个表达式中最高的类型就是float,那么int 就会向float转换。

总结就是要是表达式中都要向类型高的转化。
明白了吗?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-08-28
3、答案C
其结果为1。说明:C中表达式运算过程中,只要遇到符点型数据就会按符点型数据进行运算,其结果也是符点型。sqrt()函数的返回值是double型,所以,整个运算结果也是double.
2、答案D
else if(x)
y=0;
y=-1;
从这里可以看出 y=-1; 是一条单独的语句,与前面的所有语句都没有关系,程序只要执行到这里y值必然会是-1,所以其输出结果是-1
1、答案D
b-=a; =》b=10-1=9;
while (b--<0); 先检查b<0? 然后运行b--:=》b>0 , b=9-1=8 这里我们也可以看出,类似a++,a--,等操作,只要用到了变量a,则++,--运算就会执行。
第2个回答  2011-08-28
第一题 执行循环语句时,b-=a , 相当于 b=b-a为10-1=9,执行一次以后在判断能否满足条件执行下一次循环,判断语句为b--,即为b=b-1=8,因为8<0是假命题,逻辑值为0,不满足循环条件,退出循环。
第二题 答案应该是B吧 else是与上面最近if 配对,在本题中即与if(!x)配对。 if(a<b)
if(b!=0)
if(!x)
y=1;
else if(x)
y=0;
这是一个可以看做一个整体,因为if(a<b)当中的a<b为假命题,所以以后的完全不用看了,直接执行 y=-1;
printf("%d",y);
第3个回答  2011-08-28
给点分值啊,这样解的没意思。这都要用笔算的
相似回答