• 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())!='
    ' && (cs=getchar())!=EOF);
    			printf("输入错误,a b c必须大于零,是否新输入(y/n):");
    		}
    		else if(judge_err_flag)
    		{
    			judge_err_flag = 0;
    			while((cs=getchar())!='
    ' && (cs=getchar())!=EOF);
    			printf("组不成三角形,是否重新输入(y/n):");
    		}
    		else
    		{
    			while((cs=getchar())!='
    ' && (cs=getchar())!=EOF);
    			printf("是否再输入一组数据(y/n):");
    		}
    		ch = getchar();
    	}
    	while(ch=='y' || ch=='Y' || ch=='
    ');
    	puts("Goodbye!");
    
    	return 0;
    }

  • 相关阅读:
    Odoo 库存管理-库存移动(Stock Move)新玩法
    odoo8.0+PyCharm4.5开发环境配置
    (总结)隐藏PHP版本与PHP基本安全设置
    Docker无法启动 Could not find a free IP address range for interface 'docker0' 最方便的解决办法
    MySQL Point in Time Recovery the Right Way
    The query below helps you to locate tables without a primary key:
    记一次揪心的MySQL数据恢复过程
    Linux中利用extundelete恢复误删除的数据
    Centos升级Python 2.7并安装pip、ipython
    navicat
  • 原文地址:https://www.cnblogs.com/java20130726/p/3218672.html
Copyright © 2020-2023  润新知