这题跟476差别不多,只多一个存储圆形,计算点到圆心的距离并和半径比较,判断是否在圆内
#include<stdio.h>//思路跟476基本一样,而且本题代码可以解476,不同之处在于本题要多一个结构体储存circle
#include<string.h>
#include<stdlib.h>
#include<math.h>
struct rec{
int f;
double x1,y1,x2,y2;
};
struct cir{
int f;
double r,x,y;
};
int main()
{
struct rec r[20];
struct cir c[20];
int i=0,lenr=0,j=1,k,flag,lenc=0;
double x[10000],y[10000],temp;
char str[5];
for(k=0;k<20;k++)
r[k].f=c[k].f=0;
while(scanf("%s",str),strcmp(str,"*"))
{
if(strcmp(str,"r")==0)//这个储存rectangle的descriptions
{
scanf("%lf%lf%lf%lf",&r[lenr].x1,&r[lenr].y1,&r[lenr].x2,&r[lenr].y2);
if(r[lenr].y1>r[lenr].y2)
{
temp=r[lenr].y1;
r[lenr].y1=r[lenr].y2;
r[lenr].y2=temp;
}
if(r[lenr].x1>r[lenr].x2)
{
temp=r[lenr].x1;
r[lenr].x1=r[lenr].x2;
r[lenr].x2=temp;
}
r[lenr].f=j;
lenr++;
}
else {
scanf("%lf%lf%lf",&c[lenc].x,&c[lenc].y,&c[lenc].r);
c[lenc].f=j;
lenc++;//接收circle 的descriptions
}
j++;//j是给图形编号
}
while(scanf("%lf%lf",&x[i],&y[i]),(x[i]!=9999.9)||(y[i]!=9999.9))
i++;
for(j=0;j<i;j++)
{
flag=0;
for(k=0;k<lenr;k++)
{
if((x[j]>r[k].x1)&&(x[j]<r[k].x2)&&(y[j]>r[k].y1)&&(y[j]<r[k].y2))
{
printf("Point %d is contained in figure %d\n",j+1,r[k].f);
flag=1;
}
}
for(k=0;k<lenc;k++)
{
if(sqrt(pow((c[k].x-x[j]),2)+pow((c[k].y-y[j]),2))<c[k].r)
{
printf("Point %d is contained in figure %d\n",j+1,c[k].f);
flag=1;
}
}
if(flag==0)
printf("Point %d is not contained in any figure\n",j+1);
}//类似476,依次判断并输出
system("pause");
return 0;
}