语言 1 # 00-C运行后老是结果等于-1.#IND00是怎么回事

问题描述

C运行后老是结果等于-1.#IND00是怎么回事

我的题目是一个流体力学sod激波管问题,运行后结果都是-1.#IND00,还请各位大神指教啊
我程序源代码是:
#include
#include
float dx=1.0/100,e=0.01,r=1.4;
float a_1=-2/(30*dx),a_2=-5*a_1+1/(12*dx),a_3=10*a_1-2/(3*dx),a_4=-10*a_1,a_5=5*a_1+2/(3*dx),a_6=-a_1-1/(12*dx);
float*q[3];float*s[3];float*v[3];float*w1[3];float*w2[3];
float pr[100],u[100],p[100],c[100];
int i,j;
int main()
{
float dt;
float f[3][100],f_1[3][100],f_2[3][100],L[3][100],L_1[3][100],L_2[3][100];
float y[3][100],y_1[3][100],y_2[3][100],U[3][100],U_1[3][100],U_2[3][100],U_11[3][100],U_12[3][100],U_21[3][100],U_22[3][100];
float*(TIME(float f_1[3][100]));
float*(time(float f_2[3][100]));
float*(fun(float A[3][100]));
float*(FUN1(float B[3][100]));
float*(FUN2(float C[3][100]));
int n;
char*d="E:x2.txt";char*a="E:sudu2.txt";char*b="E:midu2.txt";char*g="E:yaqiang2.txt";
FILE*fd;FILE*fa;FILE*fb;FILE*fg;
fd=fopen(d,"a");fa=fopen(a,"a");fb=fopen(b,"a");fg=fopen(g,"a");
dt=0.01;
for(j=0;j<=99;j++)
{
if((j*dx)<0.5)
{
u[j]=0;pr[j]=1;p[j]=1;
}
else
{
u[j]=0;pr[j]=0.125;p[j]=0.1;
}
c[j]=sqrt(r*p[j]/pr[j]);
y[0][j]=u[j];y[1][j]=u[j]-c[j];y[2][j]=u[j]+c[j];
U[0][j]=pr[j];U[1][j]=u[j]*pr[j];U[2][j]=p[j]/(r-1)+pr[j]*pow(u[j],2)/2;
}
w1=FUN1(&y[0]);*w2=FUN2(&y[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
f_1[i][j]=
(*(w1+i)+j);f_2[i][j]=*(*(w2+i)+j);
}
}
for(n=1;n<=14;n++)
{
q=TIME(&f_1[0]);*s=time(&f_2[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
L_1[i][j]=
(*(q+i)+j);L_2[i][j]=*(*(s+i)+j);
L[i][j]=L_1[i][j]+L_2[i][j];
U_1[i][j]=U[i][j]+dt*L[i][j];
}
}
v=fun(&U_1[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
y[i][j]=
(*(v+i)+j);
}
}
w1=FUN1(&y[0]);*w2=FUN2(&y[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
U_11[i][j]=
(*(w1+i)+j);U_12[i][j]=*(*(w2+i)+j);
}
}

q=TIME(&U_11[0]);*s=time(&U_12[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
L_1[i][j]=
(*(q+i)+j);L_2[i][j]=*(*(s+i)+j);
L[i][j]=L_1[i][j]+L_2[i][j];
U_2[i][j]=U[i][j]*3/4+(U_1[i][j]+dt*L[i][j])*1/4;
}
}
v=fun(&U_2[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
y[i][j]=
(*(v+i)+j);
}
}
w1=FUN1(&y[0]);*w2=FUN2(&y[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
U_21[i][j]=
(*(w1+i)+j);U_22[i][j]=*(*(w2+i)+j);
}
}

q=TIME(&U_21[0]);*s=time(&U_22[0]);
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
L_1[i][j]=
(*(q+i)+j);L_2[i][j]=*(*(s+i)+j);
L[i][j]=L_1[i][j]+L_2[i][j];
U[i][j]=U[i][j]*1/3+(U_2[i][j]+dt*L[i][j])*2/3;
}
}
}
for(j=0;j<=99;j++)
{
pr[j]=U[0][j];u[j]=U[1][j]/pr[j];p[j]=(U[2][j]-U[0][j]*U[1][j]/2)*(r-1);
printf("%f,%f,%f,%fn",j*dx,u[j],pr[j],p[j]);
fprintf(fd,"%fn",j*dx);
fprintf(fa,"%fn",u[j]);
fprintf(fb,"%fn",pr[j]);
fprintf(fg,"%fn",p[j]);
}

