C语言练习:三角形判断(等边、等腰、普通)

提示:用C语言三角形判断(等边、等腰、普通)

文章目录


前言

等边三角形的3条边长度都相等,但等腰三角形只有两条边的长度是相等的。如果三角形的3条边长度都不等,那就称为不等边三角形。请编写一个程序,提示用户输入个数,分别表示三角形3条边的长度,然后由程序判断它是什么类型的三角形。提示除了边的长度是否相等,程序是否还应考虑一些其他的东西?

一、三角形判断代码

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
    float a, b, c;
    printf("请输入三个数:");
    scanf("%f %f %f", &a, &b, &c);
    
    while (a<=0 || b<=0 || c<=0)
    {
        printf("请输入三个正数:");
        scanf("%f %f %f", &a, &b, &c);
    }
    
    if((a+b)>c && (a+c)>b && (b+c)>a)
    {
        if(a==b && b==c) {
            printf("等边三角形\n");
        } 
        else if(a==b || a==c || b==c) {
            printf("等腰三角形\n");
        } 
        else {
            printf("普通三角形\n");
        }
    } 
    else {
        printf("不能构成三角形\n");
    }
   
    return 0;
}

二、逻辑分析

  • 代码首先确保输入的三个值为正数
  • 再确保输入的三条边能构成一个有效的三角形。
  • 然后,根据三条边的相等情况判断三角形的具体类型。
  • 如果三条边无法构成三角形,程序会进行相应提示。

表达式 (a+b)>c && (a+c)>b && (b+c)>a,优先级分析:

  • 关系运算符优先级
    • > 是关系运算符,用于比较两个值。它的优先级高于逻辑运算符。关系运算符的优先级在逻辑运算符之前。
  • 逻辑运算符优先级
    • && 是逻辑与运算符,用于连接两个布尔表达式。逻辑运算符的优先级低于关系运算符。
  • && 运算符的短路特性意味着如果 (a+b)>c 为0,那么整个表达式的结果就会是 0,并且不会再计算(a+c)>b(b+c)>a。同样,如果(a+b)>c(a+c)>b都为 1,才会计算 (b+c)>a

三、减少逻辑分析的代码

#include <stdio.h>
#include <stdlib.h>

int main() {
    float a, b, c;
    printf("请输入三角形的三条边长(用空格分隔):\n");
    scanf("%f %f %f", &a, &b, &c);

    // 对边长进行排序(从大到小),以减少逻辑判断
    float temp;
    if (a < b) {
        temp = a;
        a = b;
        b = temp;
    }
    if (a < c) {
        temp = a;
        a = c;
        c = temp;
    }
    if (b < c) {
        temp = b;
        b = c;
        c = temp;
    }

    // 判断是否满足三角形条件
    if (c <= 0 || a >= b + c) {
        printf("不满足三角形的条件。\n");
    } else if (a == b && b == c) {
        printf("等边三角形。\n");
    } else if (a == b || b == c) {
        printf("等腰三角形。\n");
    } else {
        printf("不等边三角形。\n");
    }

    return 0;
}
        通过排序,将三角形的边长从大到小排列后,可以减少判断逻辑。在排序后,a 是最大的边,bc 是其余的两个边。这样只需检查 a 是否小于等于 b + c 即可判断是否能构成三角形,这样简化了判断逻辑。

总结

给出了两种方式

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值