我正在制作一个让用户输入速度和角度的程序,然后程序计算垂直和水平分量,现在我试图让程序也计算飞行时间(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;
}
非常感谢一些指导。
答案 0 :(得分:1)
您似乎在使用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
答案 1 :(得分: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不是按名称匹配函数参数,而是按 position 匹配。函数调用(TOF(t,g,Vo,ang)
)和函数定义(void TOF(float Vo,float ang,float g,float t)
)之间的参数顺序似乎不匹配。另请注意,Vo
中的ang
,g
,t
和TOF
中的每一个都是内存中完全不同的对象 {在Vo
中{1}},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
,则必须将指针传递给{{1 }}:
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
个值。