给定平面上任意三个点的坐标(x​1,y​1)、(x​2​​ ,y​2​​)、(x​3​​ ,y​3​​),检验它们能否构成三角形

给定平面上任意三个点的坐标(x​1,y​1)、(x​2​​ ,y​2​​)、(x​3​​ ,y​3​​),检验它们能否构成三角形。

输入:在一行中顺序给出六个[−100,100]范围内的数字,即三个点的坐标x​1,y​1,x​2​​ ,y​2​​,x​3​​ ,y​3​​
输出:若这3个点不能构成三角形,则在一行中输出“Impossible”;若可以,则在一行中输出该三角形的周长和面积,格式为“L = 周长, A = 面积”,输出到小数点后2位。

写代码前理清思路

Impossible存在两种可能性
(1) 3个点的连线不相交,说明有2条平行
(2) 3个边不满足2条边大于第3边
知道这个之后开始写代码

#include<stdio.h>
#include<math.h>
int main(void)
{
	int i;
	double x[6], a,b,c,p; // x[6],输入3个坐标
	for (i=0; i<6; i++)
	{
		scanf("%lf", &x[i]);
	}
	//第1个impossible
	if( (x[1]-x[3])/(x[0]-x[2])==(x[1]-x[5])/(x[0]-x[4]) || (x[1]-x[5])/(x[0]-x[4])==(x[3]-x[5])/(x[2]-x[4]) || (x[3]-x[5])/(x[2]-x[4])==(x[1]-x[3])/(x[0]-x[2]) ) //斜率一样不能 
	//(x[1]-x[3])/(x[0]-x[2]) 两点之间的斜率,也可以给斜率赋值,更加美观
	// 例如 : y1 = (x[1]-x[3])/(x[0]-x[2]); 
	//y2 = (x[1]-x[5])/(x[0]-x[4]); 
	//y3 = (x[3]-x[5])/(x[2]-x[4]); 
	{
		printf("Impossible\n");	
		return 0;
	}
	//三边
	a = sqrt(pow(x[0]-x[2],2)+pow(x[1]-x[3],2));
	b = sqrt(pow(x[0]-x[4],2)+pow(x[1]-x[5],2));
	c = sqrt(pow(x[2]-x[4],2)+pow(x[3]-x[5],2));
	if ((a+b>c) || (a+c)>b || (b+c)>a)
	{
		p = 1.0/2*(a+b+c);//海伦公式
		printf("L = %.2lf, A = %.2lf\n",a+b+c, sqrt((p*(p-a)*(p-b)*(p-c))));
	}
	//第2个
	else 
		printf("Impossible\n");	
	return 0;
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值