编写程序,用如下公式计算圆周率的近似值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;}
}
提个正确思路也可以啊~~~ 展开
#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;}
}
提个正确思路也可以啊~~~ 展开
3个回答
展开全部
问题很多
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;
}
}
}
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;
}
}
}
展开全部
#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);
}
个人觉得这样就行了
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);
}
个人觉得这样就行了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
if语句的第一个条件其实没有任何意义,用浮点计算的话有第二个条件足矣。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询