2011-01-25 75 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

更高效的是什麼意義?該計劃非常簡單,你想在這裏完成什麼? – 2011-01-25 00:26:08

+5

如果您刪除了所有對`scanf`的調用並且不等待用戶輸入,它將運行得更快。 – 2011-01-25 00:26:40

回答

2

幾點建議:

  1. main的正確定義是int main(int argc, char** argv)。或者也許更短的int main()。此功能結束時您還應該使用return 0
  2. 由於pi永不改變更好的定義將是const double pi = 3.141592653589793238;#define PI 3.141592653589793238
  3. 由於您在printf參數中使用了lf修飾符,因此您可能希望將float替換爲double,以便在所有變量中獲得更高的精度。無論如何,您可能想要將float替換爲double,原因是R在評論中指出的原因。
  4. 如果你想要任意的精度浮點數,你需要使用一個庫,比如MPFR

這不會加快你的代碼。他們只是整潔的要點。

0

您的程序過於簡單,無法優化,可能過去在很弱的硬件上它本來就是相關的,但不適用於今天使用的任何東西。

但是,如果您希望優化的一般指針,那麼請閱讀算法和數據結構,並閱讀「代碼完成」第二版。它有一個專門用於優化的部分。

相關問題