69,371
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#include <stdlib.h>
#include<math.h>
int main()
{
int i,j,m=0,c=79,d=249;
float t0=226.85,tf=26.85,h=2800.0,Q=0.0,temp=0.0,N=187.0,EPS,X=1.0,e=0.1,f=0.1,delta=0.0001,sum = 0.0;
float a[80][250],t[80][250],del[80];
for(i=0;i<80;i++){
for(j=0;j<250;j++)
{
t[i][j]=100.0;
a[i][j]=100.0;
del[i]=1.0;
}
}
printf("%4.2lf\n",a[1][1]);
while(X>0.01){
m++;
for(i=0;i<=c;i++)
{
for(j=0;j<=d;j++)
{
if(j==0&&0<=i&&i<=c)
a[i][j]=t0;
else if(0<j&&j<d&&i==0)
a[i][j]=(2*t[1][j]+t[0][j+1]+t[0][j-1]+2*h*N*tf/N)/(4+2*h*delta/N);
else if(0<j&&j<d&&i==c)
a[i][j]=(2*t[c][j]+t[c+1][j+1]+t[c+1][j-1]+2*h*delta*tf/N)/(4+2*h*delta/N);
else if(j==d&&0<i&&i<c)
a[i][j]=(2*t[i][d]+t[i+1][d+1]+t[i-1][d+1]+2*h*delta*tf/N)/(4+2*h*delta/N);
else
a[i][j]=(t[i][j+1]+t[i][j-1]+t[i-1][j]+t[i+1][j])/4;
}
}
a[0][d+1]=(2*h*delta*tf/N+t[0][d]+t[1][d+1])/(2+2*h*delta/N);
printf("%4.2lf\n",a[0][249]);
a[c+1][d+1]=(2*h*delta*tf/N+t[c][d+1]+t[c+1][d])/(2+2*h*delta/N);
printf("%4.2lf\n",a[79][249]);
X=0.0;
for(i=0;i<=c;i++)
{
for(j=0;j<=d;j++)
{
EPS=fabs(t[i][j]-a[i][j]);
if(EPS>X) X=EPS;
}
}
if(m>100)
break;
}
if(m<100){
for(i=1;i<=80;i++)
del[i]=(t[i][0]-t[i][1])/delta;
sum+=del[i];
Q=N*sum*delta;
temp=t[40][249];
printf("%4.2lf %4.2lf",Q,temp);
printf("\n");
}
getchar();
}
楼主,看到你定以那么多变量(真需要那么多),并且变量大多以单个字母命令,怎么也才不出来你定义这个变量做什么,自己疯了,让别人看你的代码也感觉摸不着头脑;
程序里有多处越界,数据长度是250,那么其下标是从[0, 249]里,同理,长度是80,那么下标是从[0, 79];
建议楼主,以后写代码可以先构思,变量不是写多了就好分析和理解了,多了自己看着头大,别人看着更是费劲。从你的程序里也看不出你的逻辑是要做什么。所以,先构思好;其次,对于一些变量有通用的命名的,比如循环变量,i, j, k;一般用在循环和数组下标,另外,n或着num一般是number的缩写,cnt是count的缩写,用于分别标识数字和计数器。总之,除了这些通用的命名法之外,定义变量和函数都建议做到见名知义。
c = 79, d = 249
a[c+1][d+1]=(2*h*delta*tf/N+t[c][d+1]+t[c+1][d])/(2+2*h*delta/N); //试图设置a[80][250],不合法。
用心回答每个问题,如果对您有帮助,请采纳答案好吗,谢谢!