浅析三角形测试程序

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

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附近的一个很小的区间内或者两个实型变量的差值

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

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

时间: 2024-12-16 05:33:22

浅析三角形测试程序的相关文章

判断三角形并使用Junit测试

  一.安装Junit,hamcrest和EclEmma的过程 1.下载Junit的jar包和hamcrest,目前它的版本是junit 4.12,可以从www.junit.org上下载. 2.打开eclipse,在要使用Junit的project名上,点击properties--java build path-libraries,点击Add External JARs,把Junit包点上就行了.如图1所示,点击Add External JARs,选择相应的Junit包. 图1 安装junit包

浅析Java抽象类和接口的比较

abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意.其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于问题领域本质的理解.对于设计意图的理解是否正确.合理.本

ST:Lab1实验报告(测试判断三角形边长)

Lab 1 实验报告 一.   实验任务 下载Junit(4.12), Hamcrest(1.3),并在Eclipse上添加这来那个jar包 在Eclipse上安装Eclemma,用来显示测试的覆盖率. 写一个java程序,来判断三角形的形状,并且Junit来对这个程序进行测试. a)       判断三角形问题的描述: 判断三角形的函数传入三个形参int a, int b, int c 来代表三角形的三个边.并且计算并判断三角形是等边三角形.等腰三角形以及三边都不等的三角形. 二.   实验过

浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程【转】

本文转载自:http://www.cnblogs.com/qingchen1984/p/7007631.html 本篇文章主要介绍了"浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程",主要涉及到浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程方面的内容,对于浅析 Linux 中的时间编程和实现原理一—— Linux 应用层的时间编程感兴趣的同学可以参考一下. 简介: 本文试图完整地描述 Linux 系统中 C 语言编程中的时间问

浅析DirectX11技术带给图形业界的改变(一) 浅析DirectX11技术带给图形业界的改变【转】

浅析DirectX11技术带给图形业界的改变(一) 浅析DirectX11技术带给图形业界的改变 前言:2009年10月23日,微软高调发布了其最新一代操作系统——Windows7,这款操作系统相对于之前的Vista系统有相当大的进步,特别核心执行效率方面得到显著改善,并且加入了DirectX 11等新技术.微软此次推出全新图形API——DirectX 11目的很明确,就是能够充分利用显卡资源,旨在游戏以及通用计算方面达到更高的执行效率.今天本文就带大家一起分析DirectX 11技术带给图形业

Python之encode与decode浅析

 Python之encode与decode浅析 在 python 源代码文件中,如果你有用到非ASCII字符,则需要在文件头部进行字符编码的声明,声明如下: # code: UTF-8 因为python 只检查 #.coding 和编码字符串,为了美观等原因可以如下写法: #-*-coding:utf-8-*- 常见编码介绍: GB2312编码:适用于汉字处理.汉字通信等系统之间的信息交换. GBK编码:是汉字编码标准之一,是在 GB2312-80 标准基础上的内码扩展规范,使用了双字节编码.

浅析PHP的开源产品二次开发的基本要求

浅析PHP的开源产品二次开发的基本要求 第一, 基本要求:HTML(必须要非常熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS是怎么使用的) 第二, 熟悉开源产品的使用,比如 Dedecms,你要知道怎么登录,怎么新建栏目,怎么添加文章,模板标签的使用方法,模型的概念和使用方法等等一些功能 第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文

#这个测试程序有助于我们理解wxPython的界面设计,基本的控件和事件调用都有

#!/bin/env python # -*- coding: utf-8 -*- ################################################################################# #这个测试程序有助于我们理解wxPython的界面设计,基本的控件和事件调用都有 ################################################################################# imp

word-break|overflow-wrap|word-wrap——CSS英文断句浅析

---恢复内容开始--- word-break|overflow-wrap|word-wrap--CSS英文断句浅析 一 问题引入 今天在再次学习 overflow 属性的时候,查看效果时,看到如下结果,内容在 div 中国换行了,可是两个 P 元素的内容并没有换行,搜索一番没有找到系统的答案,截图到群里请教大神,才知道是英文断句的问题,但是还是不太明白.之前没有遇到这种情况,为了彻底搞清楚,英文断句,又开始学习英文断句到底是怎么回事. 二 换行 每种语言里都有换行,就中文而言,我们最小语言单位