1

これは、clock()を使用してn番目のフィボナッチ数を取得するのにかかる時間を計測する反復フィボナッチを使用するCプログラムです。プログラムはノンストップでループします。時計機能なしでプログラムを正しく実行できたので、方程式が正しいことを知っています。どんな助けでも大歓迎です!

#include<time.h>
#include<sys/file.h>
#include<stdio.h>

int main ( )
{
  int j=1, fib, n, i=1, k=0;
  int choice;
  float x,y,z;

  x = clock(); //start clock

  printf("input the fib number you want: ");
  scanf("$d", &n);

  while (k <=n)
  {
    fib = i + j;
    i = j;
    j = fib;
    ++k;

    printf( "The fib number is %d\n ", fib);
  }

  y =clock(); // end clock
  z = (y - x) / CLOCKS_PER_SEC;

  printf("\n\nThe execution time was: %.15f", z);
  return 0;
} 
4

1 に答える 1

5

scanf("$d", &n);である必要がありますscanf("%d", &n);。プログラムの開始時にランダムな値nが得られると、ループ状態が失敗する可能性があります。

コメントで@dasblinkenlightが述べているように、有用な測定が必要な場合は、ユーザー入力の後に時計を開始する必要があります。

さらに、ほとんどの本はそれをカバーしていないようですがscanf()、上記のようなタイプミスをキャッチできるので、の戻り値をチェックすることは良い考えです(@WilliamPursellに感謝します)。次のようなものが機能します。

if( scanf( "whatever random and incorrect format string", &n ) != 1 ) {
  /* exit with error message */
}

cplusplus.comから:

成功すると、関数は引数リストの項目の数を返します。このカウントは、一致の失敗、読み取りエラー、またはファイルの終わりに到達したために、予想されるアイテム数と一致するか、それより少なくなる(ゼロになる場合もあります)可能性があります。

読み取りエラーが発生した場合、または読み取り中にファイルの終わりに達した場合は、適切なインジケーターが設定されます(feofまたはferror)。また、データを正常に読み取る前にいずれかが発生した場合は、EOFが返されます。

ワイド文字の解釈でエンコードエラーが発生した場合、関数はerrnoをに設定しEILSEQます。

于 2013-03-01T02:47:05.250 に答える