0

私はプログラミングが初めてで、自分のコードの何が問題なのかわかりません。誰かが私のプログラムの何が問題なのかを理解するのを助けることができる方法があれば、本当に感謝しています. 私はすでにこの問題に 2 時間取り組んできましたが、必要以上に難しくしていることはわかっています。これは私の新しいコードです。私の新しい出力は0.000000476837158です。

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main() {
         double x, sinx, z, factorial, term;
         int j, n, i;
         x=0.5;
         n=10;
         i=0;
         z=sin(0.5);
         for(int i=0; i<=n; i++){
                      factorial = 1;
                      for(j=2*i +1; j<=i; j++)
                      {
                               factorial = factorial * j;
                               }
                      term=(pow(-1,i)*pow(x,2*i+1))/(factorial);
                      sinx=term++;
                      i=i++;
                                   }
                      printf("sin(0.5) is approximately %.15lf\n", sinx);
                      printf("sin(0.5) by default function is %.15lf\n", z);
                      system("pause");
                      return 0;
                      }
4

3 に答える 3

1

このループは意味がありません。

 for(j=0; j<=i; j++){
     factorial=2*j+1;
     }

それは何も違うことをしません

factorial = 2*i+1;

階乗(のようなi!)を計算したい場合は、次のようにします

// initialize `factorial`
factorial = 1;
for(j=1; j<=i; j++)
{
    //multiply `factorial` by `j`.  
    factorial = factorial * j;
}

sinxとを使い続けtermますが、初期化されません。これは、ガベージ値が含まれることを意味します。


i++追加の代入演算子を使用する必要はありません。

変化する

i=i++;

単純に

i++;

またはさらに良いことに、forループの代わりにループをwhile使用します

for(int i=0; i<=n; i++)
于 2013-09-25T16:01:06.893 に答える
0

このステートメントの最初の出現

     sinx=sinx+term;

最初にそれらを使用するときに割り当てのrhsの変数が初期化されていないため、問題の1つになります。ループ内で同じ行を続けて実行するとsinx、計算中にジャンク値が伝搬されます。

他にも問題があると思いますが、コードを詳しく調べていません。

于 2013-09-25T16:00:56.497 に答える
0

あなたの i番目の項は -1 i x 2i+1 /i で、急速に大きくなります。問題を発見するには、最初のいくつかの用語を印刷しておく必要があります。

(他にも のような問題がありますが、i=i++;待つことはできます。)

于 2013-09-25T16:03:48.807 に答える