累加法:
例。求π的近似值,精确到最后一项的绝对值小于10e-6;
计算公式:pi/4=1-(1/3)+(1/5)-(1/7)+.......;
分析:累加和 sum;
◆循环初始化:t=1,s=1,n=1
◆循环条件:(t>=1e-6)
◆循环体:
⊙累加求和:sm=sm+t
⊙下一项た:符号正负反转,
分母n加2
#include<stdio.h>
#include <math.h>
int main()
{
int s=1;
float n=1,t=1,sum=0.0,pi;
while(fabs(t)>=1e-6)
{
sum=sum+t;
n=n+2;
t=s/n;
}
pi=sum*4;
printf("pi=%f",pi);
return 0;
}
累加求和的解决方法:
◆找规律;
⊙累加和初始化为0或第一项;
⊙关键是寻找累加项的构成规律(通项);
常用算法累加项的前后项之间无关:
例,求: 1*2*3+3*4*5+.....+99*100*101
◆找出累加项;
term=i*(i+1)*(i+2);
i=1,3,,9;
所以:
for(i=1;i<=99;i+=2)
{
term=i*(i+1)*(i+2);
sum+= term;
}
再如:
累加项的前后项之间有关:
例如
◆找出累加项:
term term *x;
term初值为1;
sum= 0
term=1
for(i=1; i<=n; i++)
{
term=term*x;
sum += term;
}
如:
再如:
#include<stdio.h>
#include<math.h>
int main()
{
int n= 1;
float x,term,result=0.0;
printf("Input x: \n");
scanf("%f",&x);
x*=(3.1415926/180);
term =x;
while(fabs(term)>= 1e-6)
{
result=result+term;
term=-term*x*x/((n+1)*(n+2));
n=n+2;
}
printf("sin(%f)=%f\n",x,result);
return 0;
}