急!帮忙看一下程序,问题在哪
我这个程序编译通过了,但运行时说jingti.exe遇到错误要关闭什么的,请看一下是什么问题。int X,Y,Z;
float x,y,z,x1,y1,r,h;
#include <stdio.h>
void jingti(float c[][4]) //晶体的子程序,其中X,Y,Z为晶体三个方向的晶胞数
{ float (*p)[4];
int i,j;
for(i=0;i<12;i++)
{c[i][1]=c[i][1]*7.41;
c[i][2]=c[i][2]*4.94;
c[i][3]=c[i][3]*2.54;
}
p=c;
for(i=0;i<12;i++)
{for(j=0;j<4;j++)
*(*(p+i)+j)=c[i][j];}
for(i=0;i<12*X-12;i++) //x坐标增加
{*(*(p+i+12)+0)=*(*(p+i)+0);
*(*(p+i+12)+1)=*(*(p+i)+1)+7.41;
*(*(p+i+12)+2)=*(*(p+i)+2);
*(*(p+i+12)+3)=*(*(p+i)+3);}
for(i=0;i<12*X*Y-12*X;i++) //y坐标增加
{*(*(p+i+12*X)+0)=*(*(p+i)+0);
*(*(p+i+12*X)+1)=*(*(p+i)+1);
*(*(p+i+12*X)+2)=*(*(p+i)+2)+4.94;
*(*(p+i+12*X)+3)=*(*(p+i)+3);}
for(i=0;i<12*X*Y*Z-12*X*Y;i++) //z坐标增加
{*(*(p+i+12*X*Y)+0)=*(*(p+i)+0);
*(*(p+i+12*X*Y)+1)=*(*(p+i)+1);
*(*(p+i+12*X*Y)+2)=*(*(p+i)+2);
*(*(p+i+12*X*Y)+3)=*(*(p+i)+3)+2.54;}
return;
}
void c_qiu(float b[][4],int n) //求C60球指定位置坐标的子程序,x,y,z为指定的球心坐标
{
float k,l,m;
int i;
k=0.0;
l=0.0;
m=0.0;
for(i=0;i<n;i++) //求C60的原始球心
{k=k+b[i][1];
l=l+b[i][2];
m=m+b[i][3];}
k=k/n;
l=l/n;
m=m/n;
for(i=0;i<n;i++) //球心移到(x,y,z)处
{b[i][1]=b[i][1]+x-k;
b[i][2]=b[i][2]+y-l;
b[i][3]=b[i][3]+z-m;}
return;
}
void wadong(float a[][4]) //在晶体上挖去一个圆柱体
{int i;
float (*p)[4];
//float x1,y1,r,h;
jingti(a);
for(i=0;i<12*X*Y*Z;i++)
if(((*(*(p+i)+1)-x1)*(*(*(p+i)+1)-x1)+(*(*(p+i)+2)-y1)*(*(*(p+i)+2)-y1)-r*r)<=1e-6&&(*(*(p+i)+3))>h)
{*(*(p+i)+0)=0;
*(*(p+i)+1)=0;
*(*(p+i)+2)=0;
*(*(p+i)+3)=0;}
return;
}
void main()
{float (*p)[4];
float a[12][4],b[60][4]; /*s[12*X*Y*Z][4]*/
int i,j;
FILE *fp;
p=a;
printf("输入晶体个方向晶胞数:\n");
scanf("%d %d %d",X,Y,Z);
printf("\n");
printf("输入所挖圆柱体的圆心、半径及高度:\n");
scanf("%f %f %f",x1,y1,r,h);
printf("\n");
printf("输入C60球指定的坐标:\n");
scanf("%f %f %f",x,y,z);
printf("\n");
/*fp=fopen("test.xyz","r+");
fscanf(fp,"%d %d %d ",&X,&Y,&Z);
fscanf(fp,"%f %f %f %f %f %f %f",&x,&y,&z,&x1,&y1,&r,&h);
fprintf(fp,"\n");}*/
fp=fopen("jingbao.xyz","r+");
for(i=0;i<12;i++)
{for(j=0;j<4;j++)
fscanf(fp,"%f",&a[i][j]);
fprintf(fp,"\n");}
p=a;
jingti(a); //调用晶体坐标的子程序
fp=fopen("C60.xyz","r+");
for(i=0;i<60;i++)
{for(j=0;j<4;j++)
fscanf(fp,"%f",&b[i][j]);
fprintf(fp,"\n");}
c_qiu(b,60); //调用求C60指定位置坐标的子程序,可任意设定球心位置
wadong(a); //调用挖洞的子程序,调用时可任意设定所挖圆柱体的位置和大小
fp=fopen("JINGTI.xyz","w+");
for(i=0;i<12*X*Y*Z;i++)
{for(j=0;j<4;j++)
fprintf(fp,"%10.6f",*(*(p+i)+j));
fprintf(fp,"\n");}
for(i=0;i<60;i++)
{for(j=0;j<4;j++)
fprintf(fp,"%10.6f",b[i][j]);
fprintf(fp,"\n");}
fclose(fp);
}