C中的循环问题

时间:2011-04-30 13:40:47

标签: c for-loop nested-loops

我正在尝试使用以下程序计算“2 ^ 0 + 2 ^ 1 + 2 ^ 2 + ... + 2 ^ 14”(我是一个新手,只能通过乘以自己来计算指数一定时间)。结果应该是32767,但我跑了它并获得了270566475,我想了很久但无法弄清楚为什么......

#include <stdio.h>

int main(void)
{
   int i, e, exponent, sum;

   e = 1;
   exponent = 1;
   sum = 1;

   for (i = 1; i <=14; i++)
   {
       for (e = 1; e <= i; e++)
       {
          exponent *= 2;
       }

       sum += exponent;
   }

   printf("%d\n", sum);

   return 0;
}

这有什么问题?感谢!!!

3 个答案:

答案 0 :(得分:7)

您不需要内循环。只需在外循环内直接执行exponent *= 2一次。顺便说一下,我认为你必须在<{em> sum += ...之后

此外,您可以从sum = 0i = 0开始,这更接近您所描述的数学。

答案 1 :(得分:2)

单独看看你的内环。它正在尝试计算i2^i的一个特定值。

exponent每次都不会从1开始。所以你进入那个循环,exponent已经有了一些非常大的价值。

for (i = 1; i <=14; i++)
{
    exponent = 1;
    for (e = 1; e <= i; e++)
    {
        exponent *= 2;
    }

    sum += exponent;
}

现在你已经为每个2的新功率重置exponent(很明显,除了计算结果之外,它不是指数)。

答案 2 :(得分:2)

如果你有权创建一个函数,最好用递归函数来做这个:

#include <stdio.h>

int power(int x, int exp) {
    if (exp == 0)
        return 1;
    else
        return x * power(x, exp-1);
}

int main (int argc, const char * argv[])
{
    int i;
    int sum = 0;
    for (i = 0; i <= 14; i++) {
        sum += power(2, i);
    }

    printf("%d",sum);
    return 0;
}

我希望它有所帮助。

你只需要一个循环,因为每个循环都有n-1值的结果。我纠正了你的代码。

#include <stdio.h>

int main (int argc, const char * argv[])
{
    int i, e, exponent, sum;

    e = 1;
    exponent = 1;
    sum = 1;

    for (i = 1; i <= 14; i++)
    {
        exponent *= 2;
        sum += exponent;
    }

    printf("%d\n", sum);

    return 0;
}

两个代码都有效