如何解决如何使循环进行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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。