㈠ 用c语言程序设计,求代码
提供两种思路,这里只给思路不给代码,因为网络知道现在似乎贴代码格式会乱,而且自己写代码更容易进步。
第一种暴力的方法:遍历所有格点,用勾股定理算出三条边长度,用海伦公式算出面积。
勾股定理这个大家都会。海伦公式可以通过三边长度算出三角形面积。
海伦公式大致内容:令 p = ( a + b + c ) / 2 ,则 S = sqrt [ p ( p - a ) ( p -b ) ( p - c ) ] 。
(之前题目看错了。。重新写一遍这个方法
暴力的方法在 9×9 的范围内当然跑得快,但是如果题目加强,让你在 10^7×10^7 的方格内找好点,你怎么找?
第二种方法:根据面积相等和底边长度关系,可以求出高的比值,然后设出其中一条高的长度,就能得到另一条高的长度。然后写出两个直线方程并联立,可以得到一个新的方程。这个方程的图象上的整点就是好点。
听起来有点绕,拿这道题做例子就好理解了。
设 △PAB 的高为 a (为了方便记作条件①),则 △PAC 的高为 2a (条件②)。
以方格左下角为原点建系,可以写出满足条件①的直线解析式 y = x + √2 a 。
同理满足条件②的直线解析式为 y = 12 - x - 2√2 a 。(这里 a 的系数可正可负,篇幅原因只算一种,另一种后面代入一遍就好了)
联立可得 P 坐标为 ( 6 - 3√2/2 a, 6 - √2/2 a )。
根据坐标式子和题目性质可得 P 图象必定过 A( 6, 6 ),并且图象是一条直线。
设 P : y = k ( x - 6 ) + 6 ,代入坐标解得 k = 1/3 。
所以 P 在直线 y = 1/3 x + 4 上。
同理,P 也在直线 y = 3 x - 12 上。
然后把所有横坐标代入就好啦,复杂度直接少了一阶。(事实上还可以继续优化,不过这样已经很优了)
㈡ 用C语言编写 在平面上,穿过两个点(x1,y1)和(x2,y2)的直线是由下面的方程定义的:
p1和p2的坐标代入直线方程中,得到:
c1=a*x1+b*y1;
c2=a*xx2+by2;
如果c1和c2都小于c 或者c1和c2都大于c说明两个点位于直线的同一侧。
主要是数学问题,高中数学。
㈢ C语言输入三个点的坐标A(x1,y1),B(x2,y2),C(x3,y3)。判断这三个点能否构成三角形
利用两点式将任意两点构建直线方程(自己排除垂直数轴),代入第三点,若等式成立则共线,否则可以构成三角形。
㈣ c语言求直线方程最简式
intgcd(inta,intb){
intk;
if(a>b){
k=a;a=b;b=k;
}
while(1){
intk=a%b;
if(k==0)returnb;
a=b;
b=k;
}
}
voidsimplify(int*coef,int*out){
intg=gcd(coef[0],coef[1]);
out[0]=coef[0]/g;
g=coef[1]/g;
out[1]=-g;
out[2]=coef[2]*g;
if(out[0]==1)printf("x");
elseprintf("%dx",out[0]);
if(out[1]==-1)printf("-y");
elseprintf("%dy",out[1]);
printf("+%d=0 ",out[2]);
}
intmain()
{
intn=0,i;
intcoef[3],out[3];
charstr[256];
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("y=%d/%dx+%d",&coef[0],&coef[1],&coef[2]);
simplify(coef,out);
}
return0;
}
㈤ C语言求两直线的交点
1、首先在打开的C语言软件中,先用for循环输入两个集合放到a、b两个数组中,如下图所示。