对一组有规律的整数求和,如果和式中的第k项的通项公式明确为f(k),则在设置的求和k循环中,是用赋值语句s=s+f(k),把f(k)累加到s中,即可实现求和。
1.求和:s=1+2+......+n,其中正整数n从键盘输入。
解:这是求前n个正整数之和,和式中各项的通项明确为f(k)=k,k=1,2,.....n。因而只要在设置的k循环中用s=s+k即可实现求和。
#include<stdio.h>
void main()
{
long k,n,s=0;
printf("input n: ");
scanf("%ld",&n);
for(k=1;k<=n;k++)
s=s+k;
printf("s=1+2+......+%ld=%ld/n",n,s);
}
运行程序,输入n=2007,得
s=1+2+......+2007=2015028
2.求s=1+3+6+10+...(和式中的第k项为它的前一项加上k)的前100项之和.
解:和式中各项的构成规律明确,但各项的通项公式并不明确。因而在求和的k循环中要先行应用t=t+k求出第k项t,然后用s=s+t实现求和累加。
#include<stdio.h>
void main()
{
long k,n,t,s;
t=0;
s=0;
printf("input n: ");
scanf("%ld",&n);
for(k=1;k<=n;k++)
{ t=t+k; /*计算第k项t*/
s=s+t; } /*把第k项t累加到和s*/
printf("s=1+3+6+....+%ld=%ld/n",t,s);
}
运行程序,输入n=100,得
s=1+3+6+.......+5050=171700
3.试求所有能被7整除且3个数字之和能被7整除的3位数之和。
解:所求的3位数的通项并不明显,通常在穷举3位数的循环中,应用分支语句对所有3位数进行筛选,满足条件的实施累加求和。
#include<stdio.h>
void main()
{
int s=0,m,a,b,c;
for(a=1;a<=9;a++)
{
for( b=0;b<=9;b++)
{
for(c=0;c<=9;c++)
{
m=a*100+b*10+c;
if(m%7==0&&(a+b+c)%7==0)
s=s+m;
}
}
}
printf("s=%d",s);
}
运行程序,得
s=9891