//Add to the first item that does not meet the conditions. Not the last item that meets the criteria.
//The first item that does not meet the conditions is adjacent to the last item that meets the conditions.
method one
#include<stdio.h>
#include<math.h>
void main()
{
int i;
double sum=0,eps;
scanf("%lf",&eps);
for(i=1;1*1.0/(3*i-2)>=eps;i++)//这个for循环判断的是当前项是否符合条件。所以那个不符合条件的一项也没加
{
sum+=pow((-1),(i+1))*1.0/(3*i-2);
}
sum+=pow((-1),(i+1))*1.0/(3*i-2);//加上了
printf("sum = %.6lf",sum);
}
Method Two
#include<stdio.h>
#include<math.h>
void main(){
double sum=0,i=1,esp;
scanf("%lf",&esp);
do{
sum+=pow(-1,(i+1))*1.0/(3*i-2);
i++;
}while(1.0/(3*(i-1)-2)>esp);//这样就是先加上再判断当前项是否符合。当不符合条件的第一项加上后,再判断跳出循环
printf("sum = %.6lf",sum);
}
Own error analysis
#include<stdio.h>
#include<math.h>
int main(){
int flag=1, i=1;//符号和分母定义
double sum=0,n=1.0,eps; //初始复制很关键
scanf("%lf",&eps);
if(eps>=1) //判断当eps大于等于1时临界情况
printf("sum = %.6f",n);
else
{
while(fabs(n)>eps)//判断的是上一项的不是下一项的,while里第一遍第二遍判断的都是第一项1!!
{
n=flag*1.0/i;
sum=sum+n;
i+=3;
flag=-flag;
}
printf("sum = %.6f",sum);
}
return 0;
}