经典测试——三角形形状判断

使用C语言编程程序:

printf("请输入三角形的三条边长度:【请输入整数(需输入根号可在后续选择)】\n");triangle.a = triangle.input('a');   //  边a的输入triangle.b = triangle.input('b');   triangle.c = triangle.input('c');    

建立了Triangle类后,定义了3个float型的变量作为边长。后使用switch来完成输出:

switch (triangle.getTriangleType(triangle.a, triangle.b, triangle.c)){case Not_a_Triangle:printf("输入参数非法\n");break;case Scalene:printf("不等边三角形\n");break;case Isosceles:printf("等腰三角形\n");break;case Equilateral:printf("等边三角形\n");break;case RightAngled:printf("直角三角形\n");break;case isoscelesRight:printf("等腰直角三角形\n");break;}

以上,main函数完成。

由于边长需要是整数型的输入,C不像是java那样子可以直接进行异常判断,需要自己写一个判断整数的函数:

bool isInteger(float number)
{if (fabs(number - (int)number) < 1e-8) return true;else return false;
}

由于判断等腰直角三角形是需要带根号的(我百度过,说是没有“三边都是整数”的等腰直角三角形),然而C语言并没有直接输入根号的方法可用,那么就考虑在输入的时候让用户来手动的选择是否需要输入根号:

