用于模拟已发射对象的抛物线轨迹的C代码提前终止

时间:2013-07-14 09:14:19

标签: c output

该程序模拟以固定的垂直和水平速度以一定角度发射的物体的抛物线轨迹。它以终端控制台中显示的坐标输出数据。

但是,程序仅将数据输出到第二行并终止,因此代码中的某处必定存在错误。我无法识别错误,所以我请求帮助!

 #include <stdio.h>
 #include <stdlib.h>

 int main(void) {
 float lvelox;
 float lveloy;
 float xcord;
 float ycord;
 int stepcount;
 int step = 0;

 /* Initializing velocity */
 {
   printf("Enter the initial h velocity of the ball:\n");
   scanf("%f", &lvelox);
   printf("Enter the initial v velocity of the ball:\n");
   scanf("%f", &lveloy);
 }

 /* Obtain number of steps */
 {
   printf("Enter the number of steps wanted:\n");
   scanf("%d", &stepcount);
 }

 /* formula for calculating initial position */
   if ( step == 0 )
   {
   xcord = 0;
   ycord = 0;
   step = step + 1;
   printf("\n");
   printf("xcord, ycord, step\n");
   printf("\n");
   printf("%f, ", xcord);
   printf("%f, ", ycord);
   printf("%d\n", step);
   }

 /* Loop method */
   if ( step < stepcount )
   {
   lveloy = lveloy - 9.81;
   xcord = xcord + lvelox;
   ycord = ycord + lveloy;
   step = step + 1;
   printf("%f, ", xcord);
   printf("%f, ", ycord);
   printf("%d\n", step);

   if ( ycord < 0 )
   {
   lveloy = (lveloy * -1);
   lveloy = lveloy - 9.81;
   xcord = xcord + lvelox;
   ycord = ycord + lveloy;
   step = step + 1;
   printf("%f, ", xcord);
   printf("%f, ", ycord);
   printf("%d\n", step);
   }
   }

   if (step >= stepcount)
   {
       return 0;
   }

 }

3 个答案:

答案 0 :(得分:2)

我认为你需要一个循环而不是if,在你的代码中:

 if ( step < stepcount ) 

应该是:

 while ( step < stepcount )

答案 1 :(得分:1)

你的“循环方法”不是循环!这是一个if语句。将其更改为增加step的for循环,这可能会解决您的问题。

答案 2 :(得分:1)

我认为你误解了循环的构造方式。你写过:

if (step == 0) {
    // Starting code
    ⋮
}
if (step < stepcount) {
    // Loop code
    ⋮
}
if (step >= stepcount) {
    // Finishing code
    ⋮
}

你似乎已经假定某些东西会自动循环这些测试。这不会发生。重写以上内容如下:

// Starting code
⋮
for (step = 0; step < stepcount; ++step) {
    // Loop code
    ⋮
}
// Finishing code
⋮

请注意,此代码会在每次传递时自动递增step,因此您必须重新考虑循环代码如何更新它。你似乎有条件地更新它两次,我不完全理解,所以我犹豫是否规定了一个具体的变化。