问题描述:
三角形计算 设有任意正三角形 ABC,其三条边 BC、CA,AB 上分别有一点 A1、B1、C1, 而且有 AC1=2C1B,BA1=2A1C,CB1=2B1A。编制程序验证由线段 AA1、BB1、 CC1 相交而成的三角形A2B2C2 的面积是正三角形 ABC 的面积的七分之一。

使用的方法是:画图的方法使用坐标进行证明。
在运行程序之前需要在https://easyx.cn/网站*载下**easyx并安装
代码:
#include<stdio.h>
#include<math.h>
#include<graphics.h>
#include <Windows.h>
#include <conio.h>
void pint();
void prove();
void main()
{
pint(); /*调用画图函数画出图形*/
prove(); /*调用证明函数进行证明*/
}
void pint()
{
float a;
printf("请输入要给画图的系数:a="); //一般这里输入1
scanf("%f",&a); /*a为一个比例系数,以实现任意正三角形*/
initgraph(500,500); /* 图形方式初始化*/
cleardevice(); /*清屏*/
line(0,0,0,300*a);
line(0,300*a,259.8*a,150*a);
line(259.8*a,150*a,0,0);
line(0,0,173.2*a,200*a);
line(0,300*a,86.6*a,50*a);
line(259.8*a,150*a,0,200*a); /*画出题目要求的各边*/
_getch();//等待按下任意键
closegraph(); /*关闭图形方式*/
}
void prove() /*在证明过程中比例系数a用1便于计算*/
{
float A[]={0,300} , A1[]={86.6,50},
B[]={259.8,150} , B1[]={0,200},
C[]={0,0} , C1[]={173.2,200},
D[2] , D1[2];/*用数组表示各点坐标*/
float x,x1,y,y1,z,SABDD1,DD1,SDD1,e;
printf(" BB1:(y-200)=-50/259.3*x\n CC1:y=200/173.2*x\n D是BB1 和CC1的交点\n so: ");
x=200/(200/173.2+50/259.8);
y=200/173.2*x;
printf("D[]={%7f,%7f}\n",x,y); /*列方程求出BB1,CC1交点D*/
printf(" BB1:(y-200)=-50/259.3*x\n AA1:(y-300)=(300-50)/86.6*x\n D1 BB1和AA1的\n so: ");
x1=100/((300-50)/86.6-50/259.8);
y1=200-50/259.8*x;
printf("D1[]={%7f,%7f}\n",x1,y1);/*列方程求出BB1,AA1交点D1*/
z=sqrt(3);
SABDD1=150*150*z; /*用面积公式求出大三角形面积*/
DD1=sqrt((148.428-37.114)*(148.428-37.114)+(192.857-171.395)*(192.857-171.395)); /*用代数方法算出小三角形边长DD1*/
SDD1=DD1*DD1*z/4; /*用面积公式求出小三角形面积*/
e=SABDD1/SDD1; /*e代表大小面积比*/
printf("%f\n%11f\n%11f\n%11f\n%10f\n",z,SABDD1,DD1,SDD1,e);
if(fabs(e-7)<=0.1) /*将误差限制在0.1以内*/
{ printf("sucess\n"); } /*在误差范围内则得证*/
else
printf("请检查该功能,然后重新执行"); /*超出误差范围则进行人工检查再次证明*/
}