如何使循环进行 n 次以找到第 n 项的总和?在 C 程序中

How do I make the loop go n times to find sum of nth terms? In C program

问题是: 编写一个 C 程序,使用循环 {1+2+4+8....}

确定以下数列的前 N ​​项之和

我试过的代码是:

#include <stdio.h>
int main(void){ 

  int i,sum=0,n;
  scanf("%d",&n);

  for(i=1;i<n;i*=2)
    {
      sum=sum+i;
    }
  printf("Sum=%d\n",sum);  
    

  return 0;
}

问题是,当我输入 N 作为 5 时,它给出的输出是 7,但我期望的输出是 31。

如,5项之和=1+2+4+8+16=31

所以,我想知道如何让我的循环重复 5 次或第 n 次,以获得预期的结果。

你的问题是 i 不是每次迭代增加 1 而是乘以 2。你需要添加另一个变量来计算迭代次数。

#include <stdio.h>
int main(void){ 

  int i,value=1,sum=0,n;
  scanf("%d",&n);

  for(i=0;i<n;i++)
    {
      sum=sum+value;
      value *= 2;
    }
  printf("Sum=%d\n",sum);  
    

  return 0;
}

另外,因为1+2+4+...+2^(n - 1) == 2^n - 1(^代表幂),所以不用循环也可以通过位移计算.

#include <stdio.h>
int main(void){ 

  int sum,n;
  scanf("%d",&n);

  sum = (1 << n) - 1; // 1 << n equals to 2^n

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

  return 0;
}

不要更新你的变量,它的任务是跟踪术语的数量。

因为这道题是关于几何级数的,所以你可以用它的属性来计算总和,它的

级数公式之和:a(rn-1)/(r-1),其中a:第一项,r:公比

此外,为 scanf 添加错误检查。

这是它的代码片段:

#include <stdio.h>
int main(void) {

    int i, sum=0,n,value=1;
    if(scanf("%d", &n)!=1){
        fprintf(stderr,"Please input the valid number");
        return -1;
    }

    for (i=0;i<n;i++)
    {
        sum +=value;
        value *=2;
    }
    
    printf("Sum=%d\n", sum);

    return 0;
}