-这- 发表于 2021-12-27 09:31:33

数据类型动动手第0题疑惑

小甲鱼的代码
#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:33:41

本帖最后由 -这- 于 2021-12-27 09:36 编辑

{:10_254:}主要有疑问是因为我用python 写了一模一样结构得代码,发现输出值是没有问题得,我打印prinf("%d-%d0-%d",i,j,num),得出的结果是 5-6-15624,这一步就出现问题了

傻眼貓咪 发表于 2021-12-27 09:39:58

我试了你的代码,完全没有问题啊。
答案是 16739,而且在 for 循环里面 pow 正常运行。
我也不知道为什么

-这- 发表于 2021-12-27 09:44:43

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

{:10_266:}难道是人品问题吗,我试了好几次都是这样,我还以为试特性呢

傻眼貓咪 发表于 2021-12-27 09:46:16

不知道是不是因为 pow() 是 double 类型,而你的 num 是整型,因编译器不同,影响了结果?

-这- 发表于 2021-12-27 09:53:49

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

好像是的,我换了一个软件,重新编译后又是正确答案了
我是 codeblocks 17.12 的,请问下如何设置编译器,每个软件的编译器都是不同的,难道后面我得使用两个编译器才能知道正确答案吗

傻眼貓咪 发表于 2021-12-27 09:57:29

codeblocks 我没用过,我不会设置,会不会是需要更新?
但是一般程序语言对于浮点类型精度都是弱项....

-这- 发表于 2021-12-27 10:03:21

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

但是还是有个疑惑 , 我在循环外重新定义num变量的值 num = pow(5,6),上面的类型我都没改变,打印num的结果后是正确的,并没有-1 , 同时在for循环中 前面几个pow的结果都是正确的,唯独最后一个参数pow导致结果-1 ,按照编译器的不同,那么请问for循环最后一次的结果在编译器中是特例的吗

傻眼貓咪 发表于 2021-12-27 10:07:30

确实很奇怪,我也不知道。
如果只是循环一次呢?在循环里面用 pow(5, 6) 试试

tomok 发表于 2021-12-27 10:11:49

学习代码了
页: [1]
查看完整版本: 数据类型动动手第0题疑惑