chen462575650 发表于 2014-9-29 16:59:31

大神求助啊!!!程序一直崩溃

请!大神帮忙,小弟的需求是,随机产生圆(x,y,r),横纵坐标和半径,让每个圆相互不相交。 谢谢啦!急急急!

#include <stdio.h>
#include <stdlib.h>                  //生成随机数用
#include <time.h>                  //利用时间生成种子
#include <math.h>                  
struct Parameter
{
      double x;
      double y;
      double r;
      struct Parameter *next;
};
Parameter *head,*p,*p1;
#define LEN sizeof(Parameter)
int n=1;
int Cross(double ,double ,double );
int Distance(double ,double ,double);
void main()
{
    double a,sum=0.00;
      int num,i;
      FILE *fp;
      printf("input the num:");
      scanf("%d",&num);
      if(!(fp=fopen("data.txt","w+")))
      {
                printf("error!\n");
                exit(0);
      }
      srand(time(NULL));         //生成种子
      for(;n<=num;n++)
      {
               
                for(i=0;i<3;i++)
                {
                        a=(rand()%100)/100.00;      
                }
                if(a>a/2.00||a>a/2.00)
                        continue;
                if(!Distance(a,a,a))
                {
                        --n;
                        continue;
                }
                printf("%0.2f,%0.2f,%0.2f\n",a,a,a);                        
                fprintf(fp,"\t<geom_object>\n");
                fprintf(fp,"\t\t<cylinder label = ”gp%d“>\n",n);
                fprintf(fp,"\t\t\t<bottom>[%0.2f,%0.2f,.0]</bottom>\n",a,a);
                fprintf(fp,"\t\t\t<top>[%0.2f,%0.2f,.05]</top>\n",a,a);
                fprintf(fp,"\t\t\t<radius> %0.2f </radius>\n",a);
                fprintf(fp,"\t\t</cylinder>\n");
                fprintf(fp,"\t\t<res></res>\n");
                fprintf(fp,"\t\t<velocity></velocity>\n");
                fprintf(fp,"\t\t<temperature>12</temperature>\n");
                fprintf(fp,"\t</geom_object>\n");
      }
      printf("\nnum = %d\n",--n);
      fclose(fp);
}

int Distance(double x,double y,double r)
{
      p=(Parameter *)malloc(sizeof(LEN));
      if(1==n)
      {               
                head=p;
                p->x=x;
                p->y=y;
                p->r=r;
      }      
      else
      {
                if(!Cross(x,y,r))
                {
                        free(p);
                        return 0;
                }
                p1->next=p;
                p->x=x;
                p->y=y;
                p->r=r;
      }
      p1=p;
      p1->next=NULL;
      return 1;
}
int Cross(double x,double y,double r)
{
      int i;
      Parameter *p2;
      for(p2=head,i=1;i<n;i++,p2=p2->next)
      {
                if((x - p2->x)*(x - p2->x)+(y - p2->y)*(y - p2->y) < (r + p2->r)*(r + p2->r))
                        return 0;
      }
      return 1;
}

bbddbb123 发表于 2014-9-30 22:58:44

你把错误报告一起贴上来啊,你这程序让我们分析要很久啊

chen462575650 发表于 2014-10-1 10:38:05

bbddbb123 发表于 2014-9-30 22:58
你把错误报告一起贴上来啊,你这程序让我们分析要很久啊

您好!
      程序一运行就直接崩溃掉了·不会出现报告的·
程序实现的功能很简单,就是随机生成x,y,r(x坐标,y坐标以及半径r),并且生成出相互不相交的圆 ,其中的fprintf部分可以不看,是我写入文件的内容而已!感谢大神了!!!

bbddbb123 发表于 2014-10-6 09:13:30

我手头没有编译器,也没法测试,不好意思。如果程序一运行就直接崩溃掉了,一般是逻辑错误,编译器不容易检测出来

大个的糖果 发表于 2014-11-1 03:38:32

页: [1]
查看完整版本: 大神求助啊!!!程序一直崩溃