正整数的倒数构成调和级数的项。我们先求调和级数的前n项之和,再求符号变化情形的代数和。
1.求和
s=1+1/2+1/3+.....+1/n(正整数n从键盘输入)
解:设置k循环k=1,2,...,n,k作为每一项的分母,在循环中实施s=s+1.0/k.
#include<stdio.h>
void main()
{
int k,n;float s=0;
printf("input n: ");
scanf("%d",&n);
for(k=1;k<=n;k++)
s=s+1.0/k;
printf("s=%9.6f",s);
}
运行程序,输入n=100,得
s=5.187378
2.求代数和
s=1-1/2+1/3-1/4+...+_1/n(正整数n从键盘输入,和式中各项符号一正一负)
解:设置k循环k=1,2,...,n,k作为每一项的分母,当k为奇数时,即满足k%2=1时,实施s=s+1.0/k;其他即当k为偶数时,实施s=s-1.0/k.
#include<stdio.h>
void main()
{ int k,n,h;
float s=0;
printf("input n: ");
scanf("%d",&n);
printf("s=1-1/2+1/3-1/4+.....");
for(k=1;k<=n;k++)
if(k%2==1)
{ s+=1.0/k;h=1;}
else
{ s-=1.0/k;h=0;}
if(h==1)print("+1/%d=",n);
else printf("-1/%d=",n);
printf("%9.6f/n",s);
}
运行程序,输入n=100,得
s=1-1/2+1/3-1/4+......-1/100=0.688172
3.求代数和
s=1-1/2+1/3+1/4-1/5+1/6+1/7+1/8-1/9+...+_1/n(正整数n从键盘输入,各项符号变化规律为:一正一负,二正一负,三正一负,类推续延)
解:设置外循环k=1,2,3,....,体现加运算号的个数(k约定到10000,必要时可增减);k次加运算后,实施一次减运算
。每次加或减运算前,分母t增1.最后一项的符号设置变量h来表征
#include<math.h>
#include<stdio.h>
void main()
{ int k,n,m,t,h;float s=0;
h=0;t=0;
printf("input n: "); scanf("%d",&n);
println("s=1-1/2+1/3+1/4-1/5+...");
for(k=1;k<=10000;k++)
{ for(m=1;m<=k;m++)
{ t++;s+=1.0/t;
if(h==1) break;
t++;s-=1.0/t;
if(t==n)break;}
if(h==1) printf("+1/%d= ",n);
else printf("-1/%d= ",n);
printf("%9.6f/n",s);
}
运行程序,输入n=100,得
s=1-1/2+1/3+1/4-1/5+...+1/100=3.029625
代数和表现为所求和式中各项的符号依据某种规律改变。因而,求代数和的关键在于对加减符号的规律进行有针对性的处理。