【C语言程序设计】通过3个坐标判断三角形是否成立,如果成立求出其面积和周长

输入三个坐标,判断是否能构成三角形,如果能计算出相应的周长和面积。(使用数组)

#include<stdio.h>
#include<math.h>
int main()
{
	int i,j;
	int x1,x2,x3,y1,y2,y3;//定义变量最好是有意义的,方便二次阅读
	double a,b,c,s,C,S;//c语言区分大小写
	int g[80][80];//80是可以改的,但第一个不要小于2,第二个不要小于3.
	double h,k,l;

	printf("请输入坐标:\n");
	for(i=0;i<3;i++){
			scanf("%d,%d",&g[0][i],&g[1][i]);
			getchar();        //吸收换行符 
		}
	   x1=fabs((g[0][0]-g[0][1]));   //求每点之间的x方向距离 
	   x2=fabs((g[0][0]-g[0][2]));
	   y1=fabs((g[1][0]-g[1][1]));
	   x3=fabs((g[0][1]-g[0][2]));  //求每点之间y方向距离 
       y2=fabs((g[1][0]-g[1][2]));
	   y3=fabs((g[1][1]-g[1][2]));
	   if(x1==0||x2==0||x3==0){	    //要考虑除法运算中被除数为零的情况 
		  h=x1/y1;
		  k=x2/y2;
		  l=x3/y3;
	   }else{
	   	  h=y1/x1;
	   	  k=y2/x2;
	   	  l=y3/x3;
	   } 
	   if(h==k&&h==l&&l==k){       //通过tanX或1/tanx判断三点是否在一条直线上 
	   	printf("Improssible");
	   }else{
 	    a=sqrt(pow(x1,2)+pow(y1,2)); //求三角形三边长,注意不要使用整型定义,应为开方很难正好是整数 
		b=sqrt(pow(x2,2)+pow(y2,2));
	   	c=sqrt(pow(x3,2)+pow(y3,2));  
	   	C=a+b+c;                      //C为周长 
	   	s=(a+b+c)/2;
		S=sqrt(s*(s-a)*(s-b)*(s-c));  //三角形面积公式(海伦公式),S为面积 
	    printf("%.2f,%.2f\n",C,S);
	  }
	 	return 0;
	 }

这其实是一个简单的数学题,在做这道题你要考虑以下几个问题:
(1):坐标轴上怎样的三个点不能构成三角形?
(2):如果能构成三角形,如何通过三个点求出三角形的三个边长(毕竟我们也没学过用坐标直接求三角形的边长和面积)?
(3)如何让计算机读取这三个坐标,并能在需要的时候使用它?
所以,只要能解决这几个问题,这道题就解决了。
(1):同一条直线上的三个坐标不能构成三角形。
(2):通过勾股定理,我们可以通过每两个坐标之间的x和y方向的距离差(这两个方向肯定垂直)的平方求出我们所需要的三角形的边长。
(3):二维数组可以很容易地解决这个问题,我们定义两行三列的数组a[0][x]存放x轴坐标,a[1][x]存放y轴坐标。
下面就剩下一些细节了,我想大家应该很容易就想出来了,当然方法有很多,毕竟数学上就有很多解决的方法,只要可以把数学式子换成程序代码就可以了,所以学好数学吧。另外注意一下输入坐标时的格式:x,y+回车(重复3次)。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

稻田鼠.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值