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;
}
大致就是這個意思吧,裡面漏掉什麼也有可能內,我沒有檢驗容。