判断三角形的类型(C语言)对新手及其友好^_^

题目:

给出的三条边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!”(一般三角形)。但这三种情况是在输入的三条边能够构成三角形的前提下进行的,下面我们针对以上三种情况进行条件的编写:

  1. “Equilateral triangle!”(等边三角形)

    满足等边三角形的数学条件是:a=b=c
    转化成程序语言即为:
    (a == b && b == c)
  2. “Isosceles triangle!”(等腰三角形)

    满足等边三角形的数学条件是:a=b\neq ca=c\neq ba\neq b=c
    这三条语句我们可以用逻辑或来实现:
    (a == b || b == c || a == c)
  3. “Ordinary triangle!”(一般三角形)

    满足构成三角形的条件但不属于等边三角形和等腰三角形。

三、输入数据非法时

我们定义的是整型变量a,b,c。仔细想一想如果我们输入0 0 0。我们会得到一个“Equilateral triangle!”(等边三角形),但是实际上这三个数不能组成一个三角形。这时我们输入的三个数都要是大于0的整数。那么就要要求我们写出 a>0,b>0,c>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^
 

  • 45
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mmmmm0202

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值