中国仿制药有哪些:2道很简单的C语言

来源:百度文库 编辑:杭州交通信息网 时间:2024/05/07 06:17:40
1.17
下列程序的输出结果是: 0 为什么
main() { double d=3.2; int x,y; x=1.2;y=(x+3.8)/5.0;printf("%d \n",d*y);}

1.18下列程序执行后的输出结果是(小数点后只写一位)
6 6 6.0为什么?
main(){ double d; float f; ling l; int i; i=f=l=d=20/3;
printf("%d %ld %f %f \n", i,l,f,d);}
麻烦各位高手能解释以下过程

double d; float f; ling l;?????????????????

第一个是因为i是整型的,所以在i=1.2时,i得到的值只是1,同理,y=(1+3.8)/5.0=4/5.0=0.8,由于y也是整型的,只能行到0,所以最后输出就是0啦(0*任何数都为0)。
第二个因为做为除数的两个都是整数,那么用/后的结果只能取整,20/3=6,然后在赋给双精度的d(d=6.000000),长整型的l(l=6),单精度的f(f=6.000000),整型的i(i=6),然后分别输出这几个吗,那就是6 6 6.000000 6.000000

1.17:类型定义错误
把X Y 定义为 double , x=1.2 实际上系统识别他为x=1,
1.18
一样的问题,
类型不一样的不能一起赋值,会出错,分开写就行
d=20/3; i=20/3; l=20/3; f=20/3;

因为x定义成了int,当x=1.2的时候,其实系统默认的x=1,1+3.8=4.8,又因为整除的两边应该是整数,所以执行4/5=0,0*d当然等于0拉!!!

因为你的赋值语句最后一个是i,它的类型是int,所以其他的都要转化成最终的int,只是其精度不一样罢了!!!