我正在编写一个程序,让用户输入速度和角度,然后程序计算垂直和水平分量,现在我正在尝试使程序也计算飞行时间(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);
  ...
}



C不按名称匹配函数参数,而是按位置匹配。函数调用(TOF(t,g,Vo,ang))和函数定义(void TOF(float Vo,float ang,float g,float t))之间的参数顺序似乎不匹配。还请记住,Vo中的anggtTOF都是与Vo中的anggtmain完全不同的内存对象>;在t中写入TOF不会影响tmain的值。同样,参数g已经包含值9.81;无需在TOF中再次写入。
为什么从main呼叫TOF?目的是什么?请注意,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参数并返回double值。

10-05 21:55