码迷,mamicode.com
首页 > 其他好文 > 详细

浅析三角形测试程序

时间:2014-10-03 16:13:34      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:c语言   测试   内存   

编程输入三角形的三条边,判断它们能否构成三角形。若可以构成三角形,指出是何种三角形:等腰三角形,直角三角形,还是一般三角形?

C语言实现如下:

#include<stdio.h>
#include<math.h>
#define EPS 1e-7
int main(){
float a, b, c;
int flag = 1;
printf("Input a, b, c: ");
scanf("%f,%f,%f",&a,&b,&c);


if(a+b>c && b+c>a && a+c>b){
/* 先判断是否为等边三角形再判断是否为等腰三角形: 等边三角形一定是等腰三角形,但反之不一定。 */
if(fabs(a-b)<=EPS && fabs(b-c)<=EPS && fabs(c-a)<=EPS){
printf("等边");
flag = 0; //标志位置零
}
else if(fabs(a-b)<=EPS || fabs(b-c)<=EPS || fabs(c-a)<=EPS){
printf("等腰");
flag = 0; //标志位置零
}
if(fabs(a*a+b*b-c*c)<=EPS || fabs(a*a+c*c-b*b)<=EPS || fabs(c*c+b*b-a*a)<=EPS){
printf("直角");
flag = 0;
}
if(flag){
printf("一般");
}
printf("三角形");
}
else{
printf("不是三角形\n");
}
}

从这个例子中,我们看到由于等腰三角形好,直角三角形不是非此即彼的关系,而是存在交叉,集合的相交部分正是等腰直角三角形,

因此不可以用if-else语句来依次判断是否是等腰三角形和直角三角形,应该用并列的if语句来判断。

注意点1:一般地,只有非此即彼的关系才采用if-else语句,而对于有交叉的关系,应使用两个并列的if语句,这一点是值得我们思考的地方。

注意点2:内存中的浮点数所 表示的精度是有限的,所以比较实行变量与与0是否相等或者两个实型变量是否相等时,

不能像整形变量与0比较那样直接用相等关系运算符与0比较,而应该判断实型变量的值是否位于0附近的一个很小的区间内或者两个实型变量的差值

是否足够小来进行实型变量的比较。

程序虽小,奥妙无穷,与大家共勉!


浅析三角形测试程序

标签:c语言   测试   内存   

原文地址:http://blog.csdn.net/gaoxueyi551/article/details/39755143

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!