编写弹丸运动代码的问题

时间:2020-03-24 09:19:56

标签: c projectile

我正在尝试编写此代码,以计算弹丸的最终高度和飞行持续时间,而用户必须提供位移,初始速度和发射角度的值。没有任何编译错误,但更多是我要处理的逻辑错误。最终的高度值和持续时间都是错误的。同样,在输入发射角度后,它不会立即计算高度和时间。相反,我需要按下向下键,然后按Enter进行计算。我调用的编译器是[gcc -Wall -Werror -ansi -o task2.out task2.c -lm],然后是行[./task2.out]

#include <stdio.h> /* access to scanf, printf functions */
#include <math.h> /* access to trignometric functions */
#define g 9.8 /* acceleration due to gravity constant */
int main(void){
    double v, theta, t, x, h2;
    /* v = initial velocity
    theta = launch angle
    t = time
    x = horizontal displacement
    h2 = final height
    */

    printf("Enter range of projectile>");
    scanf("%lf", &x); /* assigned x as a long float */

    printf("Enter velocity>");
    scanf("%lf", &v); /* assigned v as a long float */

    printf("Enter angle>");
    scanf("%lf", &theta); /* assigned theta as a long float */

    scanf("%lf", &t); /* assigned t as a long float */
    t = x/v*cos(theta); /* formula for time */

    scanf("%lf", &h2); /* assigned h2 as a long float */
    h2 = (t*v*sin(theta)) - (0.5*g*t*t); /* formula for height */

    printf("Projectile final height was %.2lf metres./n", h2); 
    printf("Projectile duration was %.2lf seconds", t );

    return 0;       
}

2 个答案:

答案 0 :(得分:1)

It doesn't instantly calculate。那是因为您试图读取一个额外的数字

scanf("%lf", &t); /* assigned t as a long float */

删除该行。下一行的公式将计算时间。

高度相同,

scanf("%lf", &h2); /* assigned h2 as a long float */

也删除该行。

答案 1 :(得分:1)

假设一些事情(真空,平坦的环境,大的地球半径,通过2 Pi给出的全圆角而不是360度的角度),您的计算应为

t = x/(v*cos(theta));

因为您需要除以速度的水平部分,而不是除以速度,然后再乘以余弦角。

h2 = (t*v*sin(theta)) - (0.25*g*t*t);

因为最大持续时间是在持续时间结束后而不是在整个持续时间之后达到的。
因此,与重力相关的加速度(0.5 * g * t * t)的积分只需减去一半即可。

john较早的答案已经解决了需要输入的内容不仅仅是数字的问题。