首页 > 解决方案 > 基本 C 程序中的循环

问题描述

我无法找到并解决此代码中的错误。
我希望 Parray 和 Tarray 在循环中填充方程的迭代。我尝试了 for 和 while 循环,但似乎只有数组的第一个成员被赋予了正确的值,并且该值在新循环开始时丢失。

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

int main() {

    int i;
    int j;
    float dt,P_init,t_init,t_end;
    dt = 0.03125;
    P_init = 30;
    t_init = 0;
    t_end = 30;

    int n_steps = 0;
    n_steps = t_end/(float)dt;

    int Parray[n_steps+1];
    int Tarray[n_steps+1];

    for (i=0; i<n_steps+1; i++)
       {
           Parray[i]=0;
           Tarray[i]=0;
       }



    Parray[0] = P_init;
    Tarray[0] = t_init;

    int x;
    float P,t,dpdt;

    x = 1;
    while (x < n_steps+1)
       {

        float s,d;
        P = Parray[x-1];
        t = Tarray[x-1];
        dpdt = 0.7 * P * (1-(P/750)) - 20;
        s = P + (dt * dpdt);
        Parray[x] = s;
        d = t + dt;
        Tarray[x] = d;
        x++;
        printf("%f  %f  ",s,d);

               }



    return(0);
}

标签: cfor-loopwhile-loopdifferential-equations

解决方案


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

int main(void) 
{
    int i, j, x;
    float dt, P_init, t_init, t_end, P, t, dpdt;

    dt = 0.03125;
    P_init = 30;
    t_init = 0;
    t_end = 30;

    int n_steps = 0;
    n_steps = t_end / (float)dt;

    // using float arrays
    float Parray[n_steps+1];
    float Tarray[n_steps+1];

    for (i = 0; i < n_steps+1; i++)
           Parray[i] = 0;

    for (j = 0; j < n_steps+1; j++)
           Tarray[j] = 0;

    Parray[0] = P_init;
    Tarray[0] = t_init;

    for (x = 1; x < n_steps + 1; x++) {
        float s , d;
        P = Parray[x-1]; 
        t = Tarray[x-1];
        dpdt = 0.7 * P * (1 - (P / 750)) - 20;
        s = P + (dt * dpdt);
        Parray[x] = s;
        d = t + dt;
        Tarray[x] = d;
        printf("%f  %f\n", s, d);
    }

    return(0);
}

我将 int 数组更改为浮点数组。你在这里实际计算什么?


推荐阅读