求给定精度的简单交错序列部分和

weixin_35429409 2016-11-08 06:41:16
本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + ... 直到最后一项的绝对值不大于给定精度eps。

输入格式:

输入在一行中给出一个正实数eps。

输出格式:

在一行中按照“sum = S”的格式输出部分和的值S,精确到小数点后六位。题目保证计算结果不超过双精度范围。
输入样例1:

4E-2
输出样例1:

sum = 0.854457
输入样例2:

0.02
输出样例2:

sum = 0.826310


我的代码#include <stdio.h>
#include <math.h>
int main(void){
int i=1;
double eps;
double j=1.0,k,s=0.0;
scanf("%lf",&eps);
do{
k=i/j;
if (fabs(k)<eps)
break;
i=-i;
j+=3;
s+=k;
}while(fabs(k)>=eps);
printf("sum = %.6lf\n",s);
return 0;
}
测试点错了
...全文
4278 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmbrmb 2019-01-03
  • 打赏
  • 举报
回复
#include<stdio.h>
int main()
{
double a,b,d,sum=0;
int i,c=1;
scanf("%lf",&a);
for(i=1;c!=0;i=i+3)
{
b=1.000/i;
if(i%2!=0)
sum=sum+b;
else
sum=sum-b;
if(b<=a)
c=0;
}
printf("sum = %lf",sum);
return 0;
}
爱小嘤嘤 2018-12-27
  • 打赏
  • 举报
回复
看一下while的循环条件,应该是while(fabs(k)>eps)
有杕之杜 2017-11-02
  • 打赏
  • 举报
回复
首先“ }while(fabs(k)>=eps);”改成“ }while(fabs(k)>eps);”,满足题目中不大于的条件; 其次将 if (fabs(k)<eps) break; 改成 if (fabs(k)<eps) { s=1.0; break; } 这样是保证当输入esp的值大于1时,输出的值为1.
paschen 2016-11-09
  • 打赏
  • 举报
回复
题目中说不大于, 这里改成 }while(fabs(k)>eps); 看下是否可以
赵4老师 2016-11-09
  • 打赏
  • 举报
回复
printf("sum = %.15lg\n",s); ?

70,024

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