java阶乘求和正负交替_C语言:累计问题

在C语言中,对于累计的考察是十分频繁的,在选择、程序题中,总能见到累计问题的身影,比如最为简单的累计求和:1+2+3+4+....+100,再者斐波那契数列1+2+3+5+8+13+21+.......下面针对累计问题,系统的、从简到繁的带着大家梳理一边

首先,我们要明确,在程序中一看到sum=sum+i;s+=a;s+=a[i]等形式的式子,我们就要迅速联想到这题目是与累计问题相关的。

例如:for(i=1;i<=10;i++)m=m+i;

for(i=0;i<=9;i++){scanf(“%d”,a[i],sum=sum+a[i];}

不难发现,设计累计问题的,都会有一个类似sum=sum+一个变量的式子,这就是我们解题的关键,甚至遇到此类题,我们可以先写上sum=sum+一个变量,然后去找具体的这个变量是什么就可以了。

题型1:累计求和1+2+3+4+5+6+.....+100

解析:首先写上sum=sum+i;(i是我们用来累加的一个变量)i是从1到100增加的,所以我们可能用for(i=1;i<=n;i++)来控制

程序为int i,sum=0;

for(i=1;i<=100;i++)

{ sum=sum+i; }

题型二:正负交替问题1-2+3-4+5-6+.......+99-100

解析:其实正负交替问题,可以看作是累计求和的一种,我们还是先写上sum=sum+i;在本题中,i不仅仅是从1到100增加的,还是正负交替变化的变化,那么我们就先实现从1到100增加,和上题一样,我们可能用for(i=1;i<=n;i++),程序写到这里,就和上题是一样的:

int i,sum=0;

for(i=1;i<=n;i++)

{ sum=sum+i; }

那正负交替如何实现呢,我们需要引用另外一个变量t=1,让t在循环体内实现正负的变化,即t=-t,所以最终程序为

int i,sum=0,t=1;

for(i=1;i<=100;i++)

{ sum=sum+i*t;

t=-t;

}

题型三:斐波那契额数列求和1+2+3+5+8+13+21+34+.....求前20项之和

解析:

解法1:

通过观察,可知,从第三项开始,每一项等于它的前两项之和,3=1+2,5=3+2,8=3+5。

那么是累计问题,我们仍可先写上sum=sum+c,下面我们就来找这个c是什么

从图片中,我们可以看出C的值就是我们要累计求和的数,c=a+b,所以可以写成

int a=1,b=2,sum=3;

for(i=3;i<=20;i++)

{c=a+b;

sum=sum+c;

a=b;

b=c;}

解法2:数组

int arr[20] = { 1, 2 },sum=0;

int i = 0;

for (i = 2; i < 20; i++)

arr[i] = arr[i - 1] + arr[i - 2];

for (i = 0; i < 20; i++)

sum=sum+arr[i];

printf("%d",sum);

题型四:阶乘求1!+2!+3!+4!+......+10!

解析:首先,我们还是写上sum=sum+一个数t,我们再来找这个数t,

int i,t=1,sum=0;/*定义变量的数据类型为整型*/

for(i=1;i<=10;i++)/*计算每个阶乘的值并累加*/

{  t=t*i;/*计算每个阶乘的值*/

sum=sum+t;}/*把每个阶乘的值累加*/

printf("%d\n",sum);/*输出结果*/

题型五:分子数列 2/1+3/2+5/3+8/5+......求前十项的和

解析:我们还是先写上 sum=sum+t,然后来找这个t是什么

根据题型3,我们可以看出,b/a正是我们要找的t.

所以

int a=1,b=2,c,i;

float t,sum=0;

for(i=1;i<=10;i++)

{t=1.0*b/a;

sum=sum+t;

c=a+b;

a=b;

b=c;}

printf("%f",sum);

#inclu

题型六:输入5个学生的7门课程的成绩,每输入一个学生的7门课程成绩后,立即统计并输出该学生的

int main()

{ int i,j;

float a[5][7],s;

for(i=0;i<5;i++)

{s=0;

for(j=0;j<7;j++)

{scanf("%f",&a[i][j]);

s=s+a[i][j];}

printf("第%d个学生的总分=%.2f 平均分=%.2f\n",i+1,s,s/7);}

}

春考有约,你与大学的约定

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值