float Triangle::input(char t)
{float tmp = 0;int choice = 0;while (true){printf("%c = ? ", t);scanf("%f", &tmp);printf("当前输入的数字是否带根号?  是:1  否:0  \n");scanf("%d", &choice);printf("\n");if (isInteger(tmp))     //  判断当前输入的是否为整数{if (choice == 0) //  不带根号则直接返回输入的边长return tmp;else if (choice == 1)return sqrt(tmp);   //  带有根号则直接返回其根号后的值}else{printf("请输入整数!");continue;}}
}

最后一步,就是需要根据计算结果来判断三角形的形状了:

int Triangle::getTriangleType(float a, float b, float c)
{// 注意下面 int 到 long 的转换,如果不转换,那么对于 a + b <= c// 这样的逻辑表达式,当 a 和 b 的取值接近系统中 int 数据类型的极// 大值时,表达式将溢出,逻辑运算的结果与预期不符long al = a, bl = b, cl = c;float a_2 = (float)(a*a); //  计算各边的平方float b_2 = (float)(b*b);float c_2 = (float)(c*c);// 使用“两条边之和大于第三边”的定理进行三角形合法性判定,这一// 方法同样适用于输入值中包含 0 或负数的情况。但此判定必须在等边和等腰判定之前if (al + bl <= cl || bl + cl <= al || cl + al <= bl)// return Not_a_Triangle;   //  不构成三角形else if (a == b && b == c)return Equilateral;     //  等边else if (fabs(a_2 -( b_2 + c_2) <1e-5) || (fabs(b_2 == a_2 + c_2) < 1e-5) || (fabs(c_2 == a_2 + b_2) < 1e-5))   { //  直角三角形if (fabs((float)a-(float)b)<1e-5 || fabs((float)b - (float)c)<1e-5 || fabs((float)c - (float)a)<1e-5){return isoscelesRight;  //  等腰直角}else return RightAngled;}else if (a == b || b == c || c == a)return Isosceles;       //  等腰elsereturn Scalene;           //  不等边三角形return 0;
}

其中需要注意两点:

1. 判断“等腰直角三角形”的代码必须要在“等腰三角形”之后,避免当前程序判断成为等腰三角形后就直接跳出了。

2. 在判断a^2 == b^2 + c^2  时,由于有一条边是使用根号sqrt()平方后得来的(例如√2 = 1.414,而1.414^2 != 2)

此时就使用绝对值来进行判断即可“fabs((float)a-(float)b)<1e-5”。

三角形形状判断(等边、等腰、直角、等腰直角、非等边)相关推荐

  1. 根据输入的三角形的三条边的值,判断三角形的类型(等边、等腰、直角、普通、非三角形)并输出

    根据输入的三角形的三条边的值,判断三角形的类型(等边.等腰.直角.普通.非三角形)并输出. 题目:根据输入的三角形的三条边的值,判断三角形的类型(等边.等腰.直角.普通.非三角形)并输出. 程序分析: ...

  2. 输入三个数,判断能否以这三个数构成一个三角形,若能则输出所构成三角形的类别(等边、等腰、直角或斜三角形)

    输入三个数,判断能否以这三个数构成一个三角形,若能则输出所构成三角形的类别(等边.等腰.直角或斜三角形) #include<stdio.h> int main() {int a,b,c; ...

  3. C语言编写程序,从键盘输入三角形的三条边,判断它们是否能构成等腰或直角三角形。

    编写程序,从键盘输入三角形的3条边a.b.c, 判断它们是否能构成等腰或直角三角形,如果能,则输出yes,如果不能,则输出NO. 实验代码: #include <stdio.h> int ...

  4. 【C语言】判断三角形形状

    [C语言]判断三角形形状

  5. 一个简单的判断三角形形状的C程序

    昨天写了一个判断三角形形状的程序,然后EZ发现了里面的无数个问题. 原本我的程序是 #include<stdio.h> int main() {int a,b,c;scanf(" ...

  6. java判断三角形形状

    1.首先判断是否构成一个三角形 2.判断是否是等腰三角形 3.判断是否构成等边三角形 源码如下: package experience; import java.util.Scanner; publi ...

  7. Java白盒测试三角形函数_白盒测试实验报告-三角形形状-山东大学

    实 验 报 告 一.实验目的 运用白盒测试中的条件覆盖和判定覆盖检查程序中内部动作或者运行是否符合规范,各部分内容是否按照规定正常运行. 二 .实验 内容 1 1 .题目 输入三角形的三条边 , 判断 ...

  8. 软件测试java三角形形状判定,java,三角形判定测试报告.doc.doc

    java,三角形判定测试报告.doc java,三角形判定测试报告.doc 测试三角形类型判断程序 测试三角形类型判断程序 软件121 金凯 1102052019 一.实验题目 测试三角形类型判断程序 ...

  9. 使用python编程语言编写程序:输入a、b、c三个数,判断a、b、c能否构成三角形,如果能够构成三角形,判断该三角形是等腰三角形还是等边三角形,还是直角三角形,还是一般三角形。并计算周长和面积。

    使用python编程语言编写程序:输入a.b.c三个数,判断a.b.c能否构成三角形,如果能够构成三角形,判断该三角形是等腰三角形还是等边三角形,还是直角三角形,还是一般三角形.并计算周长和面积. ​ ...

最新文章

  1. 苹果让Transformer抛弃注意力机制,一切只为效率,项目已开源丨华人一作
  2. 【BZOJ2738】矩阵乘法 [整体二分][树状数组]
  3. fmincon函数求解过程中出现无解的情况
  4. 解决rspec 生成报告时报utf-8错误的方法
  5. hook xposed 自定义类_【开始学习React Hook(1)】Hook之useState
  6. 计算机毕业设计中JAVA 23种开发模式详解(代码举例)
  7. 剑指offer十八之二叉树的镜像
  8. Python网页简单小爬虫
  9. 智能商业20讲--曾明.听后感悟
  10. TypeScript转JavaScript的方法。
  11. PS使用:利用PS去除图片中的多余文字
  12. kvm迁移镜像启动报错
  13. Spark推测执行spark.speculation
  14. qmp32下载_U盘歌曲播放顺序调整教程
  15. java 输出乘法口诀第一列_java输出乘法口诀表
  16. cpuz测试分数天梯图_联想Z5跑分实测 附高通骁龙636天梯图性能排名
  17. 7-2 点赞(20 分)
  18. Docker核心技术Namespace浅析
  19. 西门子S7-1200组态PROFINET
  20. 存储组网技术详细说明(SAN、NAS、DAS等)【6】

热门文章

  1. 数字图像处理 拉普拉斯(Laplace)变换 边缘检测算子(二阶导 sobel)变换 锐化(反锐化模板锐化) 算法实现及效果
  2. Wt(C++ Web) 源码编译以及cmake配置
  3. linux 存储映射lun 给_LINUX系统下添加映射存储LUN
  4. linux 存储映射lun 给_LINUX系统下添加映射存储LUN(无需重启)
  5. 微信支付一 :公众号支付1
  6. IIS之web服务器部署
  7. InoReader—— 轻便快捷的在线 RSS 阅读器
  8. java拼音搜索排序算法_Java汉字按照拼音排序
  9. ubuntu14.04下推荐的工具及插件
  10. 超简单Ubuntu Server 配置FTP服务器教程