使用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);
...
}
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
;在 TOF
中写入 t
不会影响 main
中 t
的值。此外,参数 g
已包含值 9.81
;无需在 TOF
中再次写入。
你为什么要从 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 );
...
}
此外,请记住 sin
和 cos
期望它们的参数以 弧度 而不是度数表示。
最后,除非您有 确实 不这样做的充分理由,否则请使用 double
而不是 float
。 sin
和 cos
都期望 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
我正在制作一个程序,让用户输入速度和角度,然后程序计算垂直和水平分量,现在我试图让程序也计算飞行时间 (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
;在TOF
中写入t
不会影响main
中t
的值。此外,参数g
已包含值9.81
;无需在TOF
中再次写入。你为什么要从
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 );
...
}
此外,请记住 sin
和 cos
期望它们的参数以 弧度 而不是度数表示。
最后,除非您有 确实 不这样做的充分理由,否则请使用 double
而不是 float
。 sin
和 cos
都期望 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