| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1687 人关注过本帖
标题:求助!一道题 为什么结果老是不对
只看楼主 加入收藏
znliuxubao
Rank: 1
等 级:新手上路
帖 子:4
专家分:6
注 册:2011-10-26
收藏
得分:1 
#include <stdio.h>
#include <stdlib.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==b&&a==c)
            printf("是等边三角形\n");
        else if((a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b)&&(a==b&&a!=c||a==c&&a!=b||b==c&&b!=a))
            printf("是等腰直角三角形\n");
        else if((a*a+b*b==c*c||b*b+c*c==a*a||a*a+c*c==b*b))
            printf("是直角三角形\n");
    }
    printf("三角形的面积是%f\n",(a+b+c)/2);
    return 0;
}
海伦公式 p = ( a + b + c )/2;
    s= sqrt ( p * ( p- a ) * ( p - b ) * ( p- c ));
可以用来求三角形面积。
s=(a+b+c)/2 只适用于直角三角形

2011-10-26 00:54
hjywyj
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:3
帖 子:1114
专家分:2611
注 册:2010-4-14
收藏
得分:1 
if(a==b==c)
没见过这样写的
应该是if(a==b&&b==c)
等腰直角三角形的判断不对。楼主没考虑优先级问题
2011-10-26 07:45
者好爱程编
Rank: 2
等 级:论坛游民
帖 子:68
专家分:46
注 册:2011-8-22
收藏
得分:1 
路过  看看
2011-10-26 10:07
者好爱程编
Rank: 2
等 级:论坛游民
帖 子:68
专家分:46
注 册:2011-8-22
收藏
得分:0 
我来看看那  选择结构还木学
2011-10-26 10:09
luogj18
Rank: 1
等 级:等待验证会员
帖 子:4
专家分:2
注 册:2011-9-4
收藏
得分:1 
回复 4楼 TonyDeng
您好!
a==b!=c是一个关系表达式,其结果为逻辑值,
由默认输入(3,4,5),上式等价于3==4!5,即0!=5,结果为1(真)
是这样分析的吗?

另外还想请教为什么不要写a==b==c这样的关系表达式为好?
呵呵
一个c初级学习者

我深深地爱着你,这片多情的土地……
2011-10-26 13:11
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
在常见的程序设计语言中,都不支持a==b==c这样连写的逻辑判断,那是数学上的写法。这样的写法,在编译器或解释器看来,只是求出a==b的逻辑值后再与c比较==,由于你恰好用C,逻辑值true、false与整数1、0兼容,所以编译器无法指出作为int的c不能与bool的(a==b)进行比较这类错误(在其他语言中马上就给你指出来了,不会留下这种隐患,这其实是C作为一种灵活性很大的语言给初学者制造的巨大陷阱,也是我并不赞成没有任何程序经验的人起手就学C的原因),编译器不报错(实际是它误解你的意图,也可以说是你写代码语义不清楚),并不表示程序写对了。

a==b!=c,看你的实际数据,a=3,b=4,c=5,3==4的结果为0,0!=5的结果为1,于是a==b!=c的结果为真,程序流程进入此处,就有你看到的结果。程序是严格按你写的代码执行的,它不会错,错的只能是你,没写对代码。

正确的语法是:if ((a == b) && (b == c))

编程有两大类错误:一类是编译错误,语法错误是最常见的编译错误,编译器是能够指出来;另一类是逻辑错误及运行错误,这是编译器无法指出的。你这种就属于逻辑错误,结果往往是运行不合期望。其实,作为程序员写代码,如果出现编译错误,应该很庆幸,因为别人及时指出了错误,可以马上着手修改;如果编译没错误,运行发现结果总是不对,也应该比较欣慰,毕竟运行就知道出问题了,还知道去查错;最可怕的是运行时没错误,但偶然出错,出现这种情况,马上装柱香求神拜佛吧,保佑你顺顺利利查到问题。现实情况中,往往是一些“高手”把会出现最后那种问题的程序作为成品交付客户使用,那是最害客户、害公司、害自己的事情。一个程序员是否真的高手,是看他有没有这方面的注意力,这种人写程序,必定是力图避免出现最后那种情况的,他深知那样尽管是无法完全回避的,但设计的代码,必定是比较容易查错及修改的。

[ 本帖最后由 TonyDeng 于 2011-10-26 14:19 编辑 ]

授人以渔,不授人以鱼。
2011-10-26 14:13
玉立
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2011-10-17
收藏
得分:0 
回复 20楼 吴军旗
但问题是你写的这个程序出现错误了不能运行
2011-10-26 14:25
玉立
Rank: 2
等 级:论坛游民
帖 子:32
专家分:24
注 册:2011-10-17
收藏
得分:0 
回复 21楼 znliuxubao
你们写得程序根本就在报错  都不能运行  其他的说得没意义
2011-10-26 15:06
青之眷
Rank: 1
等 级:新手上路
帖 子:11
专家分:4
注 册:2011-10-26
收藏
得分:1 
回复 9楼 uselessID
那编译系统为什么不报错呢
2011-10-27 19:51
吴军旗
Rank: 5Rank: 5
等 级:职业侠客
帖 子:286
专家分:308
注 册:2011-9-14
收藏
得分:0 
回复 27楼 玉立
我能运行啊

最惨的不是忘不了悲伤的回忆,而是那些悲伤的回忆却开始记不清。。。
2011-10-27 22:48
快速回复:求助!一道题 为什么结果老是不对
数据加载中...
 
   



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

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