鱼C论坛

 找回密码
 立即注册
查看: 806|回复: 9

[已解决]数据类型动动手第0题疑惑

[复制链接]
发表于 2021-12-27 09:31:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
小甲鱼的代码
#include <stdio.h>
#include <math.h>

int main()
{
        int result;

        result = pow(1, 2) + pow(2, 3) + pow(3, 4) + pow(4, 5) + pow(5, 6);

        printf("结果是:%d\n", result);

        return 0;
}
我想使用for循环做,我的代码
int main()
{
     int num,i;
     int j=2;
     int number = 0;
    for (i=1;i<6;i++)
    {
        num = pow(i,j);
        j += 1;
        number = number + num;
    }
    printf("%d\n", number);
    return 0;
}

小甲鱼代码的结果是16739,而我的代码结果是16738 ,比预期结果少了1,我打印for循环中的 i,j 和num 结果,发现在i,j是 5,6 ,也就是pow(5,6) 的结果是15624 , 比原单独求得结果15625 少了一
请问为什么最后会出现这个问题,我在循环外求 pow(5,6) 得结果又是正确得15625 . 因为还是刚学没学到for 循环.不知道c语言中for 循环是不是有什么特性导致最后一次求值-1
最佳答案
2021-12-27 09:46:16
不知道是不是因为 pow() 是 double 类型,而你的 num 是整型,因编译器不同,影响了结果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-27 09:33:41 | 显示全部楼层
本帖最后由 -这- 于 2021-12-27 09:36 编辑

主要有疑问是因为我用python 写了一模一样结构得代码,发现输出值是没有问题得,我打印prinf("%d-%d0-%d",i,j,num),得出的结果是 5-6-15624,这一步就出现问题了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 09:39:58 From FishC Mobile | 显示全部楼层
我试了你的代码,完全没有问题啊。
答案是 16739,而且在 for 循环里面 pow 正常运行。
我也不知道为什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-27 09:44:43 | 显示全部楼层
傻眼貓咪 发表于 2021-12-27 09:39
我试了你的代码,完全没有问题啊。
答案是 16739,而且在 for 循环里面 pow 正常运行。
我也不知道为什么

难道是人品问题吗,我试了好几次都是这样,我还以为试特性呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 09:46:16 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
不知道是不是因为 pow() 是 double 类型,而你的 num 是整型,因编译器不同,影响了结果?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-27 09:53:49 | 显示全部楼层
傻眼貓咪 发表于 2021-12-27 09:46
不知道是不是因为 pow() 是 double 类型,而你的 num 是整型,因编译器不同,影响了结果?

好像是的,我换了一个软件,重新编译后又是正确答案了
我是 codeblocks 17.12 的,请问下如何设置编译器,每个软件的编译器都是不同的,难道后面我得使用两个编译器才能知道正确答案吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 09:57:29 From FishC Mobile | 显示全部楼层
codeblocks 我没用过,我不会设置,会不会是需要更新?
但是一般程序语言对于浮点类型精度都是弱项....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-27 10:03:21 | 显示全部楼层
傻眼貓咪 发表于 2021-12-27 09:57
codeblocks 我没用过,我不会设置,会不会是需要更新?
但是一般程序语言对于浮点类型精度都是弱项....

但是还是有个疑惑 , 我在循环外重新定义num变量的值 num = pow(5,6),上面的类型我都没改变,打印num的结果后是正确的,并没有-1 , 同时在for循环中 前面几个pow的结果都是正确的,唯独最后一个参数pow导致结果-1 ,按照编译器的不同,那么请问for循环最后一次的结果在编译器中是特例的吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 10:07:30 From FishC Mobile | 显示全部楼层
确实很奇怪,我也不知道。
如果只是循环一次呢?在循环里面用 pow(5, 6) 试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-27 10:11:49 | 显示全部楼层
学习代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 01:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表