使用c编程的大炮弹丸程序

cannon projectile program using c programming

我正在制作一个程序,让用户输入速度和角度,然后程序计算垂直和水平分量,现在我试图让程序也计算飞行时间 (TOF)。方程为 t=2*Vo*sin(ang)/g。 但我坚持如何实施它。我尝试过实现它,但我不是很成功。

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

void components(float Vo, float ang, float* outpVx, float* outpVy,float* X,float* Y, float a,float t)
{
    t=0.1;
    a=-9.81;

    *outpVx=Vo*cos(ang);
    *outpVy=Vo*sin(ang);

    *X=*outpVx*t;
    *Y=*outpVy*t+(0.5*a*(t*t));

}

void TOF(float Vo,float ang,float g,float t)
{
    g=9.81;
    main(Vo,ang);
    t=(2*Vo*sin(ang))/g;


}

int main(void)
{
    float Vo,ang;
    float outVx=0.0;
    float outVy=0.0;
    float X;
    float Y;
    float t=0.1;
    float a=-9.81;
    float g= 9.81;

    printf("\nEnter Velocity:\n");
    scanf("%f",&Vo);
    printf("\nEnter Angle:\n");
    scanf("%f",&ang);

    components(Vo,ang, &outVx, &outVy, &X, &Y,a,t);
    printf("Horizontal \t Vertical\n");
    printf("%f \t %f", X, Y);

    TOF(t,g,Vo,ang);
    printf("%f",t);


return 0;
} 

一些指导将不胜感激。

前面有一些大危险信号:

void TOF(float Vo,float ang,float g,float t)
{
    g=9.81;
    main(Vo,ang);
    t=(2*Vo*sin(ang))/g;
}

int main( void )
{
  ...
  TOF(t,g,Vo,ang);
  ...
}
  1. C 不按名称匹配函数参数,而是按位置。函数调用 (TOF(t,g,Vo,ang)) 和函数定义 (void TOF(float Vo,float ang,float g,float t)) 之间的参数顺序似乎不匹配。还要记住 Voanggt 中的每个 TOF 都是 内存中完全不同的对象 来自 Voanggt 中的 main;在 TOF 中写入 t 不会影响 maint 的值。此外,参数 g 已包含值 9.81;无需在 TOF 中再次写入。

  2. 你为什么要从 TOF 打电话给 main?目的是什么?请注意,main 的定义不需要任何参数,但您在 TOF 的调用中传递了两个参数。

这是我认为你想要的:

float TOF( float Vo, float ang, float g )
{
  return (2 * Vo * sin( ang ) ) / g;
}

int main( void )
{
  ...
  t = TOF( Vo, ang, g );
  ...
}

如果你想保持 TOF 键入 void 并让它在参数列表中更新 t,那么你必须传递一个 指针 t:

void TOF( float Vo, float ang, float g, float *t )
{
  *t = (2 * Vo * sin( ang ) ) / g;
}

int main( void )
{
  ...
  TOF( Vo, ang, g, &t );
  ...
}

此外,请记住 sincos 期望它们的参数以 弧度 而不是度数表示。

最后,除非您有 确实 不这样做的充分理由,否则请使用 double 而不是 floatsincos 都期望 double 参数和 return double 值。

您似乎在调用 C 函数时遇到了一些问题。

您的佳能问题的简化解决方案是:

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

#define PI 3.14159265

int main()
{
   double Vo,ang,rad,g,Vx,Vy,t;

   printf("\nEnter Velocity:\n");
   scanf("%lf",&Vo);

   printf("\nEnter Angle:\n");
   scanf("%lf",&ang);

   g = 9.81;
   rad = ang*PI/180;
   Vx = Vo*cos(rad);
   Vy = Vo*sin(rad);
   t = 2*Vy/g;

   printf("Velocity\tAngle\t\tHorizontal\tVertical\tTime of flight\n");
   printf("%lf\t%lf\t%lf\t%lf\t%lf\n", Vo, ang, Vx, Vy, t);

   return 0;
}

执行示例:

Enter Velocity:
10

Enter Angle:
45
Velocity        Angle           Horizontal      Vertical        Time of flight
10.000000       45.000000       7.071068        7.071068        1.441604