有没有办法让以下代码更有效?

时间:2011-01-25 00:24:14

标签: c

嘿,我刚刚开始编程,我想知道是否有人可以提供有关如何更好地组织代码或在以下代码中提高效率的见解或提示:

#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);

}

2 个答案:

答案 0 :(得分: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,以便在所有变量中获得额外的精度。由于R在评论中指出的原因,您可能希望将float替换为double
  4. 如果您需要任意精度浮点数,则需要使用库,例如​​MPFR
  5. 这不会加快您的代码速度。他们只是为了整洁。

答案 1 :(得分:0)

您的程序太简单了,无法进行优化,也许过去在较弱的硬件上它本来是相关的,但不是今天使用的任何东西。

但是如果你想要关于优化的一般指针,那么在算法和数据结构上做一些阅读,并看一下“Code Complete”第二版。它有一个专门用于优化的部分。