return 0;

}
float*(TIME(float f_1[3][100]))
{
float L_1[3][100];
for(i=0;i<=2;i++)
{
L_1[i][0]=-(a_1*f_1[i][0-3+100]+a_2*f_1[i][0-2+100]+a_3*f_1[i][0-1+100]+a_4*f_1[i][0]+a_5*f_1[i][0+1]+a_6*f_1[i][0+2]);
L_1[i][1]=-(a_1*f_1[i][1-3+100]+a_2*f_1[i][1-2+100]+a_3*f_1[i][1-1]+a_4*f_1[i][1]+a_5*f_1[i][1+1]+a_6*f_1[i][1+2]);
L_1[i][2]=-(a_1*f_1[i][2-3+100]+a_2*f_1[i][2-2]+a_3*f_1[i][2-1]+a_4*f_1[i][2]+a_5*f_1[i][2+1]+a_6*f_1[i][2+2]);
for(j=3;j<=97;j++)
{
L_1[i][j]=-(a_1*f_1[i][j-3]+a_2*f_1[i][j-2]+a_3*f_1[i][j-1]+a_4*f_1[i][j]+a_5*f_1[i][j+1]+a_6*f_1[i][j+2]);
}
L_1[i][98]=-(a_1*f_1[i][98-3]+a_2*f_1[i][98-2]+a_3*f_1[i][98-1]+a_4*f_1[i][98]+a_5*f_1[i][98+1]+a_6*f_1[i][98+2-100]);
L_1[i][99]=-(a_1*f_1[i][99-3]+a_2*f_1[i][99-2]+a_3*f_1[i][99-1]+a_4*f_1[i][99]+a_5*f_1[i][99+1-100]+a_6*f_1[i][99+2-100]);
q[i]=L_1[i];
}
return q;
}
float
(time(float f_2[3][100]))
{
float L_2[3][100];
for(i=0;i<=2;i++)
{
L_2[i][0]=a_1*f_2[i][0+3]+a_2*f_2[i][0+2]+a_3*f_2[i][0+1]+a_4*f_2[i][0]+a_5*f_2[i][0-1+100]+a_6*f_2[i][0-2+100];
L_2[i][1]=a_1*f_2[i][1+3]+a_2*f_2[i][1+2]+a_3*f_2[i][1+1]+a_4*f_2[i][1]+a_5*f_2[i][1-1]+a_6*f_2[i][1-2+100];
for(j=2;j<=96;j++)
{
L_2[i][j]=a_1*f_2[i][j+3]+a_2*f_2[i][j+2]+a_3*f_2[i][j+1]+a_4*f_2[i][j]+a_5*f_2[i][j-1]+a_6*f_2[i][j-2];
}
L_2[i][97]=a_1*f_2[i][97+3-100]+a_2*f_2[i][97+2]+a_3*f_2[i][97+1]+a_4*f_2[i][97]+a_5*f_2[i][97-1]+a_6*f_2[i][97-2];
L_2[i][98]=a_1*f_2[i][98+3-100]+a_2*f_2[i][98+2-100]+a_3*f_2[i][98+1]+a_4*f_2[i][98]+a_5*f_2[i][98-1]+a_6*f_2[i][98-2];
L_2[i][99]=a_1*f_2[i][99+3-100]+a_2*f_2[i][99+2-100]+a_3*f_2[i][99+1-100]+a_4*f_2[i][99]+a_5*f_2[i][99-1]+a_6*f_2[i][99-2];
s[i]=L_2[i];
}
return s;
}
float
(fun(float A[3][100]))
{
float y[3][100];
for(j=0;j<=99;j++)
{
pr[j]=A[0][j];
u[j]=A[1][j]/pr[j];
p[j]=(A[2][j]-A[0][j]*A[1][j]/2)*(r-1);
c[j]=sqrt(r*p[j]/pr[j]);
y[0][j]=u[j];y[1][j]=u[j]-c[j];y[2][j]=u[j]+c[j];
}
for(i=0;i<=2;i++)
{
v[i]=y[i];
}
return v;
}
float
(FUN1(float B[3][100]))
{
float y_1[3][100],f_1[3][100];
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
y_1[i][j]=(B[i][j]+sqrt(pow(B[i][j],2)+pow(e,2)))/2;
}

}
for(j=0;j<=99;j++)
{
f_1[0][j]=(2*(r-1)*y_1[0][j]+y_1[1][j]+y_1[2][j])*pr[j]/(2*r);
f_1[1][j]=(2*(r-1)*u[j]*y_1[0][j]+(u[j]-c[j])*y_1[1][j]+(u[j]+c[j])*y_1[2][j])*pr[j]/(2*r);
f_1[2][j]=((r-1)*y_1[0][j]*pow(u[j],2)+y_1[1][j]*pow(u[j]-c[j],2)/2+y_1[2][j]*pow(u[j]+c[j],2)/2+(3-r)*(y_1[1][j]+y_1[2][j])*pow(c[j],2)/(2*(r-1)))*pr[j]/(2*r);
}
for(i=0;i<=2;i++)
{
w1[i]=f_1[i];
}
return w1;
}
float
(FUN2(float C[3][100]))
{
float y_2[3][100],f_2[3][100];
for(i=0;i<=2;i++)
{
for(j=0;j<=99;j++)
{
y_2[i][j]=(C[i][j]-sqrt(pow(C[i][j],2)+pow(e,2)))/2;
}

}
for(j=0;j<=99;j++)
{
f_2[0][j]=(2*(r-1)*y_2[0][j]+y_2[1][j]+y_2[2][j])*pr[j]/(2*r);
f_2[1][j]=(2*(r-1)*u[j]*y_2[0][j]+(u[j]-c[j])*y_2[1][j]+(u[j]+c[j])*y_2[2][j])*pr[j]/(2*r);
f_2[2][j]=((r-1)*y_2[0][j]*pow(u[j],2)+y_2[1][j]*pow(u[j]-c[j],2)/2+y_2[2][j]*pow(u[j]+c[j],2)/2+(3-r)*(y_2[1][j]+y_2[2][j])*pow(c[j],2)/(2*(r-1)))*pr[j]/(2*r);
}
for(i=0;i<=2;i++)
{
w2[i]=f_2[i];
}
return *w2;
}

