一段C程序,高手进

来源:百度知道 编辑:UC知道 时间:2024/05/22 01:31:17
(14)有以下程序 b
main()
{ int a; char c=10;
float f=100.0; double x;
a=f/=c*=(x=6.5);
printf("%d %d %3.1f %3.1f\n",a,c,f,x);
}
程序运行后的输出结果是
A)1 65 1 6.5
B)1 65 1.5 6.5
C)1 65 1.0 6.5
D)2 65 1.5 6.5

为什么a的值会是1而不是2啊????????

(18)设有如下程序段: d
int x=2002, y=2003;
printf("%d\n",(x,y));
则以下叙述中正确的是
A)输出语句中格式说明符的个数少于输出项的个数,不

能正确输出
B)运行时产生出错信息
C)输出值为2002
D)输出值为2003

这又是怎么回事????

(14)"/"这个运算符用来整除的时候都是舍尾,题中计算是100/65得1余35,舍35得1.所有"/"的计算只要是 int/int,得到的结果均是舍尾计算.
(18)printf("%d\n",(x,y));其中的运算方式是先对%d赋值,然后打印.题中(x,y)表述方式下,先将x赋予%d,后将y赋予%d,再打印,这样输出结果自然应当是y的值,即2003.

(14) / 运算符如果有整数参加这个运算符的运算,按舍尾计算;如果是浮点型的话就直接得到浮点型的值
(18) printf("%d\n",(x,y));中(x,y)是一个逗号表达式,整个表达式的值等于最后一个逗号后面变量的值,所以是y的值;因为有括号所以不是楼上说的那个意思。
其实就算有printf("%d\n",x,y));输出的值是X的值。

补充更正:
第二个。。。
打印的是一个逗号表达式 x,y 的值

(14)关于运算符号
c*(x=6.5)等同与c=c*(x=6.5)
所以c的值为10*6.5=65
f/=c*(x=6.5)右边=65已经得出
f=f/c
这里因为f是float型的c是char型的所以得到的结果依然是float型的
有因为最后输出的时候f是按照%3.1f输出的,所以只输出了小数点的后一位.
所以f=1.5
最后a=f/c*(x=6.5)很好理解了就是a=f因为a是int型所以得到了1,至于取舍问题,C里都是直接去掉小数不进位的也就是说1.9取舍为1.
所以答案是
B) 1 65 1.5 6.5
(18)关于逗号表达式
形式:

表达式1, 表达式2, ..., 表达式n

整个表达式的值等于表达式n的值.

ex:

/* condition */
if (var = 0) //false
if (var = 0, 1) //true