Есть ли способ сделать следующий код более эффективным? - PullRequest
0 голосов
/ 25 января 2011

Эй, я только начал программировать, мне было интересно, кто-нибудь может дать понимание или советы о том, как лучше организовать код или сделать что-то более эффективное в следующем коде:

#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 ]

2 голосов
/ 25 января 2011

Некоторые предложения:

  1. Правильное определение main будет int main(int argc, char** argv).Или, возможно, короче int main().Вы также должны return 0 в конце этой функции.
  2. Поскольку pi никогда не изменяется, лучшее определение будет const double pi = 3.141592653589793238; или #define PI 3.141592653589793238.
  3. Поскольку вы использовали модификатор lf в аргументах printf, вы, вероятно, захотите заменить float на double для дополнительной точности во всех ваших переменных.Возможно, вы все равно захотите заменить float на double по причинам, указанным в комментариях R.
  4. Если вам нужна плавающая точка произвольной точности, вам нужно использовать для этого библиотеку, например MPFR .

Это не ускорит ваш код.Это просто очки для аккуратности.

0 голосов
/ 25 января 2011

Ваша программа слишком проста для оптимизации, возможно, в прошлом на гораздо более слабом оборудовании это было бы уместно, но не на том, что используется сегодня.

Однако, если вам нужны общие указания по оптимизации,затем немного прочитайте об алгоритмах и структурах данных и взгляните на книгу «Code Complete», второе издание.Имеется раздел, посвященный оптимизации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...