刚接触c语言,请求各位帮助!

能详细解释一下第五题和第六题吗?谢谢!越详细越好,本人基础差,希望各位能帮帮我。

img

浮点数设有精度。
看一小段C语言程序:

int main()

{
float x = 1.3;

x = x - (int)x;

int i = (int)(x*10);

return ;

}

在你心目中, 变量 I 是怎样的结果?

如果你理所当然地认为是3的话, 那么你就错了~~~

实际结果应该是2. 为什么?

简而言之, x在内存的值并不是精确的1.3, 实际上可能是1.29999999......

因为在计算机组成原因中有说过, 浮点数无法被准确地表示出来, 只能是一个非常精确的值..

#include<stdio.h>
int main()

{
double x = 1.0000003;

x = x - (int)x;

int i = (int)(x * 10000000);
printf("%d", i);
return;

}
由上知,系统存储了一定精度,会自动判别结果,第一题
10/3.0可能是3.3...4或3.3.....2小数最后一位很小,系统确定精度进位或退位,此处进位

第一个10/3.0乘以3:得到一个浮点数,浮动点数是有有效位数的,小数位数多出有效位发生进位。
第二个,10/3是整数相除,得到整数3,3乘以3.0等于9.0

运行一下就清楚了

#include<stdio.h>
int main(){
    printf("10/3.0=%f\n",10/3.0);    //整数与浮点数运算会返回浮点数 
    printf("10/3.0*3=%f\n",10/3.0*3);
    printf("10/3=%d\n",10/3);        //整数与整数相除会舍弃小数部分,还是整数。 
    printf("10/3*3.0=%f\n",10/3*3.0);
    return 0;
}