解题思路:
float可存有效数位为7-8,超出存不进去。double可存15-16位有效数字

看a的输出 为1.00000001 虽然遇到了%.f保留小数点后9位,但是数字本身没有变化,可以认为,a的类型为double。 再看 b=a;这句代码的意思是把a的类型赋给b, 发生了隐式转换类型 ,b的输出结果为1.000000000,可判断在转换的时候发生了截断,把1截去了,只存了8位有效小数,后遇到了%.9f补0。 由此我们可以认为b的类型为float。

在发生隐式类型转换的时候,如果是小转大则补0 ,大转小则会把多余部分直接截去,不发生四舍五入

注意事项:

如果有写的不好的或者出错的地方可在评论区指出。
参考代码:

#include<iostream>

using namespace std;

int main(){
cout<<"F E"<<endl;

return 0;

}

验证代码:

#include<iostream>

#include<cstdlib>

using namespace std;

int main() {

double a = 1.000000001;

float b=a;

printf("%.9f %.9f\n", a, b);
return 0;
}

点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论