c语言求pi的近似值
#include<stdio.h>
doublefact(inti);
doubleodd_multiple(inth);
intmain()
{
doubleeps,j=1,k=1,sum=1,PI;
inti=1;
scanf("%le",&eps);
while(j/k>=eps){
j=fact(i);
k=odd_multiple(i+1);
sum=sum+j/k;
i++;
}
PI=2*sum;
printf("PI=%.15lf",PI);
return0;
}
doublefact(inti)
{
doublej=1;
for(;i>1;i--)
{
j=j*i;
}
return(j);
}
doubleodd_multiple(inth)
{
doublek=1;
for(;h>1;h--){
k=k*(2*h-1);
}
return(k);
}
2. 用C语言求π的近似值
循环体里面的公式有点问题,我重新写了一下,代码如下:
void main()
{
double i, pi;
i=1.0,pi=0.0;
while (fabs(1.0/i) >= 1e-6){
pi=(pi + pow(-1.0,i+1)/(2*i-1));
i++;
}
printf("pi=%f\n",pi* 4);
system("pause");
}
注意输专出的结果是属pi*4,望点赞!
3. C语言:求π近似值
#include <stdio.h>
int main()
{
double term,p,b;
p=1.0,term=1.0;
for(b=2.0;b<=1000000.0;b++)
{
if((int)b%2==0)
{
p-=1.0/(2.0*b-1.0);
}
else
{
p+=1.0/(2.0*b-1.0);
}
}
p=p*4;
printf("p=%f\n",p);
system("pause");
return 0;
}
循环次数越多结果越精确
这里用的是莱布尼兹级数求pi
4. C语言:求π的近似值
因为你的标题都说是求PI的近似值,所以不标准啊。
补充:
你比较一下第一个和第二个,第一个里面deno第一项中是1,第二个里面deno第一项是3,这明显不一样啊
5. c语言 根据公式求出π的近似值。
#include<stdio.h>
doublepowi(doublenum,intmulti){
doubler=1.0;
inti;
for(i=0;i<multi;i++){
r*=num;
}
returnr;
}
doubleitem(intn){
doubler=1.0;
inti;
/*1.0*1/2*3/4*5/6.....*/
for(i=1;i<n;i++){
if(i%2){
r*=i;
/*printf("*%d",i);*/
}else{
r/=i;
/*printf("/%d",i);*/
}
}
r*=1;
/*printf("*%d",1);*/
r/=n;
/*printf("/%d",n);*/
r*=powi(0.5,n);
/*printf("*%lf",powi(0.5,n));*/
/*printf("--item%d:%lf ",n,r);*/
returnr;
}
intmain(){
doublepd6=0.0,ci=0.0;
inti=1;
do{
ci=item(i);
pd6+=ci;
i+=2;
}while(ci>=1e-6);
printf("PI=%.6lf ",pd6*6);
return0;
}
完全按你的公式做的,结果真的对了,3.141592(这里对6位有效数字有个存疑,就是应该输出6位还是7位数字,理论上有效数字后面应该带上一个估值,用来修正有效数字的,如果要求真的那么严格,我可以给你写个函数用来输出6位有效数字)。
一般级数很少有用这个复杂的式子的吧,一般都是 1-1/3+1/5-1/7+1/9-1/11 这个式子,你的公式竟然也是对的。楼上的完全没看懂级数的项的规律。
-------------------------------------------------
以上是20:29分发的回答,既然你没有追问,我只能通过修改这个回答,慢慢解释一下:
powi函数是为了不引用庞大的math库,而自己写的一个简单的正整数幂的函数(math库里有double pow(double, double),这个运算过程中不需要小数的幂值,就用循环乘法来实现了。
item函数 是每个项的计算过程,仔细看的话可能会发现,这些项并不是 i=1,2,3,4... 而是 i=1,3,5,7... 这个是为了符合级数的项中的值,都是奇数在做运算。
item里面的那些注释掉的 printf 是故意留下用来观察级数表达式的。由于每一项都是多个数值相乘或除,如1/2x3/4x5/6 其实就是1 * 2 / 3 * 4 ,这些printf可以在计算每一项的时候把整个过程打印出来。
级数的难点其实就是找到项的通用表达式,你的公式已经把表达式写的很清楚了,就看你把它提取成算法了
6. C语言求pi的近似值
如果i是整型
那么 1/i就是整型计算。 当i值为3时, 1/i=0
导致计算错误。
7. c语言 求π的近似值
term没有初始值。
temp若是int,则程序中的计算将永远是1。以下是修改后的程序及运行情况:
8. c语言中求PI的近似值的编程问题
i 的初始值是0 你 1.0/(i*i) 除0了 非法运算
9. 用c语言编程计算pi的近似值:
#include <stdio.h>
int main ()
{
double p=2,j,k=0.000001; double n=1;
do
{
j=p;
n++;
p=p*n*n/((2n-1)*(2n+1));
}
while((p-j)<k)
printf("\n%lf",n);
return 0;
}
大致就是这个意思吧,里面漏掉什么也有可能内,我没有检验容。