编写程序,用如下公式计算圆周率的近似值PI=4-4/3+4/5-4/7+4/9-4/11+..... 要计算多少项才能得到数值3.14

我的程序错在哪里?#include<stdio.h>#include<math.h>intmain(void){inti,j=1,d=1;doublePI=0,t;whi... 我的程序错在哪里?
#include<stdio.h>
#include<math.h>
int main(void)
{
int i,j=1,d=1;
double PI=0,t;
while(fabs(t)>1e-6)
{
t=d*4.0/j;
PI+=t;
if((int)(PI*100-314==0)&&fabs(PI-3.14)<0.005)
{
printf("要计算%d项才能得到数值3.14/n",i);
}
else
i+=1;j+=2;d=-d;}
}
提个正确思路也可以啊~~~
展开
 我来答
sir_chen
推荐于2017-09-16 · TA获得超过5589个赞
知道大有可为答主
回答量:1012
采纳率:0%
帮助的人:716万
展开全部
问题很多
1. "if((int)(PI*100-314==0)&&fabs(PI-3.14)<0.005)"有严重问题, 可以改为if((int)(PI*100)==314), 或者if(0<PI-3.14 && PI-3.14<0.01)
2. if语句printf函数结束后应该加break
3. i, t没有初始化
4. 既然main函数定义为了int类型, 就应该返回一个整数, 最后加上retrun 1;

这是我给你改正后的代码
int main(void)
{
int i=1,j=1,d=1;
double pi=0,t=1;
while(fabs(t)>1e-6)
{
t=d*4.0/j;
pi+=t;
//if(((int)(pi*100)-314==0))
if(0<pi-3.14 && pi-3.14<0.01)
{
printf("要计算%d项才能得到数值3.14\n",i);
printf("pi=%f\n",pi);
break;
}
else
i+=1;j+=2;d=-d;
}
return 1;
}

下面给出我的实现方案, 你可以对比一下
void main(void)
{
int i=0,n=1,sign=1,loop=10000;
double pi=0,temp;
for(i=1;i<loop;i++)
{
temp=4.0/n;
pi+=sign*temp;
n+=2;
sign=-sign;
if(0<pi-3.14 && pi-3.14<0.01)
{
printf("i=%d\tpi=%f\n",i,pi);
break;
}
}
}
百度网友77943e5
2013-01-20
知道答主
回答量:20
采纳率:100%
帮助的人:8.4万
展开全部
#include<stdio.h>
void main()
{
double i=4;
int c=0,count=1,l=3,x=-1;
do
{i+=x*(4.0/l);
l=l+2;
x=x*(-1);
count++;
if(int(i*100)-314==0&&c==0) {printf("计算到第%d项得到3.14\n",count); c=1;}
if(int(i*1000)-3141==0&&c==1) {printf("计算到第%d项得到3.141\n",count);c=2;}
if(int(i*10000)-31415==0&&c==2) {printf("计算到第%d项得到3.1415\n",count);c=3;}
if(int(i*100000)-314159==0&&c==3) {printf("计算到第%d项得到3.14159\n",count);c=4;}
}
while(c!=4);
}
个人觉得这样就行了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mechanics04
2011-04-08
知道答主
回答量:8
采纳率:0%
帮助的人:9.6万
展开全部
if语句的第一个条件其实没有任何意义,用浮点计算的话有第二个条件足矣。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式