| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 371 人关注过本帖
标题:急!帮忙看一下程序,问题在哪
只看楼主 加入收藏
yjm041441055
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-11-18
结帖率:0
收藏
 问题点数:0 回复次数:3 
急!帮忙看一下程序,问题在哪
我这个程序编译通过了,但运行时说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);
}
2009-11-19 19:44
woshishanjim
Rank: 1
等 级:新手上路
帖 子:8
专家分:1
注 册:2009-11-16
收藏
得分:0 
我不懂  看没人回答  帮你顶下
2009-12-26 16:54
风之上位
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:55
专家分:156
注 册:2009-12-20
收藏
得分:0 
能说明下你的程序是要实现什么目的的吗
2009-12-26 17:06
wufei1989121
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:39
专家分:113
注 册:2009-11-13
收藏
得分:0 
自己看一下个是缓冲区的问题
2009-12-26 18:12
快速回复:急!帮忙看一下程序,问题在哪
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016945 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved