C语言程序课程设计,请高手给个编码

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

#include <math.h>
#include <stdio.h>
#include <string.h>

typedef struct
{
float x;//x坐标
float y;//y坐标
}TwoD;//用结构体表示二维坐标

double area (float,float,float);//求面积函数
TwoD thirddot(TwoD,TwoD);//求三分点函数
TwoD crossdot(TwoD,TwoD,TwoD,TwoD);//求两线交点函数
float distance(TwoD,TwoD);//求两点距离函数

void main()
{
TwoD DotA,DotB,DotC;//外三角形3个点
float a,b,c,a1,b1,c1;//外,内三角形的3边
TwoD DotA1,DotB1,DotC1;//3个3分点
TwoD DotA2,DotB2,DotC2;//内三角形3个点
double s,s1,n;//外三角形面积,内三角形面积,面积比值

printf("input data please\n");
scanf("%f",&DotA.x);
scanf("%f",&DotA.y);
scanf("%f",&DotB.x);
scanf("%f",&DotB.y);
scanf("%f",&DotC.x);
scanf("%f",&DotC.y);//输入3个顶点坐标

a=distance(DotA,DotB);
b=distance(DotB,DotC);
c=distance(DotB,DotC);//求外三角形3边

if( ((a+b)<=c)||((b+c)<=a)||((a+c)<=b) )
printf("data error!\n");//输入点不能构成三角形输出error

else
{
DotA1=thirddot(DotA,DotB);
DotB1=thirddot(DotB,DotC);
DotC1=thirddot(DotC,DotA);//求三个三分点

DotA2=crossdot(DotA,DotB1,DotC1,DotB);
DotB2=crossdot(DotA1,DotC,DotC1,DotB);
DotC2=crossdot(DotA,DotB1,DotA1,DotC);//求内三角形3个顶点

a1=distance(A2,B2);
b1=distance(B2,C2);
c1=distance(A2,C2);//求内三角形3边长

s=area(a,b,c);//外三角形面积
s1=area(a1,b1,c1);//内三角形面积

n=s/s1;
printf("the scanle of their areas is %12.10f",n);//打印出比值
}
}

//求三分点函数
TwoD thirddot(TwoD DotA,TwoD DotB)
{
TwoD DotC;
DotC.x=(DotA.x+2*DotB.x)/3;
DotC.y=(DotA.y+2*DotB.y)/3;
return (DotC);
}

//求两线交点函数
TwoD crossdot(TwoD DotA,TwoD DotB,TwoD DotC,TwoD DotD)
//即AB和CD交点
{
float a,b,c,d;
TwoD DotE;
a=(DotA.y-DotB.y)/(DotA.x-DotB.x);
b=(DotC.y-DotD.y)/(DotC.x-DotD.x);
DotE.x=(DotC.y-DotA.y+a*DotA.x-b*DotC.x)/(a-b);
DotE.y=a*(DotE.x-DotA.x)+DotA.y;
return (DotE);
}

//三角形面积函数
double area(float a,float b,float c)
{
float p;
double s;
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
return (s);
}

//两点距离函数
float distance(TwoD DotA,TwoD DotB)
{
float d;
d=sqrt((DotA.x-DotB.x)*(DotA.x-DotB.x)+(DotA.y-DotB.y)*(DotA.y-DotB.y));
return (d);
}

编译通过,不过得到的n值一般是7加减十万分之几,并且对于非正三角形也成立。
作为数学的证明题,用c语言只能说证明你输入的具体数字所代表的例子的正确性,要穷举所有可能性是不可能的,c语言还不具有模糊穷举的功能。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-06-18
zw190322,你的断言被打破啦,哈哈哈哈,嘎嘎嘎嘎~

为红尘鼓掌~
第2个回答  2010-06-04
这个问题貌似得不到回答的。。。
这个完全是算法达人才能做出来的 ,