qq_27104447 2015-04-14 12:49 采纳率: 40%
浏览 4388
已采纳

c语言中for循环设置步长以后,自变量不按步长累加是怎么回事

源代码为:
#include
#include
float C[20];
int main()
{
float dx,dt,t,u[20],u_1[20],u_2[20];
int n,;float L[20],*p;
float*TIME(float A[]);
dt=0.01;dx=2*M_PI/20;
for(n=0;n<=19;n++)
{
u[n]=sin(n*dx);
}
for(t=dt;;t=t+dt)
{
p=TIME(&u[0]);
for(n=0;n<=19;n++)
{
L[n]=*(p+n);
u_1[n]=u[n]+dt*L[n];
}
p=TIME(&u_1[0]);
for(n=0;n<=19;n++)
{
L[n]=*(p+n);
u_2[n]=u[n]*3/4+(u_1[n]+dt*L[n])*1/4;
}

p=TIME(&u_2[0]);
for(n=0;n<=19;n++)
{
L[n]=*(p+n);
u[n]=u[n]*1/3+(u_2[n]+dt*L[n])*2/3;printf("%f,%f,%f\n",t,n*dx,u_2[n]);
}
if (t==20||t==50)
{ for(n=0;n<20;n++)
printf("%f,%f,%f\n",t,n*dx,u[n]);

}
}
return 0;
}
float*TIME(float A[])
{
float a_1,a_2, a_3,a_4,a_5,a_6,dx;
int n;
dx=2*M_PI/20;
a_1=-6/(30*dx);
a_2=-5*a_1+1/(12*dx);
a_3=10*a_1-2/(3*dx);
a_4=-10*a_1+2/(3*dx);
a_5=5*a_1+2/(3*dx);
a_6=-a_1-1/(12*dx);
C[0]=a_1*A[0-3+20]+a_2*A[0-2+20]+a_3*A[0-1+20]+a_4*A[0]+a_5*A[0+1]+a_6*A[0+2];
C[1]=a_1*A[1-3+20]+a_2*A[1-2+20]+a_3*A[1-1]+a_4*A[1]+a_5*A[1+1]+a_6*A[1+2];
C[2]=a_1*A[2-3+20]+a_2*A[2-2]+a_3*A[2-1]+a_4*A[2]+a_5*A[2+1]+a_6*A[2+2];
for(n=3;n<=17;n++)
{
C[n]=a_1*A[n-3]+a_2*A[n-2]+a_3*A[n-1]+a_4*A[n]+a_5*A[n+1]+a_6*A[n+2];

}
C[18]=a_1*A[18-3]+a_2*A[18-2]+a_3*A[18-1]+a_4*A[18]+a_5*A[18+1]+a_6*A[18+2-20];
C[19]=a_1*A[19-3]+a_2*A[19-2]+a_3*A[19-1]+a_4*A[19]+a_5*A[19+1-20]+a_6*A[19+2-20];
return &C[0];
}

  • 写回答

3条回答 默认 最新

  • danielinbiti 2015-04-14 13:06
    关注
    这是浮点类型,浮点类型不精确,0.01不一定刚好是20,可以是19.9999之类。建议把0.01放大100倍后在循环使用
     if (t==20||t==50)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog