首先,我们要明确,在程序中一看到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);}
}
春考有约,你与大学的约定
关注公众号,离大学更进一步