解决方案

不关心你的算法,这个说明你的结果无限小。

解决方案二:

你调试下看看,应该是程序那个地方的计算有问题

解决方案三:

你调试下看看,应该是程序那个地方的计算有问题

解决方案四:

这个问题一般是把0作为了除数

时间: 2024-07-29 22:52:56

语言 1 # 00-C运行后老是结果等于-1.#IND00是怎么回事的相关文章

builder-C++Builder运行后,请问字体显示不全是怎么回事?

问题描述 C++Builder运行后,请问字体显示不全是怎么回事? 解决方案 C++ Builder有bug,对中文支持不是很好.将label设置大一些,不要用autosize 解决方案二: 将Label的AutoSize属性设为true即可 解决方案三: bcb6的话要设为true后在字符串后面加几个空格,XE系列已经改正了这一问题

c语言-C语言怎样编写程序运行完后,不自动结束,而是返回程序的开始的主菜单?

问题描述 C语言怎样编写程序运行完后,不自动结束,而是返回程序的开始的主菜单? 我的程序运行完一个功能后按任意键就退出了,而不是返回主菜单 代码如下,应该怎么改?(具体一点,菜鸟一个)多谢! #include #include #include #include #include #define LENTEL sizeof(tel) #define ID struct tel struct tel { char name[15]; char tele[11]; char style[15]; c

c语言编程-这段C程序设计语言书上的代码,运行后按回车只换行并没有输出最长的行,为什么

问题描述 这段C程序设计语言书上的代码,运行后按回车只换行并没有输出最长的行,为什么 #include#define MAXLINE 1000int getline(char line[]int maxline);void copy(char to[]char from[]);main(){int len;int max;char line[MAXLINE];char longest[MAXLINE];max = 0;while ((len = getline(lineMAXLINE))>0)i

c语言多线程运行后为什么值会变成这样

问题描述 c语言多线程运行后为什么值会变成这样 请问为什么运行下列程序后,gCount的值不为5,而是为一个莫名其妙的随机数啊? 如果说是多线程影响的,那毕竟加和减在两个函数里都限定死了为10000000次,那运算结果应该还是为5啊? 整个运行机制到底是怎样的? 求大神解答! #include #include #include volatile unsigned int gCount=5; //gCount是全局共享变量,volatile表明不进行优化 unsigned __stdcall F

为什么这段c语言代码运行后会崩溃?关于strtok函数

问题描述 为什么这段c语言代码运行后会崩溃?关于strtok函数 #include #include //strtok int main() { char *arry = "i love you China"; char *token = strtok( arry, " "); while( token != NULL) { printf("%s", token); token = strtok( NULL, " "); }

sql语句的意思还有运行后的效果

问题描述 sql语句的意思还有运行后的效果 mysql> select sno||""||sname||""||sex||""||dept||""||birth||""||age -> ""out_put"" from student; 上面的语句运行后的结果如下: 请问大神们,这是什么意思??????在线等~~~0.0 +---------+| out_

c-VS2013C语言代码无语法错误后调试窗口无显示结果的原因

问题描述 VS2013C语言代码无语法错误后调试窗口无显示结果的原因 include include int main() { int a[2],sum; a[1] = 0; a[0] = 35; sum = a[0] + a[1]; printf("%c", sum); return 0; } 解决方案 %c -> %d 在最后加上 getch() getchar() system("pause") 三者之一 解决方案二: 调试的时候,你设置断点了吗,是不是

数据-一个c语言解密的问题运行没结果

问题描述 一个c语言解密的问题运行没结果 一个解密的程序,运行的时候没有结果,错误,编译没有错误 #include #include char jiemi(char a[])//吧所有字母都向前移动5位,得出明文 { int i=0; while(a[i]!='') { if(a[i]==','||a[i]==' ') { i++; } else { a[i]=a[i]-5; i++; } } return 0; } int main()//遇到start开始输入数据,遇到end 打印数据 //

c语言-C语言调用abc(b,8);后数组元素为何没有改变

问题描述 C语言调用abc(b,8);后数组元素为何没有改变 #include "stdio.h" void abc(int a[],int n) { int i,t; for(i=0;i<n;i++) { t=a[i]; a[i]=a[n-1-i]; a[n-1-i]=t; } } main() { int b[10]={1,2,3,4,5,6,7,8,9,10}; int i,s=0; abc(b,8); // for(i=0;i<10;i++) // printf(&