| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2018 人关注过本帖
标题:(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果
只看楼主 加入收藏
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:1 
pow(a,3)+pow(b,3)+pow(c,3)

这整个表达式的结果应该不是个整数 可能是误差累积了

你可以在CB下 检测一下这个结果  看看 是不是那样的

女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2015-10-18 14:27
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
不是不问,其实是不敢问,在论坛呆久了,也知道T版你大概的脾气,怕问一句“怎么调试?”,让你再来一句“呵呵”
调试的话老师上课用VC讲了一次,大概知道调试的作用,但没意识到原来调试这么重要
下面是我“调试”的代码,只会用printf()查看,我也只试了那几个水仙花数,不知道达到T版的要求了没
2015-10-18 16:08
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int n,a,b,c,x,y,z;
    while(EOF!=scanf("%d",&n))
          {
              a=n%10;
              b=n/100;
              c=(n-a-b*100)/10;
              printf("a=%d b=%d c=%d\n",a,b,c);
              x=pow(a,3);
              y=pow(b,3);
              z=pow(c,3);
              printf("x=%d y=%d z=%d\n",x,y,z);
              printf("sum=%d\n",x+y+z);
          }
          return 0;
}


[此贴子已经被作者于2020-3-23 13:39编辑过]

2015-10-18 16:11
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
一.5的立方=124
二.下面的三个好像都对的呀,为啥只显示407这一个数?难道是跟精度有关系?
2015-10-18 16:16
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
把调试的代码又换了一下,只针对153的十位进行讨论
2015-10-18 16:37
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int n,a,b,c;
    for(n=153;n<=153;n++)
    {
        a=n%10;
        //printf("a:%d\n",a);
        b=n/100;
        //printf("b:%d\n",b);
        c=(n-a-b*100)/10;
        printf("c:%d\n",c);
        if(n==153)//==(int)pow((double)a,3.0)+(int)pow((double)b,3.0)+(int)pow((double)c,3.0))
        {
            printf("%d\n",n);
            printf("%.0lf\n",pow((double)c,3.0));//+(int)pow((double)b,3.0)+(int)pow((double)c,3.0));
            printf("%d\n",(int)pow((double)c,3.0));
        }

    }
    return 0;
}


[此贴子已经被作者于2020-3-23 13:40编辑过]

2015-10-18 16:40
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:18 
首先,这么简单的问题,没必要去怀疑编译器。现在你已发现这跟精度有关,那么第二个问题来了,既然做整数运算,干嘛用浮点版本的函数?最后一个,用==比较的时候,需要注意什么?

授人以渔,不授人以鱼。
2015-10-18 17:09
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
实际上,不管你对浮点函数得到什么测试结果,最终解决的思路都不在浮点数上动脑筋,这是逻辑决定的。逻辑优先,不要靠技巧!出错的根本原因是违反逻辑写代码。

授人以渔,不授人以鱼。
2015-10-18 17:15
lzl123321
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:41
专家分:148
注 册:2015-10-15
收藏
得分:0 
回复 18楼 TonyDeng
感谢老大分享,调试的功夫很重要!!!
2015-10-18 17:50
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用TonyDeng在2015-10-18 17:09:03的发言:

首先,这么简单的问题,没必要去怀疑编译器。现在你已发现这跟精度有关,那么第二个问题来了,既然做整数运算,干嘛用浮点版本的函数?最后一个,用==比较的时候,需要注意什么?

抱歉,回复得有些晚。
首先,第二个问题,应该是因为pow(x,y)其作用是计算x的y次方,x、y及函数值应该都是double型才对,因此要用浮点版本的函数。
最后一个,应该是要注意两边数据类型相同,不知道回答对了没?

我也还想再问一个问题:“出错的根本原因是违反逻辑写代码。”,这里的“违反逻辑”能稍微说得详细一些吗,有点不理解

[此贴子已经被作者于2015-10-18 20:58编辑过]

2015-10-18 20:56
快速回复:(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果 ...
数据加载中...
 
   



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

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