C语言问题,急救!!!!

来源:百度知道 编辑:UC知道 时间:2024/05/13 12:56:43
#include <stdio.h>
main()
{
char a,b,c;
int k=789;
a=k%10+'0';
k=k/10;
b=k%10+'0';
k=k/10;
c=k%10+'0';
printf("%c %c %c\n",a,b,c);
}
运行结果是9 8 7
但我自己算的是9 8 0 因为最后一部K%10应该等于0在加上‘0’的ASCII码的值应该正好等于0啊??????

long int a=32768
int b=37;
float s;
s=(float)1/a+(float)1/b;
printf("%d,%d,%f\n",a,b,c);
这部分代码中的第3步可不可以换成 s=(float)(1/a)+(1/b);说出原因来!!!!

(a*a*a+b*b*b)/c/d 可不可以换成 (a*a*a+b*b*b)/(a*b)说出具体原因啊!!!!

1.那个7/10=0 但是7%10=7
2. 不能,因为原来程序中1/b结果是float的,如果你将强制转换去掉就会得到一个int型整数,也就是0了,你知道这是不符合题意的!即使最后结果还是float,但是它第二个表达式已进行过近似!
3.可以的。他们的优先级都是相同的啊,也都是自左向右的

运行结果是9 8 7

因为执行最后一次k/=10;后,k的值是7,而不是0,你可以输出看看,然后k%10的值当然也是7。

******************************************
第3步不可以换成 s=(float)(1/a)+(1/b)
因为原式是先将1转换为float类型值,然后的计算都会自动提升到float类型,如果先计算1/b,因为都是整形,所以结果也是整形值0,这样再转换类型也就没有意义了。

******************************************
(a*a*a+b*b*b)/c/d 不可以换成 (a*a*a+b*b*b)/(a*b)

c因为c不一定等于a,d不一定等于b

789%10 = 9
78%10 = 8
7%10 = 7,所以是9、8、7
2、不行,1/b不转换的话,结果是0

3、应该是/(c*d)吧,这样倒可以

第一题:应该是7,因为789%10=7呀,7+‘0’也就是字符7啦
第二题:先算float,再算了+,所以这样不是能换的
三题也差不多

运行到c=k%10+'0'的时候,这时k=7,那么c=k%10+'0'=7
s=(float)1/a+(float)1/b换成s=(float)(1/a)+(1/b);肯定不行的,因为(float)1/b已经规定1/b是实数了,而如果不要float,那后面的1/b是什么数??