为了账号安全,请及时绑定邮箱和手机立即绑定

为什么当我把这里的float改成double或int就不行了呢?

为什么当我把这里的float改成double或int就不行了呢?

C C#
波斯汪 2022-04-21 13:15:40
1.#include <stdio.h>#include <math.h>void main(){float a,b,c,s,area; /*当我把这里的float改成double时就不行了*/printf("Please input the lentghs of the sides:");scanf("%f%f%f",&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c));printf("The area is %g\n",area);}2.#include <stdio.h>#include <math.h>void main(){float a,b,c; /*还是的,当我把这里的float改成double或int就不行了*/float x1,x2,mid_trm;printf("Please input the three coefficients of the function:");scanf("%f%f%f",&a,&b,&c);if(a!=0){mid_trm=b*b-4*a*c;if(mid_trm>0){x1=(-b+sqrt(mid_trm))/(2*a);x2=(-b-sqrt(mid_trm))/(2*a);printf("The two roots are %g, %g\n",x1,x2);}else if(mid_trm==0){x1=-b/(2*a);printf("It has only one root: %g\n",x1);}elseprintf("It has no real root!\n");}else{if(b!=0)printf("The root is %g\n",-c/b);else if(c==0)printf("It has infinite roots.\n");elseprintf("It has no root.\n");}}问题正如程序的注释所注,我现在对float和double的用法有点迷惘哪位高手能帮一下忙,解释一下,不胜感激!我用的是VC++ 6.0
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

float a,b,c,s,area; /*当你把这里的float改成double时*/

printf("Please input the lentghs of the sides:");
scanf("%lf%lf%lf",&a,&b,&c);/*这里请吧%f改成%lf*/
************************还有******************************:

float a,b,c; /*当你把这里的float改成double或int*/
float x1,x2,mid_trm;

printf("Please input the three coefficients of the function:");
scanf("%f%f%f",&a,&b,&c);/*这里请吧%f改成%lf(double),把%f改成%d(int)*/

printf("%f",area);
也一样,当你输出的数如area是float型的时候,请你把%f注意下,是double就把%lf写上,这是用法上的区别,用多了就习惯了

总的来说:
上面说的是用法,跟你说下他们的区别
单精度浮点数在机内占4个字节,用32位二进制描述。
双精度浮点数在机内占8个字节,用64位二进制描述。

对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位。但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言中数学函数名称double 和 float不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)

查看完整回答
反对 回复 2022-04-24
?
慕森卡

TA贡献1806条经验 获得超8个赞

首先float长度是4字节,表示范围1.5e
-
45~
3.4e
+
38。double长度是8字节,精度较高。
使用float时,printf语句和scanf语句中的数据类型必须是%f,double的是%d
一般使用float就够用了,当然如果做乘法运算时,特别是两个较大的浮点数运算时,乘积的类型必须是double类型,不然结果错误。
还有,可以将float型赋值给double型,反过来不行。
编程过程中还要注意隐式类型转换,比如:
float
f=10.5;
int
i=f;
这样的直接给int型赋值的直接把小数点后面的截断,不考虑四舍五入,上面i的值最后是10,而不是11
暂时想这么多,多用用就熟了



查看完整回答
反对 回复 2022-04-24
  • 2 回答
  • 0 关注
  • 554 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信