求大神讲解一下关于C语言的问题,我把输出的格式由%f 改为%lf 为什么答

求大神讲解一下关于C语言的问题,我把输出的格式由%f 改为%lf 为什么答案差这么多?只是精度不太准确吧,怎么会差这么多?(第一张图是格式为%lf时的答案,第二张是格式为%f时的整个程序,第三张是格式为%f时的答案,原谅只能传三张图。。。)谢谢大神的解答啦!!
图片好像看不清楚,我把题目再打一遍
#include<stdio.h>
#include<math.h>
#define PI 3.14
int main()
{
double h,s1,s2,v1,v2,c,r;
scanf("%f,%f",&r,&h);
c=2*PI*r;
s1=PI*r*r;
s2=4*PI*r*r;
v1=4/3*PI*r*r*r;
v2=s1*h;
printf("圆周长=%7.2f\n圆面积=%7.2f\n圆球表面积=%7.2f\n圆球体积=%7.2f\n圆柱体积=%7.2f\n",c,s1,s2,v1,v2);
return 0;
}

第1个回答  2017-04-16
该用什么就用什么,double类型对应的就是lf,是双精度类型,比float大。好比你穿大的衣服,虽然不合适,但是能穿进去,但是穿小的衣服,同样不合适,却穿不进去。而且这个数据零度的问题,不同的编译系统情况也都有所不同的。本回答被提问者采纳
第2个回答  2017-04-16
各种类型变量的储存方格式不一样,要用相对应的格式输入输出,如float型对应%f、double型对应%lf,用错了读写格式,得到的结果是错误的。本回答被网友采纳

求大神讲解一下关于C语言的问题,我把输出的格式由%f 改为%lf 为什么答...
该用什么就用什么,double类型对应的就是lf,是双精度类型,比float大。好比你穿大的衣服,虽然不合适,但是能穿进去,但是穿小的衣服,同样不合适,却穿不进去。而且这个数据零度的问题,不同的编译系统情况也都有所不同的。

C语言问题%f和%lf的区别
C语言中的%f和%lf是用于输出浮点数的格式控制符,它们在精度和性能上存在一些关键差异。类型区分:%f适用于单精度浮点型数据(float),而%lf则对应于双精度浮点型数据(double)。精度差异:单精度浮点数的有效数字位数通常为6位,但可能最多可达7位,而双精度浮点数的精度更优,至少15位,甚至16位。

c语言单精度浮点型为什么可以输出16位,%f可以代替%lf
f 是默认输出格式,默认输出格式显示到小数点下6位,前方有多少显示多少。float 型,精度是 有效数字 6-7 位。多出的位的精度不保证。scanf() 输入格式 double 必须用 %lf 不允许用 %f printf() 输入格式 double 可以 用 %lf 也 允许 用 %f 这是编译器 这么定 的 游戏规则,没太多 ...

C语言问题%f和%lf的区别
1、代表的数据类型不同 f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)。2、有效数字位数不同 单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。3、所能表示数的范围不同 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38,双精度浮点的表示...

C语言中printf函数中%f和%lf结果为什么一样
但是有朋友说%f是float类型,%lf才是double类型,具此我特意查阅了MSDN和Linux man手册,均没有发现此类描述,在linux man手册中,说明%lf为long double类型。为了说明问题,我又做了几个实验:实验一,检查%f需要读取几个字节 int a=0, b=0, c=5;printf("%f,%d\\n", a, b, c);输出结果:...

c语言里%f跟%lf有什么区别?
由于精度的原因,输出%lf和%f的数据不同,可能会造成错误。主要有一下四点区别:1、代表的数据类型不同 f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)。2、有效数字位数不同 单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。3、所能表示数的...

C语言中关于double和float的问题!
因为格式化输入scanf要求数据类型和输入格式对应,你只要把scanf里面的%f改为%lf,double就能正常使用了。还有输出时候不管float和double,都用%f,因为C语言里面就是这么定义的,输出时候统一了,但是如果输出用%lf,大多数编译器也能正常输出。

C语言中 输出的两个问题
printf函数中 为什么 是f 而不可以是lf.double pi;应当用lf 用f,则转换为(float) pi, 再输出。printf("%6.2lf",a)中的6是 输出数占6位地盘,包括2位小数,1位小数点,整数部分,如果是负数,还包括符号,共6位地盘。

c语言编程中%lf和%f,有啥区别,什么double,长短型,求大神解释
作输出格式控制字符串时效果一样,不说。作scanf的输入控制字符串时,%lf是双精度,8字节;%f是单精度,4字节;——也就是%lf对应double型就是,%f对应float型变量,用错了运行结果就出错。double的长型是10字节,精确到19位,double型是8字节,精确到16位,未见过“短double”型。但好多编译器下...

C语言 关于float 和 double 输入时 如果是float必须用%f double必须用...
输出float 用 %f, double 可以用 %lf, 也可以用 %f, 这将按默认 定点格式输出。没给 场宽和小数位数 时 按 默认位数输出。若给了 场宽和小数位数 时 按 给定的 输出,若给的宽度不足时,按实际需要的场宽输出。float 有效数字为6-7位,double有效数字 14位。.16lf -- 输出 double...

相似回答