最近回炉重造C语言,陆续写一些比较短的代码,选择其中的一些贴到这里,都是在Linux下的代码,Windows未测试。

第一个判断三角形的类型,两个浮点型数据不能直接判断相等,为了输入方便一些,自己设置的精度比较低,10^(-3)。

#include <stdio.h>
#include <stdlib.h>
#define EPSINON 1e-3
#define ABS(a) (((a)>0)?(a):(-a)) //?:不支持表达式嵌套
#define ZERO(x) ((x)>-EPSINON && (x)<EPSINON)
#define MAX(a,b) (((a)>(b))?(a):(b))
#define MIN(a,b) (((a)<(b))?(a):(b)) float a, b, c;
float max, mid, min;
char input_err_flag = 0;
char judge_err_flag = 0; int equal(float a, float b)
{
float tmp;
tmp = a - b;
tmp = ZERO(ABS(tmp));
return tmp;
} void input(void)
{
a = b = c = 0;
printf("输入三条边的值:");
scanf("%f %f %f",&a, &b, &c);
if(!(a>0) || !(b>0) || !(c>0))
{
input_err_flag = 1;
}
} void sort(void)
{
max = MAX(MAX(a,b),c);
min = MIN(MIN(a,b),c);
if(MAX(a,b) < c)
mid = MAX(a,b);
else
mid = MAX(MIN(a,b),c);
} void judge(void)
{
float max_square, mid_square, min_square, tmp;
if(max >= (mid+min))
{
judge_err_flag = 1;
}
else
{
max_square = max * max;
mid_square = mid * mid;
min_square = min * min;
tmp = mid_square + min_square;
if(equal(mid,min) || equal(max, mid))
{
if(equal(mid, min))
{
if(mid == max)
puts("等边三角形。");
else if(equal(max_square, tmp))
puts("等腰直角三角形。");
else if(max_square < tmp)
puts("等腰锐角三角形。");
else
puts("等腰钝角三角形。");
}
else
{
if(equal(min, mid))
puts("等边三角形。");
else
puts("等腰锐角三角形。");
}
}
else if(equal(max_square, tmp))
puts("直角三角形。");
else if(max_square < tmp)
puts("锐角三角形。");
else
puts("钝角三角形。");
}
} int main(void)
{
char cs, ch; do
{
input();
sort();
judge(); if(input_err_flag)
{
input_err_flag = 0;
while((cs=getchar())!='\n' && (cs=getchar())!=EOF);
printf("输入错误,a b c必须大于零,是否新输入(y/n):");
}
else if(judge_err_flag)
{
judge_err_flag = 0;
while((cs=getchar())!='\n' && (cs=getchar())!=EOF);
printf("组不成三角形,是否重新输入(y/n):");
}
else
{
while((cs=getchar())!='\n' && (cs=getchar())!=EOF);
printf("是否再输入一组数据(y/n):");
}
ch = getchar();
}
while(ch=='y' || ch=='Y' || ch=='\n');
puts("Goodbye!"); return 0;
}

最新文章

  1. Windows7安装 .net framework 4.0
  2. 基于Grunt&amp;Mocha 搭建Nodejs自动化单元测试框架(含代码覆盖率统计)
  3. 网页WEB打印控件制作-开放源码
  4. 《Memcache学习总结》[PDF]发布
  5. JS和JQuery总结
  6. Orleans之Hello World
  7. Android:使用adb命令行导出[数据库db3]文件
  8. Groovy轻松入门——搭建Groovy开发环境
  9. Http中Cookie和Session介绍
  10. (转载)OC学习篇之---Foundation框架中的NSDirctionary类以及NSMutableDirctionary类
  11. acdream 小晴天老师系列——苹果大丰收(DP)
  12. E8.Net工作流平台开发篇
  13. Temporary Post Used For Theme Detection (da655c32-bc15-41ad-bf89-e76c1ec1bea7 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)
  14. android 视频通话开启呼叫等待后,来第三方的视频通话,接通后通话时间一直显示为0,过几秒之后视频通话自己主动挂断
  15. 一张图解释NIO原理
  16. sql server 将两列数据合并到一列 拼接
  17. js this 引起的祸
  18. 终极解决方案:org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response
  19. Linux查看某个端口使用情况并kill
  20. UICollectionView自定义cell布局layout

热门文章

  1. Android平台录音音量计的实现
  2. 【POJ-2524】Ubiquitous Religions(并查集)
  3. 实用T-SQL代码
  4. IoC原理及实现
  5. 九度OJ 1336:液晶屏裁剪 (GCD)
  6. php建立一个空类: stdClass
  7. Linux安装Nginx使用反向代理
  8. eclipse revert resources 很慢的解决办法
  9. Apache Shiro 使用手册(一)Shiro架构介绍(转发:http://kdboy.iteye.com/blog/1154644#bc2399255)
  10. Android app与PC端交互