输入eps,计算:1-1/4+1/7-1/10+1/13-1/16+。。。直到最后一项小于eps。求教我的以下程序有何问题?
发布网友
发布时间:2022-04-23 12:26
我来回答
共5个回答
热心网友
时间:2023-10-13 08:15
程序修改如下:
#include<stdio.h>
#include <math.h>
int main()
{
int denominator, flag;
int repeat, ri;
double eps, item, sum;
scanf("%d", &repeat);
for(ri = 1; ri <= repeat; ri++){
scanf("%lf", &eps); //<-----改了,输入double 用%lf
item=1;
sum=0;
flag=1;
while(1.0/item>=eps) {
sum=sum+flag*1.0/item;
item=item+3;
flag=(-1)*flag;
}
sum = sum + flag*1.0/item; //最后一项需要加进来,即第一个满足1/item < eps的项需要进行计算。
printf("sum = %.6lf\n", sum); //改了,输出double有%lf
}
}
热心网友
时间:2023-10-13 08:15
#include <stdio.h>
#include <math.h>
int main(void)
{
int denominator, flag=1;
int repeat, ri;
double eps, item=1, sum=0,term;
printf("please input eps, for example 0.0001\n");
scanf("%lf", &eps);
item=1.0;
sum = 1.0;
while(1)
{
flag = -flag;
item = (item+3.0);
term = 1.0 / item * flag;
// printf("term=%lf\n",term);
if (fabs(term) < eps) break;
sum = sum + term;
}
printf("sum=%lf\n",sum);
}
热心网友
时间:2023-10-13 08:16
把第七行的double换成float型,因为你在下面的输出是float型,况且double会失精度的,在printf行的下面补充一句gets();或getchar();或getch();因为有的系统只认一个,是为了吸收缓冲区的数据的消除影响
热心网友
时间:2023-10-13 08:16
猜测你的题意应该是这样的,不懂再问。。。
#include <stdio.h>
#include <math.h>
int main()
{
int denominator,item=1, flag=1;
int ri;
double eps, sum=0;
scanf("%lf", &eps);
for(ri=1;1; ri+=3)
{
if((eps-1.0/ri)>1e-10)
break;
sum+=1/(double)ri*flag;
flag=-flag;
}
printf("sum = %.6f\n", sum);
return 0;
}
热心网友
时间:2023-10-13 08:17
while(1.0/item)>=eps),括号少一个或多一个
算法和其他的没什么问题