猿问

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

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);
}
else
printf("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");
else
printf("It has no root.\n");
}
}
问题正如程序的注释所注,我现在对float和double的用法有点迷惘
哪位高手能帮一下忙,解释一下,不胜感激!
我用的是VC++ 6.0

波斯汪
浏览 556回答 2
2回答

弑天下

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不同,不要写错,能用单精度时不要用双精度(以省内存,加快运算速度)

慕森卡

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