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

您的程序过于简单,无法优化,可能过去在很弱的硬件上它本来就是相关的,但不适用于今天使用的任何东西。

但是,如果您希望优化的一般指针,那么请阅读算法和数据结构,并阅读“代码完成”第二版。它有一个专门用于优化的部分。

相关问题