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

问题描述

问题是: 编写一个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(^代表幂),因此您可以通过按位移位来计算它,而无需使用循环。 / p>

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

  int sum,&n);

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

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

  return 0;
}
,

不要更新您的变量,因为该变量具有跟踪项数的任务。

由于此问题与“几何级数”有关,因此您也可以使用其属性来计算总和

系列公式的总和:a(r n -1)/(r-1),其中a:第一项,r:共同比率

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

这是它的代码段:

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

    int i,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;
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...