这是我函数中的一个循环,哪位亲帮我看看哪出了问题
for(i=0;i<144;i++)
{
int n=i/12;
double x0=0.0;double z0=n*3.0+1.5;//射线始点
//double x=x0;double z=z0;//转换点
if(ray[i].slope>0.0)
{
double X1[13]={0.0};double Z1[13]={0.0};//用纵向线截得的点到射线始点的长度
double X2[13]={0.0};double Z2[13]={0.0};//用横向线截得的点到射线始点的长度
int temp1=n,temp2=0;//z方向和x方向控制参数
double x=x0;double z=z0;//转换点
while(temp1<12&&temp2<9)
{
Z2[temp1]=(temp1+1)*3.0;X2[temp1]=(Z2[temp1]-z0)/ray[i].slope;
X1[temp2]=(temp2+1)*5.0;Z1[temp2]=(temp2+1)*5.0*ray[i].slope;
if(temp2*5.0<X2[temp1]&&X2[temp1]<(temp2+1)*5.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X2[temp1]-x,2.0)+pow(Z2[temp1]-z,2.0));
x=X2[temp1];z=Z2[temp1];temp1++;
}
else if(temp1*3.0<Z1[temp2]&&Z1[temp2]<(temp1+1)*3.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X1[temp2]-x,2.0)+pow(Z1[temp2]-z,2.0));
x=X1[temp2];z=Z1[temp2];temp2++;
}
}
}
我想通过while循环,当if判断语句成立的时候,求出a[][],并使temp1或temp2加一,但程序中while不执行,我c编程不好。烦劳哪位帮帮我实现这个循环啊!
谢谢啦
首先调试下里面的if有没有走进去,因为只有它们进去了,temp才会累加
这么看有点混淆,没运行,不知道我理解的对不对,仅供参考
第一次进while循环的时候,temp1,temp2都是0;
if(temp2*5.0<X2[temp1]&&X2[temp1]<(temp2+1)*5.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X2[temp1]-x,2.0)+pow(Z2[temp1]-z,2.0));
x=X2[temp1];z=Z2[temp1];temp1++;
}
else if(temp1*3.0<Z1[temp2]&&Z1[temp2]<(temp1+1)*3.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X1[temp2]-x,2.0)+pow(Z1[temp2]-z,2.0));
x=X1[temp2];z=Z1[temp2];temp2++;
}
这两个if就都没有进去,因为这两个if都是0=0
那么temp1,temp2就都没有++;
没理解错的话,这个程序会出现死循环,temp1,temp2永远都是等于0
if语句没有走进去怎么办?
不执行,就是条件没满足,你怎么不调试呢
#include
#include
//#include"utilities.h"
struct date
{
double begin;
double end;
double slope;
double length;
}ray[144];
void main()
{
FILE *fp,*fp1;
printf("asd");
int i,j,k;
for(i=0;i<12;i++)
for(j=0;j<12;j++)
{
ray[12*i+j].begin=1.5+3.0*i;
ray[12*i+j].end=1.5+3.0*j;
ray[12*i+j].slope=(ray[12*i+j].end-ray[12*i+j].begin)/45.0;
ray[12*i+j].length=sqrt(45*45+pow(fabs(ray[12*i+j].begin-ray[12*i+j].end),2.0));
}
// fp=fopen("射线.txt","w");
for(i=0;i<144;i++)
{
fprintf(fp,"%d\t%f\t%f\t%f\t%f\n",i+1,ray[i].begin,ray[i].end,ray[i].slope,ray[i].length);
// printf("%d\t%f\t%f\t%f\t%f\n",i+1,ray[i].begin,ray[i].end,ray[i].slope,ray[i].length);
}
double a[144][108]={0.0};
for(i=0;i<144;i++)
{
for(j=0;j<12;j++)
{
for(k=0;k<9;k++)
{
int n=i/12;
if(ray[i].slope==0.0)
{
a[i][9*n+k]=5.0;
}
else a[i][9*j+k]=0.0;
//printf("%f\n",a[i][9*j+k]);
}
}
}
for(i=0;i<144;i++)
{
int n=i/12;
double x0=0.0;double z0=n*3.0+1.5;//射线始点
//double x=x0;double z=z0;//转换点
if(ray[i].slope>0.0)
{
double X1[13]={0.0};double Z1[13]={0.0};//用纵向线截得的点到射线始点的长度
double X2[13]={0.0};double Z2[13]={0.0};//用横向线截得的点到射线始点的长度
int temp1=n,temp2=0;//z方向和x方向控制参数
double x=x0;double z=z0;//转换点
while(temp1<12&&temp2<9)
{
Z2[temp1]=(temp1+1)*3.0;X2[temp1]=(Z2[temp1]-z0)/ray[i].slope;
X1[temp2]=(temp2+1)*5.0;Z1[temp2]=(temp2+1)*5.0*ray[i].slope;
if(temp2*5.0<X2[temp1]&&X2[temp1]<(temp2+1)*5.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X2[temp1]-x,2.0)+pow(Z2[temp1]-z,2.0));
x=X2[temp1];z=Z2[temp1];temp1++;
}
else if(temp1*3.0<Z1[temp2]&&Z1[temp2]<(temp1+1)*3.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X1[temp2]-x,2.0)+pow(Z1[temp2]-z,2.0));
x=X1[temp2];z=Z1[temp2];temp2++;
}
}
}
if(ray[i].slope<0.0)
{
double X1[13]={0.0};double Z1[13]={0.0};
double X2[13]={0.0};double Z2[13]={0.0};
int temp1=n,temp2=0;
double x=x0;double z=z0;//转换点
while(temp1>=0&&temp2<9)
{
Z2[temp1]=temp1*3.0;X2[temp1]=(z0-Z2[temp1])/ray[i].slope;
X1[temp2]=(temp2+1)*5.0;Z1[temp2]=(temp2+1)*5.0*ray[i].slope;
if(temp2*5.0<X2[temp1]&&X2[temp1]<(temp2+1)*5.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X2[temp1]-x,2.0)+pow(Z2[temp1]-z,2.0));
x=X2[temp1];z=Z2[temp1];
temp1--;
}
else if(temp1*3.0<Z1[temp2]&&Z1[temp2]<(temp1+1)*3.0)
{
a[i][temp1*9+temp2]=sqrt(pow(X1[temp2]-x,2.0)+pow(Z1[temp2]-z,2.0));
x=X1[temp2];z=Z1[temp2];
temp2++;
}
}
}
}
fp1=fopen("a[][].txt","w");
for(i=0;i<144;i++)
{
for(j=0;j<12;j++)
{
for(k=0;k<9;k++)
{
// printf("%f\n",a[i][9*j+k]);
fprintf(fp1,"%f\n",a[i][9*j+k]);
}
}
}
fclose(fp1);
}