【C语言入门题】计算平面点与圆之间的关系

定义一个结构类型来表示二维空间中一个点(横坐标、纵坐标),并借助点的结构再定义一个结构类型来表示二维空间中的一个圆。使用上述两个结构类型,按照如下要求编写各子函数定义,计算平面点与圆之间的关系。

  1. 判断一个点是否在一个圆内;
  2. 计算一个点与圆之间的距离(该点与圆周上最近一点之间的距离);
  3. 计算两个圆之间的距离;
#include <stdio.h>
#include <math.h>

typedef struct
{
	double x;//横坐标
	double y;//纵坐标
}POINT;//定义点结构体

typedef struct
{
	double r;
	double x;
	double y;
}CIRCLE;//定义圆结构体

int Judge(POINT p,CIRCLE c1,double *d);
double Distance1(POINT p,CIRCLE c1);
double Distance2(CIRCLE c1,CIRCLE c2);//声明各子函数

int main()
{
	POINT point;
	CIRCLE circle1,circle2;
	double distance;
	
	printf("输入点的坐标:");
	scanf("%lf%lf",&(point.x),&(point.y));
	printf("输入圆1的半径与圆心:");
	scanf("%lf%lf%lf",&(circle1.r),&(circle1.x),&(circle1.y));
	printf("输入圆2的半径与圆心:");
	scanf("%lf%lf%lf",&(circle2.r),&(circle2.x),&(circle2.y));
	
	if (Judge(point,circle1,&distance))//调用函数Judge
		{
	        printf("点在圆内。\n");//如果函数结果为真,输出结果“点在圆内”
	    } 
	else
		{
	        printf("点不在圆内。”\n");//反之输出“点不在圆内”
	    }
	printf("点与圆1之间的距离为:%f\n",Distance1(point,circle1));//调用函数Distance1
	printf("两个圆之间的距离为:%f\n",Distance2(circle1,circle2));//调用函数Distance2
	return 0;
}

/*
采用0和1来表示真假,返回值为int型数据,根据函数定义原则2将函数头定为int
*/
int Judge(POINT p,CIRCLE c1,double *d)
{
	*d=sqrt(pow(p.x - c1.x, 2) + pow(p.y - c1.y, 2));
	//先调用pow函数计算出p.x - c1.x和p.y - c1.y, 2的二次方,然后调用sqrt函数计算出平方根,并将结果赋值给指针变量d
	if(*d<=c1.r)
	{
		return 1;//如果*d<=c1.r,判断为真,返回1
	}
	else
	{
		return 0;//反之为假,返回0
	}
}

double Distance1(POINT p,CIRCLE c1)//返回值为double型数据,根据函数定义原则2将函数头定为double
{
	return sqrt(pow(p.x - c1.x, 2) + pow(p.y - c1.y, 2))-c1.r;
}

double Distance2(CIRCLE c1,CIRCLE c2)//返回值为double型数据,根据函数定义原则2将函数头定为double
{
	return sqrt(pow(c2.x - c1.x, 2) + pow(c2.y - c1.y, 2))-c1.r-c2.r;
}

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值