C语言小程序(一)、判断三角型类型
最近回炉重造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; }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
· ASP.NET Core 模型验证消息的本地化新姿势
· 对象命名为何需要避免'-er'和'-or'后缀
· 开发的设计和重构,为开发效率服务
· 从零开始开发一个 MCP Server!
· Ai满嘴顺口溜,想考研?浪费我几个小时
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想