2012-09-21 172 views
1
計數pi的近似

我的節目就是我試圖使應該用C使用PI系列近似PI = 4 *(1 - (1/3)+(1/5) - ( 1/7)+(1/9) - (1/11)...)等等。現在For循環在C

,通過命令行,程序必須輸入項的量來近似出來,例如,如果有人在命令行估算將外出(1/9)進入5。

的問題是,我總是輸出零產量,而我不能確定我做了邏輯上的錯誤。但我相信這是一個for循環問題。其他

一個說明,我使用C,而不是C++。

我的代碼是:

/* 
Finding pi of an infinite series 
*/ 

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

int main(int argc, char *argv[]){ //need to get input for amount of terms 

    int i, pi; 

    pi = 0; 
    i = 0; 
    double neg; //neg to make a number negative 

    neg = -1;  

    for(i = 1; i < argc; i++) 
    { 
     pi = pi + pow(neg, i)*(1/((2*i)-1)); 
     i = i + 1; 
    } 

    printf("The approximation of pi is: %lf", pi); 

    return 0;  
} 

注:由於某種原因,它沒有顯示我包括堆棧溢出的庫。我確實包括了這些庫,我並不是那麼愚蠢。

+0

最近這成爲一個常見問題。 – chris

+0

你沒有理由在這裏使用'pow',你可以'neg * = -1'。 – KAction

回答

4

argc是參數的個數。參數的內容存儲在argv中。第一個參數(argv[0])是您程序的名稱;如果argc表示它,則您想要的數字將以字符串形式存儲在argv[1]中。

int iterations = atoi(argv[1]); /* convert string to integer */ 

for(i = 1; i < iterations; i++){ 
    /* ... */ 
5
(1/((2*i)-1)) 

上面的語句是一個整數,由於i是整數。整數沒有小數部分,所以這將始終爲零。由於任何時候零仍然是零,所以pi將保持爲零。

你應該改變雙打或浮動來獲得分數的答案。

1

重寫代碼如下

int main(int argc, char *argv[]){ //need to get input for amount of terms 
    int i, ncount; 

    double neg, pi; //neg to make a number negative 
    pi = 0; 
    neg = -1; 

    ncount = atoi(argv[1]); 

    for(i = 1; i < ncount; i++){ 
    pi = pi + pow(neg, (double)i)*(1.0/((2.0*(double)i)-1)); 
    i = i + 1; 
    } 

    printf("The approximation of pi is: %lf", pi); 
    return 0; 
} 

你必須採取的argv值不是像argc找到計數。你必須將pi值轉換爲double值。