C语言问题%f和%lf的区别

有的时候输出为%lf答案就正确。%f就错。为什么?老师说LF是DOUBLE类型代表15位有效数字。但是在求三角形面积问题里根本与这个无关。以下代码把%f改为%lf就能输出... 有的时候输出为%lf答案就正确。%f就错。为什么?
老师说LF是DOUBLE类型 代表15位有效数字。但是在求三角形面积问题里根本与这个无关。以下代码把%f改为%lf就能输出正确答案。 为什么?? #include "stdio.h"
#include "math.h"
int main (void)
{
double a,b,c,s;
printf("Please enter 3 reals:\n");
scanf("%f%f%f",&a,&b,&c);
if((a+b)>c&&(a+c)>b&&(b+c)>a)
{
s=(a+b+c)*0.5;
printf("\nArea of the triangle is %lf\n",sqrt(s*(s-a)*(s-b)*(s-c)));
}
else
printf("It is not triangle!\n");
return 0;
}
展开
 我来答
changyiduU4Q
高粉答主

2019-08-01 · 关注我不会让你失望
知道答主
回答量:264
采纳率:100%
帮助的人:8万
展开全部

由于精度的原因,输出%lf和%f的数据不同,可能会造成错误。

主要有一下四点区别:

1、代表的数据类型不同

%f代表单精度浮点型数据(float),%lf代表双精度浮点型数据(double)。

2、有效数字位数不同

单精度浮点数有效数字保证6位,部分7位,双精度浮点数有效数字保证15位,部分16位。

3、所能表示数的范围不同

单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38,双精度浮点的表示范围:-1.79E+308 ~ +1.79E+308

4、在程序中处理速度不同
一般来说,CPU处理单精度浮点数的速度比处理双精度浮点数快。

_叶子妞妞_
推荐于2018-04-24 · TA获得超过3672个赞
知道小有建树答主
回答量:327
采纳率:83%
帮助的人:85.2万
展开全部
%f和%lf分别是float类型和double类型用于格式化输入输出时对应的格式符号。
其中:
float,单精度浮点型,对应%f.
double,双精度浮点型,对应%lf.

在用于输出时:
float类型可以使用%lf格式,但不会有任何好处。
double类型如果使用了%f格式可能会导致输出错误。

在用于输入时:
double 类型使用了%f格式,会导致输入值错误。
float类型使用double类型不仅会导致输入错误,还可能引起程序崩溃。

所以在输入输出时,一定要区分好double和float,而使用对应的格式符号。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
albert1017
推荐于2017-09-11 · TA获得超过867个赞
知道答主
回答量:43
采纳率:0%
帮助的人:54.4万
展开全部
好好看看数据类型的概念吧,把前面的double换成float后面就可以用%f;%f代表按实型输入或输出,而%lf代表按双精度输入或输出,怎么会没有关系呢?输入时采取的格式不同,存在电脑里的数据就不同,电脑里同样的数据(都是由0和1组成的相同的二进制数)按不同的格式输出结果也不会相同
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寳貝謙℡
2009-03-20 · TA获得超过878个赞
知道小有建树答主
回答量:420
采纳率:0%
帮助的人:0
展开全部
因为你定义的a,b,c都是double型吖…所以scanf()接收的a,b,c都是double型…double就是%lf咯…

如果用%f就是flout型咯…就跟定义的卟同了喔…
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ordy1988
2009-03-19
知道答主
回答量:3
采纳率:0%
帮助的人:0
展开全部
你之前已经定义到double了,最后的输出值是按照表达式中的最多有效数字的形式定义的,也就是说如果你定义int a;doubule b;但是输出是c=a+b,c则是double型
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(17)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式