题目:
给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。
输入描述:
题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。
输出描述:
针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。
解题思路:
一、判断输入的数据是否能够构成三角形
要知道所给的三条边是否能够构成三角形,首先我们要知道能构成三角形的边的条件:
任意两边之和大于第三边
两两组合大于第三条边有以下三种情况即:
(a + b > c && a + c > b && b + c > a)
当输入数据不满足上面的条件时程序输出“Not a triangle!”。
当输入数据满足上面的条件时则输入的三条边可以构成一个三角形。
二、判断三角形类型
题目只是让我们判断“Equilateral triangle!”(等边三角形)、“Isosceles triangle!”(等腰三角形)和“Ordinary triangle!”(一般三角形)。但这三种情况是在输入的三条边能够构成三角形的前提下进行的,下面我们针对以上三种情况进行条件的编写:
- “Equilateral triangle!”(等边三角形)
满足等边三角形的数学条件是:
转化成程序语言即为:(a == b && b == c)
- “Isosceles triangle!”(等腰三角形)
满足等边三角形的数学条件是:或
或
这三条语句我们可以用逻辑或来实现:(a == b || b == c || a == c)
- “Ordinary triangle!”(一般三角形)
满足构成三角形的条件但不属于等边三角形和等腰三角形。
三、输入数据非法时
我们定义的是整型变量a,b,c。仔细想一想如果我们输入0 0 0。我们会得到一个“Equilateral triangle!”(等边三角形),但是实际上这三个数不能组成一个三角形。这时我们输入的三个数都要是大于0的整数。那么就要要求我们写出 的判断条件 即:
(a <= 0 || b <= 0 || c <= 0)
四、编写代码:
下面是可能要用到的知识点
&& 逻辑与:当运算符两边都为真时返回真;可简记为同1为1;或者是有0得0;
&& 逻辑与:全部条件成立时结果才为真
||逻辑或:当运算符两边至少有一个条件为真时即可返回真;可简记为有1得1;或者是全假为假。
||逻辑或:条件中只要有任一个条件成立即可返回真
注:(博主使用的是VS2022社区版,第一行的define是为了scanf函数能够在VS中正常运行,正常情况下程序应从第二行#include开始)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 0, b = 0, c = 0;//初始化
printf("请输入三个数,并且每两个数之间输入一个空格\n");//规范输入格式
while (scanf("%d %d %d", &a, &b, &c) != EOF)//while循环可以进行多组输入
{
if (a + b > c && a + c > b && b + c > a)//判断是否能构成三角形。
{//如果能构成三角形进入大括号执行内部语句,
//若不能构成三角形跳出第一个if的大括号执行其对应的else语句
//在能够构成三角形的基础上判断三角形类型
if (a == b && b == c)//等边三角形的判断
{
printf("Equilateral triangle!\n");//输出等边三角形
}
else if (a == b || b == c || a == c)//等腰三角形的判断
{
printf("Isosceles triangle!\n");
}
else
{
printf("Ordinary triangle!\n");
//在能够成三角形的基础上不满足以上两个条件输出普通三角形
}
}
else if (a <= 0 || b <= 0 || c <= 0)
{
printf("请输入有效数据!\n");
}
else//在不满足第一个if的条件执行此语句
{
printf("Not a triangle!\n");//输出不能构成三角形
}
}
return 0;
}
总结:
现在让我们回顾一下整个的解题过程:
第一,读完题目我们先是把题目最终结果分为两类一类是能够构成三角形,另一类是不能够构成三角形;
第二,我们将能够构成三角形按照题目分为三种情况 “Equilateral triangle!”(等边三角形)、“Isosceles triangle!”(等腰三角形)和“Ordinary triangle!”(一般三角形)。即在满足大前提的条件下再将问题细化,这样我们就完成了题目所给的要求。
第三,我们考虑到了输入非法数据的情况,对我们的程序进行了一点优化。
综上所述,我们先将问题一分为二,再逐步细化问题最终解决问题。然后再根据自己的能力对程序进行一定的优化,最终得到了一个自我感觉相对完美的程序。
希望我的分享能够在你解决问题、学习C语言、编写代码等方面提供一些帮助^_^ 博主自己也正在努力学习C,如果有什么不足的地方请指正!这篇文章如果对你有帮助的话点个小小的拇指赞吧^3^