大神求助啊!!!程序一直崩溃
请!大神帮忙,小弟的需求是,随机产生圆(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
你把错误报告一起贴上来啊,你这程序让我们分析要很久啊
您好!
程序一运行就直接崩溃掉了·不会出现报告的·
程序实现的功能很简单,就是随机生成x,y,r(x坐标,y坐标以及半径r),并且生成出相互不相交的圆 ,其中的fprintf部分可以不看,是我写入文件的内容而已!感谢大神了!!! 我手头没有编译器,也没法测试,不好意思。如果程序一运行就直接崩溃掉了,一般是逻辑错误,编译器不容易检测出来
页:
[1]