1

私が作成しようとしているプログラムは、級数pi = 4 *(1-(1/3)+(1/5)-(1/7)+(1/9)-( 1/11)...)など。

ここで、プログラムはコマンドラインから概算する項の量を入力する必要があります。たとえば、誰かがコマンドラインから5を入力すると、見積もりは(1/9)になります。

問題は、出力が常にゼロになり、発生した論理エラーを判別できないことです。ただし、これはforループの問題だと思います。

もう1つの注意点として、私は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;    
}

注:何らかの理由で、StackOverflowに含めているライブラリが表示されません。私はライブラリを含めました、私はそれほど馬鹿ではありません。

4

3 に答える 3

5
(1/((2*i)-1))

i が整数であるため、上記のステートメントは整数です。整数には小数部分がないため、これは常にゼロになります。0 を何倍にしても 0 のままなので、pi は 0 のままです。

分数の答えを得るには、double または float に変更する必要があります。

于 2012-09-21T04:39:13.240 に答える
4

argc引数の数です。引数の内容は に格納されargvます。最初の引数 ( argv[0]) はプログラムの名前です。argc がそれを示している場合、必要な数値は に文字列として格納されますargv[1]

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

for(i = 1; i < iterations; i++){
   /* ... */
于 2012-09-21T04:38:58.903 に答える
0

以下のようにコードを書き直します

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;
}

カウントを見つけるには、argc ではなく argv 値を取る必要があります。pi 値を double に変換する必要があります。

于 2012-09-21T04:48:09.567 に答える