产量即将到来

时间:2017-08-30 09:36:59

标签: c

#include<stdio.h>
#include<math.h>

int main()
{
  double a,b,c,A,p,   
  scanf("%lf %lf %lf",&a,&b,&c); //Output is put in integers

  p = (a+b+c)/2;

  A = sqrt(p*(p-a)*(p-b)*(p-c));
  printf("Area of triangle is %lf",A);
  //The output is coming out to be -nan for some inputs.

  return 0;         
}

2 个答案:

答案 0 :(得分:3)

输入

1.0 2.0 5.0

你得到了

p = 4.0
p - a = 3.0
p - b = 2.0
p - c = -1.0  // notice the sign

所以你最终得到了

sqrt(-24.0)  // ups... sqrt of a negative number

因此,您获得了-nan

也许您应该使用fabs来消除负值。

BTW: nan表示&#34;不是数字&#34; - 见https://en.wikipedia.org/wiki/NaN

BTW:始终检查scanf返回的值,以确保它实际扫描了预期数量的值,即

if (scanf("%lf %lf %lf",&a,&b,&c) != 3)
{
    // Input failure - add error handling...
    // For instance:
    printf("Illegal input - please provide 3 double as input\n");
    return -1;
}

答案 1 :(得分:0)

double a,b,c,A,p;
你忘记了; ?

如果你想printf一个浮点数或两倍,你可以使用%f而不是%lf

 printf("Area of triangle is %f",A);

您只使用%lf作为浮点数或双精度数的输入,输出使用%f

另一件事可能是sqrt()是否定的。