急死小弟我了!为什么程序算不出结果啊

急死我了!为什么程序算不出结果啊?
我做毕业设计编了一个比较复杂的C程序,编译时没有出错,自己也检查不出什么问题,可是一运行程序CPU使用率就升到100%,等了十几分钟还是出不了结果,请问这是什么原因?该怎么解决呢?

程序里计算比较复杂,用到比较多的指数、开方、三角和复数运算,还包括一个求积分的运算,我把各部分计算分成十几个函数,放在主函数里调用

------解决方案--------------------
1、死循环
2、算法复杂度(一个函数计算次数太多)
建议你debug到每个函数尾部,看看哪个函数循环不出来
------解决方案--------------------
大的算法程序跑成这样也是可能的。

你得自己分析一下,
是否是正常现象 ...
------解决方案--------------------
CPU使用率100%多半是进入了死循环!建议检查循环条件!
------解决方案--------------------
支持---回复人:carp27() ( 一级(初级)) 信誉:100 2007-05-21 17:41:39 得分:0
?
1、死循环
2、算法复杂度(一个函数计算次数太多)
建议你debug到每个函数尾部,看看哪个函数循环不出来
---------------
3.里面的嵌套尽量的少,调用是也尽量少的调用?
------解决方案--------------------
在每个循环前加个输出语句,输出到屏幕或文件都得,一但卡死就强制结束进程,快速定位死循环。
------解决方案--------------------
请注意//!!!!!!!!!!!!!!!的内容: 要把你的x(sita)传递给被积函数!
自己再检查有没有相似的错误!

double qromb(IntegrFunc f, void* fParm, double a, double b)
{
double ss,dss;
double s[JMAXP],h[JMAXP+1];
int j;

double sita = ((funcParam*)fParm)-> sita;
((funcParam*)fParm)-> sita =a;
double fa = f(fParm); //!!!!!!!!!!!!!!!!!!!注意不是&fParm
((funcParam*)fParm)-> sita =b;
double fb = f(fParm); //!!!!!!!!!!!!!!!!!!!注意不是&fParm
((funcParam*)fParm)-> sita =sita;

h[1]=1.0;
for (j=1;j <=JMAX;j++)
{
s[j]=trapzd(f,fParm,a,b,j);
P( "s[j]=%d ",s[j]);
if (j> =K)
{
polint (&h[j-K],&s[j-K],K,0.0,&ss,&dss);
if (fabs(dss) <= EPS*fabs(ss))
return ss;
}
h[j+1]=0.25*h[j];
P( "ss=%f ",ss);
}
nrerror( "Too many stepsin routine qromb ");
return 0.0;
}

double trapzd(IntegrFunc f, void* fParm,double a,double b,int n)
{
double tnm,sum,del;
static double s;
int it,j;
double x = ((funcParam*)fParm)-> sita;
if (n==1)
{
funcParam pa = *fParm; //!!!!!!!!!!!!!!!!!!!!
funcParam pb = *fParm; //!!!!!!!!!!!!!!!!!!!!
pa.sita = a; //!!!!!!!!!!!!!!!!!!!!!
pb.sita = b; //!!!!!!!!!!!!!!!!!!!!!
return (s=0.5*(b-a)*((*f)(&pa)+(*f)(&pb))); //!!!!!!!!!!!!!!
}
else
{
funcParam px = *fParm;//!!!!!!!!!!!!!!!!!!!!!!!

for (it =1,j=1;j <n-1;j++)
it < <=1;
tnm=it;
del=(b-a)/tnm;
x=a+0.5*del;
for (sum=0.0,j=1;j <=it;j++,x+=del) {
px.sita = x; //!!!!!!!!!!!!!!!!!!!!
sum+=(*f)(&px); //!!!!!!!!!!!!!!!!!!!!
}
s=0.5*(s+(b-a)*sum/tnm);
return s;
}
}
------解决方案--------------------
1.晕倒,用特殊值法。就可以判断是否是算法问题
2.如果特殊值法计算不出,就是程序问题。用断点debug啊