#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
int a,b,c;
float p,s;
scanf("%d,%d,%d",&a,&b,&c);
p=(a+b+c)/2;
s=sqrt(p*(p-a)(p-b)(p-c));
printf("%.2f",s);
return 0;
}
1.很简单,p,s为浮点数是因为我们期望计算值为浮点数,而实际运算中不可能全是整型结果,要囊括浮点数,即 p,s 采用浮点数形式
2.无法输出是因为首先类型不匹配,整型无法对应输出浮点数的结果,其次是这里使用了 sqrt 函数,该函数声明为 double sqrt(double x),参数 x 默认形式就是双精度浮点数,所以无法输出。
铁汁,码字不易,如果有帮助还请点个采纳捏~
int型,p等于4,p-c就是0,如果是float型,p等于4.5
(2+3+4)/2=4
(2.0+3.0+4.0)/2=4.5
下一步(p-c)就变成了0
类型不匹配都设成float吧
原因:
关键在这一句:p = (a + b + c) / 2;
这里的a、b、c均为int型变量,2也为int型常量,那么等式右边计算得到的值也就是int型。
当a = 2, b = 3, c = 4时,右边 = (2 + 3 + 4) / 2 = 4.5 (int型数据舍弃小数点) = 4;
那么(p - c) = 4 - 4 =0,则最终导致s = 0。
解决:
// 对表达式作类型转换,即:
// 方法一:隐式类型转换
p = (a + b + c) / 2.0;
// 方法二:显式类型转换
p = (double)(a + b + c) / 2;
// 就能正确得出结果
abc的类型不对,应该是同类型才可以计算。