| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 569 人关注过本帖
标题:求大神解答,我这个程序为何输入0.3,0.4,0.5会显示构成任意三角形,我刚刚 ...
只看楼主 加入收藏
zou913497849
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-10
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:6 
求大神解答,我这个程序为何输入0.3,0.4,0.5会显示构成任意三角形,我刚刚入门,想了好久
#include <stdio.h>
#include <stdlib.h>

main()
{
    float  a,b,c;
    printf("输入三条线段a,b,c的长度:");
    scanf("%f%f%f",&a,&b,&c);
    if ((a<b+c)&&(b<a+c)&&(c<a+b))
    {
    if (a==b||a==c||b==c)
    {
        if ((a*a==b*b+c*c)||(b*b==a*a+c*c)||(c*c==a*a+b*b))
            printf ("可构成三角形,该三角形为:等腰直角三角形");
        else if (a==b&&a==c)
            printf("可构成三角形,该三角形为:等边三角形");
        else
            printf("可构成三角形,该三角形为:等腰三角形");
    }
    else if ((a*a==b*b+c*c)||(b*b==a*a+c*c)||(c*c==a*a+b*b))
        printf("可构成三角形,该三角形为:直角三角形");
    else
        printf("可构成三角形,该三角形为任意三角形");
    }
    else printf("不能构成三角形");
}
搜索更多相关主题的帖子: include 三角形 
2015-04-10 19:35
wyw19880809
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:3
帖 子:178
专家分:738
注 册:2013-3-14
收藏
得分:7 
a*a == (b*b+c*c)  条件要这样写
2015-04-10 19:46
zou913497849
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 2楼 wyw19880809
没作用啊
2015-04-10 19:51
逍风
Rank: 2
来 自:中国 江西
等 级:论坛游民
帖 子:88
专家分:84
注 册:2015-3-7
收藏
得分:7 
兄弟 帮你修改了下代码,有的地方我帮你加了一些 至于你说的 输入 0.3 0.4 0.5 会显示可构成任意三角形 这正常
代码如下:
程序代码:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()//前面最好加上类型
{
    float a,b,c;
    printf("输入三条线段a,b,c的长度:");
    scanf("%f%f%f",&a,&b,&c);
    while(a==0||b==0||c==0){//判读是否为0
        printf("线段长度不可为 0 请重新输入!\n");
        scanf("%f%f%f",&a,&b,&c);
    }
    printf("三条线的长度分别为:%.1f %.1f %.1f \n",a,b,c);
    if ((a<b+c)&&(b<a+c)&&(c<a+b))
    {
      if (a==b||a==c||b==c)
      { 
        if ((a*a==b*b+c*c)||(b*b==a*a+c*c)||(c*c==a*a+b*b))
            printf("可构成三角形,该三角形为:等腰直角三角形\n");
        else if (a==b&&a==c)
            printf("可构成三角形,该三角形为:等边三角形\n");
        else
            printf("可构成三角形,该三角形为:等腰三角形\n");
     }
    else if ((a*a==b*b+c*c)||(b*b==a*a+c*c)||(c*c==a*a+b*b))
        printf("可构成三角形,该三角形为:直角三角形\n");
    else
        printf("可构成三角形,该三角形为任意三角形\n");
    }
    else printf("不能构成三角形\n");
    printf("\nplease input any key exit :\n");
    getch();
}

<%谦虚学习,用心做人,没有最好,只有更好!%>
2015-04-10 19:54
zou913497849
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-4-10
收藏
得分:0 
回复 4楼 逍风
没用啊,我要问的就是这个问题,所有能够成直角三角形的小数均不能正常输出
2015-04-10 20:29
LGing
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:32
专家分:107
注 册:2015-3-15
收藏
得分:7 
浮点类型应该不能比较大小吧?
2015-04-10 20:39
韩立
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2015-4-10
收藏
得分:0 
浮点变量不能用用==或=与任何数字比较,float、double类型变量都精度限制。
例如if(x == 0.0) 就是一种隐含错误的比较,应转化成if((x>=-EPSINON) && (x<=EPSINON)),其中EPSINON为允许误差(即精度)

测试代码:
程序代码:
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>

int _tmain(int argc, _TCHAR* argv[])
{
    float  a,b,c;
    printf("输入三条线段a,b,c的长度:");
    scanf("%f%f%f",&a,&b,&c);
    float x=c*c;
    float y=b*b;
    float z=c*c;
    if(z==y+z)
        printf("dddd");
        return 0;
}

输入0.3 0.4 0.5后,监视监视x,y,z,结果如下:
    x    0.25000000    float
    y    0.16000001    float
    z    0.25000000    float
其中b的平方y发生了变化,因此楼主代码中的条件没能成立。

[ 本帖最后由 韩立 于 2015-4-10 23:03 编辑 ]
2015-04-10 23:00
快速回复:求大神解答,我这个程序为何输入0.3,0.4,0.5会显示构成任意三角形, ...
数据加载中...
 
   



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

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