hnust 1093 实验2-5:判定三角形
题目描述
编写程序。实现根据用户输入的三角形的边长,判定是何种三角形。
输入
输入三个数(用逗号隔开),分别代表三角形的三条边。
输出
/判断三边是否构成三角形/
{
/*如果三条边均相等,则输出为等边三角形: printf(“Equilateral triangle\n”); */
else /如果只有两条边相等,则输出为等腰三角形:printf(“Isoceles triangle\n”)/
else /*如果两边的平方和等于第三边平方,则输出为直角三角形:printf(“Right-angled triangle\n”) */
else /输出为一般三角形:printf(“General triangle\n”);/
}
else
/*输出不能构成三角形:printf(“Can’t make up of triangle\n”); */
样例输入 Copy
3,4,5
样例输出 Copy
Right-angled triangle
提示
本题由实验指导书中的实验题第4题改编而成。
注意:不要提示信息。
解题过程
数据不大,暴力神话
等边三角形:三条边长度相等。
等腰三角形:两条边长度相等。
普通三角形:三条边长度都不相等。
下面是对代码的详细解析:
-
头文件:
- 包含
cstdio
和iostream
头文件,分别用于C风格的输入输出和C++风格的输入输出。
- 包含
-
命名空间:
- 使用
using namespace std;
来避免在标准库类型和函数前加std::
。
- 使用
-
变量声明:
- 定义了三个
double
类型的变量a
、b
、c
,用于存储输入的三个边长。
- 定义了三个
-
输入边长:
- 使用
scanf
函数读取三个边长,格式说明符%lf
用于读取double
类型的数值,,
指定了输入字段分隔符。
- 使用
-
计算三边:
- 使用
max
和min
函数(需要包含<algorithm>
头文件)来找出三个边中的最大边x
和最小边y
。 - 计算第三边
z
,它是三边和减去x
和y
。
- 使用
-
判断三角形类型:
- 首先判断三边长能否构成三角形,即任意两边之和大于第三边,如果不能,输出 “Can’t make up of triangle”。
- 如果能构成三角形,进一步判断三角形的类型:
- 如果
x
、y
、z
任意两边的平方和减去第三边的平方为0,输出 “Right-angled triangle”(直角三角形)。 - 如果上述差值大于0,输出 “General triangle”(一般三角形)。
- 如果三边相等,输出 “Equilateral triangle”(等边三角形)。
- 如果有两边相等,输出 “Isosceles triangle”(等腰三角形)。
- 如果
-
输出结果:
- 根据判断结果输出相应的三角形类型。
-
程序结束:
- 返回0,表示程序正常结束。
代码逻辑分析:
- 代码首先读取三个边长,然后通过数学逻辑判断这些边长能否构成三角形,以及三角形的类型。
- 使用了
max
和min
函数简化了找出最大边和最小边的过程。
潜在问题:
- 代码中
max
和min
函数的使用没有包含<algorithm>
头文件,这会导致编译错误。 - 输出时 “General tria” 应该是 “General triangle”,代码中存在拼写错误。
改进建议:
- 确保包含
<algorithm>
头文件以使用max
和min
函数。 - 修正输出字符串中的拼写错误。
- 考虑使用
std::cin
和std::cout
替代scanf
和printf
,以保持代码的一致性并使用C++标准库。
AC代码
#include<cstdio>
#include<iostream>
using namespace std;
int main()
{double a,b,c;scanf("%lf,%lf,%lf",&a,&b,&c);double x,y,z;x=max(a,max(b,c));y=min(a,min(b,c));z=a+b+c-x-y;if(x>=y+z)cout<<"Can't make up of triangle\n"<<endl;else if(y*y+z*z-x*x==0)cout<<"Right-angled triangle"<<endl;else if((y*y+z*z-x*x>0)||(y*y+z*z-x*x<0))cout<<"General tria"<<endl;else if((x==y)&&(y==z)&&(x==z))cout<<"Equilateral triangle"<<endl;else if((x==z)||(x==y)||(y==z))cout<<"Isoceles triangle"<<endl;return 0;
}