C语言基础题,谁能帮忙解答一下,要有详细注释,谢谢

2.有以下程序
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

第1个回答  2014-12-08
答案是:1 65 1.5 6.5
【解析】对于赋值符号,计算方向是从赋值符号右边往左计算的,所以我们看:
a = f /= c *= (x=6.5);

我们就能很容易地求出:
x = 6.5;
c = c * x = 10 * 6.5 = 65;(这里注意下,虽然c是字符型,但是整型也是可以赋给它的,毕竟字符也是和ASCII对应的,字符型的变量,既可以给一个字符,也可以给一个整型值,它也对应一个字符(ASCII对应一个字符),输出的时候,如果格式控制是%d,就是输出字符的ASCII值)
f = f / c = 1.5;(这里f是float型)
a = f; (f是float型,而a是整型,就只能取整了,因此是1)追问

%3.1f 题目中的这个是什么意思

追答

%m.n,用于控制浮点数的输出格式,m是数据的宽度,n是保留小数点的位数。
%3.1的意思,数据宽度必须是3位,不足三位的必须在前面补空格,1就是说明浮点数的小数点后面有1位;
楼主可以自己写程序体验下这两个值带来的不同效果,印象会深刻一些。

追问

我只能采纳一个,你的解答对我很有帮助,谢谢!

第2个回答  2014-12-08
答案选B吧。过程如下:

a = f /= c *= (x=6.5);
从右向左开始求值:
x=6.5,同时(x=6.5)的值为6.5
c*=6.5,c=c*6.5=65,等式的值为65
f/=65,f=f/65=100/65=1.5,等式的值为1.5
a=1.5,a=(int)1.5=1。
第3个回答  2014-12-08
main()
{ int a; char c=10;
float f=100.0; double x;
a = f /= c *= (x=6.5); // 从右往左看:x=6.5,c=c*x=65,f=f/c=1.5,a=f=1(int型向下取整),答案B
printf("%d %d %3.1f %3.1f\n",a, c, f, x);
}
程序运行后的输出结果是: ( B )
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

望采纳!追问

还有个问题%3.1f 是什么意思? printf("%d %d %3.1f %3.1f\n",a, c, f, x); 这句能帮我详细解答下吗? a, c, f, x 之间有逗号 为什么答案中没有逗号隔开

追答

%3.1的意思,这个数宽度给的是3位,1就是小数点后面1位;

a,c,f,x这个之间的逗号是规定,要想答案之间有逗号要这样写"%d ,%d, %3.1f, %3.1f\n"

,答案就会有逗号
%d是int型的输出,%f是float型的输出,%lf是double型的输出。
望采纳!

本回答被提问者采纳
第4个回答  2014-12-08
一共要输出4个变量,但是给的选项只有两个,那肯定都不对.追问

我补充下,不好意思,已经补充了答案,

追答

直接把答案给你吧,要输出的是:6(空格)65(空格)1.5(空格)6.5

追问

不是吧,答案是ABCD中的一个啊,题目没问题,能说下解题思路吗,我看不太懂

追答

看错了..应该选B.

追问

恩恩,是选B,可以告诉我怎么解答这题吗,我看不太懂,这个星期要考试了,我在研究老师给的题型,

追答

/=,*=这类运算符就是先把它右边的值算出来,然后按照前面的符号去决定给左边的变量的值.然后%3.1f是说明输出的这个小数只输出一个小数位,而整数部分要占3位.比如说要输出的变量值是2.3,因为2.3的2不足3位,所以要补2个空格.

相似回答