输入三个坐标,判断是否能构成三角形,如果能计算出相应的周长和面积。(使用数组)
#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次)。