/*Description
输入3个数,代表三角形的三条边长,判断这三条边是否能构成三角形,如果能,
计算并输出三角形的面积,否则输出NO。
Input
输入包括多组测试数据,每组有三个数,中间用空格隔开,单独占一行。
输入三个数都是0时输入结束,不需处理。
Output
如果能够成三角形,输出三角形的面积,小数位数输出2位。若不能构成三角形,
输出NO。
Sample Input
3 4 5
4 3 3
0 0 0
Sample Output
6.00
4.47*/
#include <stdio.h>
#include <math.h>
#define N 5
int main()
{
float a[N][3],p,S;
int i,j;
for(i = 0;i < N;i++)
{
for(j = 0;j < 3;j++)
{
scanf("%f",&a[i][j]);
}
if(a[i][0] == 0 && a[i][1] == 0 && a[i][2] == 0)
break;
}
for(i = 0;i < N ;i++)
{
if(a[i][0] != 0 && a[i][1] != 0 && a[i][2] != 0)
{
if(a[i][0] + a[i][1] > a[i][2] && a[i][0] - a[i][1] < a[i][2])//判断是否是三角形
{
p = 1.0 / 2 * (a[i][0] + a[i][1] + a[i][2]);
S = pow((p * (p - a[i][0]) * (p - a[i][1]) * (p - a[i][2])),1.0 / 2);
printf("%.2f\n",S);
}
else
printf("NO\n");
}
}
}
我遇到的问题:
1.我所遇到的数学函数所需值的类型全是浮点型
2.在进行诸如1/2类似的计算时,要想清楚输出值需要什么类型,因为int型数据相除得数还是int型,这是一个小细节问题。