标题:请问这个哪里错了?
只看楼主
莫说
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2019-3-25
结帖率:50%
已结贴  问题点数:18 回复次数:6 
请问这个哪里错了?
#include<stdio.h>
main()
{
    float a,b,c;
    printf("输入三角形边长:\n");
    scanf("%f,%f,%f",&a,&b,&c);
    if((a-b>=c)||(a-c>=b)||(b-c>=a))
    printf("不能够构成三角形\n");
    else
        if((a*a+b*b=c*c)||(a*a+c*c=b*b)||(b*b+c*c=a*a))
            if((a==b)||(b==c)||(a==c))
                printf("等腰直角三角形:\n");
            else
                printf("直角三角形\n");
            else if((a==b)&&(b==c))
                printf("等边三角形\n");
            else if((a==b)&&(b!=c)||(b==c)&&(c!=b)||(a==c)&&(c!=a))
                printf("等腰三角形\n");
            else
                printf("一般三角形\n");
}
搜索更多相关主题的帖子: stdio printf 三角形 || if 
2019-04-01 20:26
word123
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:13
帖 子:333
专家分:1622
注 册:2014-4-5
得分:4 
scanf("%f,%f,%f",&a,&b,&c);    -》 scanf("%f%f%f",&a,&b,&c);
if((a-b>=c)||(a-c>=b)||(b-c>=a))   -》  (a-b>=c)||(a-c>=b)  这两个表达式不是一个意思吗
a*a+b*b=c*c)||(a*a+c*c=b*b)||(b*b+c*c=a*a       -》  ==  这个if包括的内容打个括号吧,还有下面第一个else if缩进不对。

(b==c)&&(c!=b)||(a==c)&&(c!=a)    -》b==c&&c!=b  这两个表达式不是矛盾吗
2019-04-02 10:54
yuyundong
Rank: 2
等 级:论坛游民
威 望:2
帖 子:19
专家分:45
注 册:2019-2-18
得分:4 
if((a-b>=c)||(a-c>=b)||(b-c>=a))绝对值
if判断控制的内容用{}括起来
2019-04-02 17:58
_17737531979
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2019-4-3
得分:4 
回复 楼主 莫说
判定不是三角形的条件不充分,应该是if(a+b<=c||a+c<=b||b+c<=a)
2019-04-03 15:37
三脚猫a
Rank: 2
等 级:论坛游民
帖 子:61
专家分:90
注 册:2019-2-27
得分:4 
1、判断三角形的条件最好别用两边之差大于第三边。原因是if 函数只判断第一个条件,如果你用两边之差来判断,假如我输入1,2,3.那么按照a,b,c的顺序,a-b>=c是不成立,那么他就不会继续判断后面的语句了。只有用两边之和小于第三边,a+b<=c是真,然后继续判断a+c<=b是真,然后继续判断b+c<=a是真,然后才输出“不能构成三角形”.(不知道我这种说法正确不,请指点)
2、你的程序根本就是不完整的,也不知道是不是你没有全部贴出来,比如返回值:return、主函数定义 int main(void)等等 都没得。。。
3、else if 和if 混乱的,格式也是混乱的。
程序代码:
#include<stdio.h>
int main(void)
{
    float a,b,c;
    printf("输入三角形边长:\n");
    scanf("%f,%f,%f",&a,&b,&c);
    if((a+b<=c)||(a+c<=b)||(b+c<=a))
        printf("不能够构成三角形\n");
    else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
        printf("直角三角形\n");
    else if((a==b)||(b==c)||(a==c))
        printf("等边三角形\n");
    else if((a==b)&&(b==c))
        printf("等腰三角形\n");
    else if((a==b)&&(b!=c)||(b==c)&&(c!=b)||(a==c)&&(c!=a))
        printf("等腰三角形\n");
    else
        printf("一般三角形\n");
       return 0;
}
2019-04-03 20:43
vvvcuu
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:12
帖 子:353
专家分:1253
注 册:2014-4-22
得分:4 
以下是引用三脚猫a在2019-4-3 20:43:10的发言:

1、判断三角形的条件最好别用两边之差大于第三边。原因是if 函数只判断第一个条件,如果你用两边之差来判断,假如我输入1,2,3.那么按照a,b,c的顺序,a-b>=c是不成立,那么他就不会继续判断后面的语句了。只有用两边之和小于第三边,a+b<=c是真,然后继续判断a+c<=b是真,然后继续判断b+c<=a是真,然后才输出“不能构成三角形”.(不知道我这种说法正确不,请指点)
2、你的程序根本就是不完整的,也不知道是不是你没有全部贴出来,比如返回值:return、主函数定义 int main(void)等等 都没得。。。
3、else if 和if 混乱的,格式也是混乱的。
#include<stdio.h>
int main(void)
{
    float a,b,c;
    printf("输入三角形边长:\n");
    scanf("%f,%f,%f",&a,&b,&c);
    if((a+b<=c)||(a+c<=b)||(b+c<=a))
        printf("不能够构成三角形\n");
    else if((a*a+b*b==c*c)||(a*a+c*c==b*b)||(b*b+c*c==a*a))
        printf("直角三角形\n");
    else if((a==b)||(b==c)||(a==c))
        printf("等边三角形\n");
    else if((a==b)&&(b==c))
        printf("等腰三角形\n");
    else if((a==b)&&(b!=c)||(b==c)&&(c!=b)||(a==c)&&(c!=a))
        printf("等腰三角形\n");
    else
        printf("一般三角形\n");
       return 0;
}



对于逻辑或运算“a||b”来说,是先判断符号前面的a是否为真,如果是则直接执行后面的结果,对于表达式b不再判断。如果a为假,才会继续判断b的逻辑值。
而对于逻辑与 “a&&b”来说,如果a为假,则后面的b也不会再判断。

代码测试环境:  WinXP+C-Free5.0.
2019-04-03 20:56
_17737531979
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2019-4-3
得分:0 
2019-04-03 20:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493905-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.325485 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved