我的问题是假设存储在data [i] .Px中的正确值没有存储,并且与data [i] .Py相同。 我在做什么的公式是错误的或必须。 该公式应计算射弹的“位置”。 Vx和Vy是初始速度/值,Px和Py是位置(在x和y方向)
typedef struct
{
float t, Vx, Vy, Px, Py;
}datapoint;
steps = 100
data[0].Vx = (20*(cos(30))); //in my program 30 is in radians
data[0].Vy = (20*(sin(30));
data[0].Px = 0;
data[0].Py = 0;
do
{
i=1;
printf("Time: %.2f\t",i*q5);
//X
data[i].Vx = data[i-1].Vx;
data[i].Px = ((data[i-1].Px) + ((data[i].Vx) * i));
printf("X = %.2f\t",data[i].Px);
//Y
data[i].Vy= data[i-1].Vy - (9.81)*i;
data[i].Py= data[i-1].Py + (data[i].Vy * i);
printf("Y = %.2f\t", data[i].Py);
printf("\n");
i++;
}while(**(data[i].Py >0)** && (i<=steps));
答案 0 :(得分:2)
在do while循环的while条件下,你想要
while((data[i].Py > 0) && (i <= steps));
哦,只是看到了一个缺陷。为什么要在循环中初始化i=1
!它的价值永远不会超过2。
(我刚刚浏览了你的问题,所以如果这不起作用,我会彻底检查)。
答案 1 :(得分:1)
根据使用的符号判断(因为声明未显示),data
是datapoint
的数组。然后data->Px
相当于data[0].Px
。
您没有显示data[0]
的初始化方式。
i
永远不会超越2.除非steps
为2,否则循环不会因i <= steps
条件而终止。由于data[0].Py
(又名data->Py
)中的值未在循环中修改,因此除非data[0].Py
为负或在进入循环时为零,否则您将拥有无限循环。
你应该看一下do { ... } while (...);
循环的问题。它们不会自动出错;但它们的使用频率远低于while
或for
循环。
通常,如果您生成最小的可编译和可运行程序(或者如果您在编译程序时遇到问题则说明语法错误的最小不可编译程序),您将在StackOverflow上获得更好的答案。而'minimal'意味着在不改变行为的情况下不能删除任何东西。