| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2018 人关注过本帖
标题:(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果
取消只看楼主 加入收藏
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:16 
(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果
这是关于水仙花数的问题
程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int n,a,b,c;
    for(n=100;n<=999;n++)
    {
        a=n%10;
        b=n/100;
        c=(n-a-b*100)/10;
        if(n==pow(a,3)+pow(b,3)+pow(c,3))
            printf("%d\n",n);
    }
    return 0;
}

在codeblocks上运行结果如下,当然明显是错误的:
但是在VC上运行结果完全正确:
图片附件: 游客没有浏览图片的权限,请 登录注册

同一串代码为何编译结果如此不同,求指导,谢谢诸位了

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

搜索更多相关主题的帖子: 编译 代码 不同 结果 运行 
2015-10-16 20:34
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
查询到pow参数不是double型会导致数据出错。于是改成了这样
程序代码:
#include<stdio.h>
//#include<math.h>
int main()
{
    int n,a,b,c;
    for(n=100;n<=999;n++)
    {
        a=n%10;
        b=n/100;
        c=(n-a-b*100)/10;
        if(n==a*a*a+b*b*b+c*c*c)
            printf("%d\n",n);
    }
    return 0;
}

在codeblocks上运行时结果终于正确了

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

2015-10-16 20:39
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
现在问题可以说有两个:
1.为什么第一段代码在两个平台上编译时结果不一样?
2.即使pow参数不是double型会导致数据出错,可定义double类型数据时,不是还可以输入整数么……我已经完全混乱了,论坛的各位前辈帮帮我这个初出茅庐的小子吧。
2015-10-16 20:44
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用TonyDeng在2015-10-17 11:09:19的发言:

還是那句老話:學會調試比什麼都重要。

受教了,看来还是得先学学调试,不能太急功近利
2015-10-17 20:00
武伟
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:5
帖 子:506
专家分:2638
注 册:2015-7-23
收藏
得分:0 
以下是引用zklhp在2015-10-17 09:41:01的发言:

Code::Blocks默认的编译器是GCC 但我用GCC试了下是得到的结果是下面的

153
370
371
407

好像是正确的

这个问题 不明确编译器的版本 讨论起来没意义

抱歉,我也不知道编译器的版本是啥
2015-10-17 20:01
武伟
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
快速回复:(2)C语言问题之同一串代码在VC和codeblocks编译运行产生了不同的结果 ...
数据加载中...
 
   



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

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