㈠ 用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兩個數組中,如下圖所示。