我正在编写一个程序,让用户输入速度和角度,然后程序计算垂直和水平分量,现在我正在尝试使程序也计算飞行时间(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
中的ang
,g
,t
和TOF
都是与Vo
中的ang
,g
,t
和main
完全不同的内存对象>;在t
中写入TOF
不会影响t
中main
的值。同样,参数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 );
...
}
另外,请记住
sin
和cos
期望它们的参数以弧度而不是度表示。最后,除非确实有很好的理由,否则请使用
double
代替float
。 sin
和cos
都期望使用double
参数并返回double
值。