2011-01-25 25 views
0

私はプログラミングを始めた誰もがより良いコードを整理したり、次のコードでは、より効率的な何かを作る方法についての洞察やヒントを与えることができればねえ、私が思っていた:次のコードをより効率的にする方法はありますか?

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

main() 
{ 

    /* Variable Definitions */ 

    int altitude, speed; 
    float angle, combo, earthRadius, gravityAcceleration, horizontalDistance, pi, radians, time, verticalDistance; 

    pi = 3.141592653589793238; 

     /* User Input */ 

    printf("Let's play golf!\n\n"); 
    printf("Enter altitude [m] : "); 
     scanf("%d", &altitude); 
    printf("Enter speed [m/s] : "); 
     scanf("%d", &speed); 
    printf("Enter angle [degrees]: "); 
     scanf("%f", &angle); 
    printf("Enter time [s]  : "); 
     scanf("%f", &time); 
    printf("\n"); 

     /* Calculations */ 

    radians    = angle * (pi/180); 
    earthRadius   = 6.371E6; 
    gravityAcceleration = 9.8 * pow((earthRadius/(earthRadius + altitude)), 2); 

     /* Formula Definitions */ 

    horizontalDistance = speed * (cos(radians)) * time; 
    verticalDistance = (speed * (sin(radians)) * time) - (0.5 * gravityAcceleration * (pow(time, 2))); 

     /* Output Statements */ 

    printf("Horizontal distance = %.1lf m\n", horizontalDistance); 
    printf("Vertical distance = %.1lf m\n", verticalDistance); 

} 
+1

どのような意味でより効率的ですか?プログラムはとてもシンプルですが、ここで何を達成しようとしていますか? –

+5

'scanf'へのすべての呼び出しを削除し、ユーザー入力を待たずにすむと、はるかに高速に実行されます。 –

+0

Hardy har har:D –

答えて

2

ヒント:

  1. メインの正しい定義はint main(int argc, char** argv)です。または、おそらく短いint main()。この機能の最後にreturn 0も指定してください。
  2. piは決して変更されないため、const double pi = 3.141592653589793238;または#define PI 3.141592653589793238となります。
  3. printf引数にlf修飾子を使用しているので、すべての変数の精度を高めるために、floatdoubleに置き換えてください。あなたはおそらくfloatdoubleに置き換えたいと思っています。なぜならRはコメントの中で指摘しているからです。
  4. 任意の精度の浮動小数点が必要な場合は、MPFRのようなライブラリを使用する必要があります。

これはコードのスピードアップにつながりません。彼らはきちんとした点だけです。

+2

'const float'は悪いアドバイスです。 '#define'を使います。そして、浮動小数点を使用しないで、ダブルスを使用してください。浮動小数点数は非常に精度が悪く、大きさ以外の利点はありません。サイズが数千ないし数百万の場合にのみ重要です。 –

+0

'const double'で置き換えられ、' or define'オプションが含まれています。 #defineとconstは正確さの点で違いがありますか?実際のニックピックでは –

+0

ですが、メモリが使えば、 'stdlib.h'から' EXIT_SUCCESS'を返す方が普通です。私のCは錆びている。 –

0

あなたのプログラムはあまりにも単純ではありませんでした。おそらく、これまでのところはるかに弱いハードウェアでは関連性がありましたが、今日は使用されているものではありません。

しかし、最適化に関する一般的なポインタをご希望の場合は、アルゴリズムとデータ構造について少し読んで、「コード完成」第2版をご覧ください。最適化専用のセクションがあります。

関連する問題