一个小程序运行结果一直不对

baiye1134 2010-04-07 08:25:23
#include<stdio.h>
#include<math.h>
void main()
{
double n,m,i,s;
printf("please input a number!\n",n);
scanf("%d",&n);
if(n<0)
printf("fault\n");
else
{
i=4;
s=4;
for(m=1;m<=n;m++)
{i=(-1)*4/(2*m-1);
s+=i;
}
}

}
题目呢是这样的:s=4-4/3+4/5-4/7+4/9-……
...全文
173 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2010-04-07
  • 打赏
  • 举报
回复
关于自己是否适合编程的很简单的测试:
在报纸或杂志上随便找一段约1000字的文章,在Word中输入一遍。输完后再参考下面答案:
A里面有10处以上文字或标点错误
B里面没有文字或标点错误并敢为此跟人打赌
C里面没有文字或标点错误并且字体和排版完全与原稿一致
D打印在半透明的纸上和原稿重叠在一起检查一模一样,且自我感觉很有成就感

A不适合编程
B初级程序员
C高级程序员
D软件项目经理

如果想从A变成B的话,到我的资源http://download.csdn.net/zhao4zhong1里面下载“适合程序员的键盘练习”
赵4老师 2010-04-07
  • 打赏
  • 举报
回复
单步调试和设断点调试是程序员必须掌握的技能之一。
huanmie_09 2010-04-07
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 baiye1134 的回复:]
..我天//////呃..15楼的..你的是对的..可是我看不懂,,哎//
我上楼的//可以问你一下,你是怎么查出来后面的是119项是3.14的呢?
总不致于一个个试吧??
哎...冒似最近真的没学好..没用心了..哎//
[/Quote]
上面我的代码有一个错误,int n = 0;
应该改为int n= 1;因为进入循环前已经算出了第一项.
这个多少项不是由你自己来输,而是由程序来计算的。
浮点数计算都存在一定的精度误差,
循环条件fabs(pi-F) > 1e-6
fabs(pi-F)表示当前计算出来的pi值与F(3.14)的差的绝对值,
1e-6表示10的-6次方,
当fabs(pi-F)<=fabs(pi-F)的时候推出循环,不进行下一项的计算.
每计算完一项都使计数器n加1.
最后跳出循环获取到的n就是你需要得到的项数.
poking1986 2010-04-07
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<math.h>
int main()
{
int n,m;
double s,i;
printf("please input a number!\n",n);
scanf("%d",&n);
printf("your input number is : %d\n",n);
if(n<0)
printf("fault\n");
else
{
i=4;
s=0;
for(m=1;m<=n;m++)
{
i=(double)4/(2*m-1);
if(m%2==0)
i*=-1;
s+=i;
printf(" %f\n",s);
}
}

return 0;
}


稍微改一下
baiye1134 2010-04-07
  • 打赏
  • 举报
回复
..我天//////呃..15楼的..你的是对的..可是我看不懂,,哎//
我上楼的//可以问你一下,你是怎么查出来后面的是119项是3.14的呢?
总不致于一个个试吧??
哎...冒似最近真的没学好..没用心了..哎//
boych 2010-04-07
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<math.h>

void main()
{
int n, m;
double i = 4.00, s = 0.00;
printf("please input a number:\n");
scanf("%d",&n);
if(n<=0)
printf("Fault!\n");
else
{
for(m = 1; m <= n; ++m)
{
i = pow(-1,m)*4.00/(2*m-1);
s -= i;
}
printf("%lf\n",s);
}
//119项得3.14,2459项得3.141,146063项得3.1415.
}
huanmie_09 2010-04-07
  • 打赏
  • 举报
回复
如果需要让pi达到3.141 3.1415 3,14159,
将#define F 3.14改为
#define F 3.141
huanmie_09 2010-04-07
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<math.h>

#define F 3.14

/*
如下,计算圆周轨率π的近似值
π=4-4/3+4/5-4/7+4/9-……
回答程序要计算多少项才能行到数值3.14 3.141 3.1415 3,14159
*/

void main()
{
/*
double n, m, i, s;
printf("Please input a number!\n",n);
scanf("%d", &n);
if(n<0)
printf("fault\n");
else
{
i=4;
s=4;
for(m=1;m<=n;m++)
{
i=(-1)*4/(2*m-1);
s+=i;
}
}
*/
int n = 0;
int i = 1, flag = 1;
double pi = 4.0 * flag / i;

while(fabs(pi-F) > 1e-6) {
n++;
i += 2;
flag = -flag;
pi += 4.0 * flag / i;
}
printf("n=%d时,pi=%f\n", n, pi);

}

baiye1134 2010-04-07
  • 打赏
  • 举报
回复
呃 。我试了一下好像没有一个全对耶,这样吧,我还是把原题打出来 ,免得你们被我误导了


如下,计算圆周轨率π的近似值
π=4-4/3+4/5-4/7+4/9-……
回答程序要计算多少项才能行到数值3.14 3.141 3.1415 3,14159


就是这个了。。所以大家帮帮忙看一下,是不是我误导你们什么 了。。。汗、、
bobo364 2010-04-07
  • 打赏
  • 举报
回复
#include<stdio.h>

int main()
{
double n,m,i,s;
printf("please input a number!\n",n);
scanf("%lf",&n);
if(n<0)
{
printf("fault\n");
}
else
{
i=4;
s=4;

for(m=1;m<=n;m++)
{
i=(-1)*4/(2*m-1);
s+=i;
}
}
system("pause");
return 0;
}
play89925 2010-04-07
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
cocat 2010-04-07
  • 打赏
  • 举报
回复

//printf("please input a number!\n",n);
printf("please input a number!\n");
elegant87 2010-04-07
  • 打赏
  • 举报
回复

//利用math库中的pow函数
double pow ( double base, double exponent );
elegant87 2010-04-07
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<math.h>

void main()
{
double n,m,i,s;
printf("please input a number!\n",n);
scanf("%lf",&n);
if(n<0)
printf("fault\n");
else
{
i=4;
s=4;
for(m=1;m<=n;m++)
{
i=pow(-1,m)*4/(2*m+1); //此处要实现1和-1之间的变换
s+=i;
}
printf("%lf\n",s);
}
}
vanpire110 2010-04-07
  • 打赏
  • 举报
回复
int n,m;
float i,s; //一般分开定义
printf("");里面不要n
i=(-1)*4/(2*m-1);//循环时,这句i一直为负数
fupa0 2010-04-07
  • 打赏
  • 举报
回复
要么
long n或者int n
yuzl32 2010-04-07
  • 打赏
  • 举报
回复

#include<stdio.h>
#include<math.h>
void main()
{
double n,m,i,s;
printf("please input a number!\n",n);
scanf("%lf",&n); //输入要更改一下格式
if(n<0)
printf("fault\n");
else
{
s=0;
for(m=1;m<=n;m++)
{
i = 4.0/(2*m-1);

if((int)m%2)
s+=i;
else
s-=i;
}
}

printf("s=%lf",s);
}
fupa0 2010-04-07
  • 打赏
  • 举报
回复
试试e, E, f, g, G
fupa0 2010-04-07
  • 打赏
  • 举报
回复
double n

scanf("%d",&n);
baiye1134 2010-04-07
  • 打赏
  • 举报
回复
前面一句没明白啊。。
后面一句不是总的一个,else一个,再还有一个for吗?
加载更多回复(3)

69,371

社区成员

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

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