结构与公式

时间:2011-10-02 19:51:45

标签: c

我的问题是假设存储在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));

2 个答案:

答案 0 :(得分:2)

在do while循环的while条件下,你想要

while((data[i].Py > 0) && (i <= steps));

哦,只是看到了一个缺陷。为什么要在循环中初始化i=1!它的价值永远不会超过2。

(我刚刚浏览了你的问题,所以如果这不起作用,我会彻底检查)。

答案 1 :(得分:1)

根据使用的符号判断(因为声明未显示),datadatapoint的数组。然后data->Px相当于data[0].Px

您没有显示data[0]的初始化方式。

i永远不会超越2.除非steps为2,否则循环不会因i <= steps条件而终止。由于data[0].Py(又名data->Py)中的值未在循环中修改,因此除非data[0].Py为负或在进入循环时为零,否则您将拥有无限循环。

你应该看一下do { ... } while (...);循环的问题。它们不会自动出错;但它们的使用频率远低于whilefor循环。

通常,如果您生成最小的可编译和可运行程序(或者如果您在编译程序时遇到问题则说明语法错误的最小不可编译程序),您将在StackOverflow上获得更好的答案。而'minimal'意味着在不改变行为的情况下不能删除任何东西。