




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、【例5.1】求給定(i dn)三角形的外心CB圖5.1 三角形外心YXAdefOEFD輸入三個頂點坐標求垂直平分線e求垂直平分線f圖5.2 求三角形外心的PAD求e 、f交點OO點即為外心,輸出其坐標第1頁/共59頁第一頁,共60頁。 以e為例,求解(qi ji)垂直平分線圖5.3 求垂直平分線e求AC邊的中點E求AC邊的直線方程求過E點的與AC垂直的直線的直線方程第2頁/共59頁第二頁,共60頁。假設A點坐標為xa、yaB點坐標為xb、ybC點坐標為xc、ycAC邊的中點(zhn din)E的坐標為xe、yeAC邊的直線方程表示為 Y=a1*X+b1AB邊的直線方程表示為Y=a2*X+b2A
2、C邊垂直平分線e的直線方程為Y=u1*X+v1AB邊垂直平分線f的直線方程為Y=u2*X+v2第3頁/共59頁第三頁,共60頁。輸入三個頂點坐標圖5.4 求三角形外心的完整PADxo=(u2-u1)/(v2-v1);yo=u1*xo+v1;O點即為外心,輸出其坐標xe=(xa+xc)/2; ye=(ya+yc)/2;a1=(ya-yc)/(xa-xc);b1=ya-a1*xa;u1= -1/a1;v1= ye-u1*xexf=(xa+xb)/2;yf=(ya+yb)/2;a2=(ya-yb)/(xa-xb);b2=ya-a1*xa;u2= -1/a2;v2= yf-u2*xf第4頁/共59頁第
3、四頁,共60頁。#include / 括入標準輸入輸出函數庫頭文件void main( ) / 主函數float xa,ya,xb,yb,xc,yc; /分別保存三角形三個頂點的X、Y方向坐標float xe,ye;/ AC邊的中點E的坐標float xf,yf;/ AB邊的中點F的坐標float a1 , b1; / AC邊的直線(zhxin)方程系數float a2 , b2; / AB邊的直線(zhxin)方程系數float u1 , v1; / AC邊的垂直平分線的直線(zhxin)方程系數float u2 ,v2;/ AB邊的垂直平分線的直線(zhxin)方程系數float xo,y
4、o;/外心O的坐標/* 輸入三個點的X、Y方向坐標 */printf(please input xa,ya,xb,yb,xc,yc:n);scanf(%f%f%f%f%f%f,&xa,&ya,&xb,&yb,&xc,&yc);第5頁/共59頁第五頁,共60頁。/* 求AC邊垂直平分線e */xe=(xa+xc)/2; / 先求AC邊的中點Eye=(ya+yc)/2;a1=(ya-yc)/(xa-xc); /再求過A、C兩點的直線方程(fngchng)b1=ya-a1*xa; u1= -1/a1; / 求過E點的與AC垂直的直線的直線方程(fngc
5、hng)v1= ye-u1*xe;/* 求AB邊垂直平分線f */xf=(xa+xb)/2; / 先求AB邊的中點Eyf=(ya+yb)/2;a2=(ya-yb)/(xa-xb); /再求過A、B兩點的直線方程(fngchng)b2=ya-a1*xa;u2= -1/a2; / 求過F點的與AC垂直的直線的直線方程(fngchng)v2= yf-u2*xf;/* 求e,f交點O */xo=(u2-u1)/(v2-v1);yo=u1*xo+v1; /* 打印輸出 */printf(“外心坐標:x=%10.3f y=%10.3f n”,xo,yo); 計算過程一致(yzh),而參與運算的數據不同第6
6、頁/共59頁第六頁,共60頁。【例5.2】用函數改寫(gixi)例5.1的程序#include / 括入標準輸入輸出函數庫頭文件 1/* 求垂直平分線:參數:兩個頂點r、s的x、y坐標 */float aa; /全局變量,用于保存傳遞rs邊的垂直平分線的直線方程斜率 2 float lines( float xr,float yr,float xs,float ys ) /3 float xt,yt; / 中點(zhn din)T的坐標4 float a , b; / 過r、s兩點的直線方程系數5 /* 先求中點(zhn din)T */ xt=(xr+xs)/2;/6 yt=(yr+ys)/
7、2; /7 /* 再求過r、s兩點的直線方程rs */ a=(yr-ys)/(xr-xs);/8 b=yr-a*xr; /9 /* 求過中點(zhn din)T的與rs垂直的直線方程 */ aa = -1/a; /計算斜率aa 10 return yt-aa*xt; /計算截距b,并帶著b值返回11第7頁/共59頁第七頁,共60頁。void main( ) / 主函數 13 float xa,ya,xb,yb,xc,yc; /分別保存三角形三個頂點的X、Y坐標14 float u1 , v1; / AC邊的垂直平分線的直線方程系數(xsh) 15 float u2 ,v2;/ AB邊的垂直平分
8、線的直線方程系數(xsh) 16 float xo,yo;/外心O的坐標 17 /* 輸入三個點的X、Y方向坐標 346 360 416 108 116 212 */ printf(please input xa,ya,xb,yb,xc,yc:n); /18 scanf(%f%f%f%f%f%f,&xa,&ya,&xb,&yb,&xc,&yc);第8頁/共59頁第八頁,共60頁。/* 求AC邊垂直平分線e */v1=lines( xa, ya, xc, yc );/ 截距20u1=aa;/ 斜率(xil)21/* 求AB邊垂直平分線f */v2=
9、lines( xa, ya, xb, yb );/ 截距22u2=aa;/ 斜率(xil)23/* 求e,f交點O */xo= -(v2-v1)/(u2-u1); /24yo=u1*xo+v1; /25/* 打印輸出 */printf(“外心坐標:x=%10.3f y=%10.3f n”,xo,yo ); /26 第9頁/共59頁第九頁,共60頁。子程序自頂向下、逐步求精”程序設計技術的基礎 從問題的整體(最頂層)出發,向下分解問題。逐層細分,得到整個問題的解決方法使用子程序技術分離了“做什么(shn me)”與“怎么做”程序邏輯結構清晰,易寫,易讀,易懂。程序的設計,調試,維護變得容易第10
10、頁/共59頁第十頁,共60頁。5.2 函數(hnsh) 【例5.2】程序執行過程 函數概念的組成(z chn) 函數定義 函數調用 使用函數注意事項 先定義該函數(標準庫函數除外)類似于數學中的函數定義。 再在表達式中調用該函數數學中計算某函數的一個特定值。第11頁/共59頁第十一頁,共60頁。5.2.1 函數(hnsh)定義(function-declaration) 除標準庫函數外, 程序中使用函數必須先定義,然后再用“函數調用”調用它。 函數定義形式 類型(lixng)說明符 標識符 ( 參數列表 ) 復合語句第12頁/共59頁第十二頁,共60頁。float dis( float xr,
11、float yr,float xs,float ys ) return sqrt( (xr-xs)*(xr-xs)+(yr-ys)*(yr-ys); 函數(hnsh)類型函數(hnsh)名字形參列表(li bio)復合語句函數體函數定義說明符第13頁/共59頁第十三頁,共60頁。 函數定義說明符 上述形式的第一行稱“函數定義說明符”,形式如下 TT F ( 參數(cnsh)列表)具體指明以下點:函數的結果類型 由“類型說明符”( TT )標明;函數的名字 由類型說明符后的“標識符” ( F )標明;函數的形式參數(cnsh)個數和每個形式參數(cnsh)的特性 由“參數(cnsh)列表”標明。
12、第14頁/共59頁第十四頁,共60頁。 函數類型 函數的結果類型 缺省 int 類型 結果類型不能是數組類型、函數類型 函數可以是無值的,即“無類型”void 參數列表(li bio)(parameter-list) 每個參數聲明具體說明形式: 類型說明符 標識符 參數列表(li bio)形式 T id ,T id ,. ,T id 第15頁/共59頁第十五頁,共60頁。 C允許使用無參函數,無參函數的參數列表為空,或使用“空類型”的類型說明符“void” TT F() TT F (void ) 復合語句(compound-statement)由聲明和語句列表組成(z chn) 聲明部分具體的
13、說明本函數內使用的其它量; 語句部分規定在本函數中要執行的算法動作。 函數定義的形式: TT F ( T id ,T id ,. ,T id ) . 第16頁/共59頁第十六頁,共60頁。int f(int x, int y, float z)int f(int x,y ; float z)int f(int x,y , float z)第17頁/共59頁第十七頁,共60頁。5.2.2 函數調用調用過程首先順序計算實參表中各實參值然后把這些值順序傳入形參表的各個(gg)形參中最后進入函數執行復合語句。一般形式F (U, U, ,U)F ( )例子lines( xa, ya, xc, yc )l
14、ines( xa, ya, xb, yb )printf(“外心坐標:x=%10.3f y=%10.3f n”,xo,yo)第18頁/共59頁第十八頁,共60頁。主程序調用函數返回(fnhu)結束(jish)函數(hnsh)第19頁/共59頁第十九頁,共60頁。參數結合規則(guz)靜態上看,實參表中的實參與被調用函數中形參表的形參,按位置從左向右依次一一對應對應位置上的形實參間要賦值兼容各個實參的計算次序是依賴于實現的。參數結合動作計算實參表達式的值把實參的值按賦值轉換規則(guz),轉換成形參的類型。如果不能完成該轉換,則稱函數參數不一致,產生錯誤把轉換后的實參值送入形參第20頁/共59頁
15、第二十頁,共60頁。3int f (int x, int y) return x*y;void main()int a=3, b=2,x=9;int c;c=f(a+b,a+x);printf(“%dn”, c);printf(“%dn”, x);29程序(chngx)輸出為:609abx返回值xycmainf內存(ni cn)5126060第21頁/共59頁第二十一頁,共60頁。0 xyvzumainf內存(ni cn)g返回值返回值n 由左至右#include stdio.h int x,y ; int f( int z ) x=x+1 ; return (z*z); int g( int
16、 u , int v ) void main() x=0 ; g(x,f(2) ; 02144第22頁/共59頁第二十二頁,共60頁。0 xyvzumainf內存(ni cn)g返回值返回值n 由右至左#include stdio.h int x,y ; int f( int z ) x=x+1 ; return (z*z); int g( int u , int v ) void main() x=0 ; g(x,f(2) ; 12144第23頁/共59頁第二十三頁,共60頁。n 并行計算-不知道(zh do)結果n#include stdio.hn int x,y ; n int f( i
17、nt z ) n x=x+1 ; n return (z*z); n n int g( int u , int v ) n n n void main() n x=0 ; n g(x,f(2) ; n 代碼中參數值不能依賴(yli)計算次序!第24頁/共59頁第二十四頁,共60頁。 根據(gnj)參數出現的位置 形式參數函數聲明(局部于函數的變量) int f(int x,int y) return x+y; 實際參數函數調用void main() int a=2,b=3; f(a+b, b); f(2+b,3); 第25頁/共59頁第二十五頁,共60頁。 根據參數值的傳遞規則 值參當調用函數
18、時,把實參的值傳入(chun r)形參變量 變參 當調用函數時,把實參的地址值傳入(chun r)形參變量 C語言中的參數都是值參第26頁/共59頁第二十六頁,共60頁。 函數返回 返回方式: return ; return 表達式; 函數運行到復合語句末尾(mwi)(最后那個閉花括號“”)后。 例子 return sqrt( (xr-xs)* (xr-xs)+(yr-ys)* (yr-ys) ); return sqrt(s*(s-uv)*(s-uw)*(s-vw) );第27頁/共59頁第二十七頁,共60頁。n 函數(hnsh)值有返回(fnhu)類型的函數 int f (int x, i
19、nt y) if (x=y) return x; else return y;無返回(fnhu)類型的函數 void g( int w) if (w=1) return; else x=3;第28頁/共59頁第二十八頁,共60頁。有返回類型函數的函數值使用 return e; 向調用函數的主程序傳遞函數值return e ; 的執行過程是:計算表達式e的值把表達式值按賦值轉換規則,轉換成函數的結果(ji gu)類型;返回語句中表達式的類型與函數的結果(ji gu)類型必須賦值兼容。用類型轉換后的值作為函數值,并帶著它返回到調用該函數處第29頁/共59頁第二十九頁,共60頁。 無返回類型函數(h
20、nsh)的函數(hnsh)值 void g( int w) if (w=1) return; else x=3; 在函數(hnsh)調用處,所調函數(hnsh)無值可以帶回。 對于無類型函數(hnsh),在函數(hnsh)調用處不需要函數(hnsh)值,這種返回是正常的; 對于有類型函數(hnsh),在函數(hnsh)調用處極可能需要函數(hnsh)值參加下一步運算,這將帶來不可預料的結果第30頁/共59頁第三十頁,共60頁。5.2.3 先調用(dioyng)后定義函數原型為什么使用函數原型任何標識符都必須聲明(shngmng),而且必須先聲明(shngmng)后使用在聲明(shngmng)定
21、義函數時必須保證函數聲明(shngmng)位置在使用前出現從程序行文順序上控制 一般比較難實現函數原型 方便靈活第31頁/共59頁第三十一頁,共60頁。 一般(ybn)形式TT F ( T ,T ,. ,T );TT F ( T id ,T id ,. ,T id ); 例子 float f ( int, float, int, char ) ; float f ( int z, float u, int v, char w ) ;第32頁/共59頁第三十二頁,共60頁。 函數原型的功能 滿足(mnz)了C標識符先定義后使用的要求 并向編譯系統提供所調用函數的信息 函數返回類型 函數的參數個數
22、 函數參數特性等信息 程序設計風格 最好把所有函數原型集中,放在主函數之前第33頁/共59頁第三十三頁,共60頁。第34頁/共59頁第三十四頁,共60頁。程序設計(chn x sh j)實例 重寫打印字符矩陣 重寫打印100以內素數(s sh) 驗證 Pascal 定理 第35頁/共59頁第三十五頁,共60頁。重寫打印字符(z f)方陣 A B C D E F G H I A B C D E F G H I A B C D E F G H I A B B B C D E F G H I A B C D E F G H I A B C C C C C D E F G H I A B C D E
23、F G H I A B C D D D D D D D E F G H I A B C D E F G H I A B C D E E E E E E E E E F G H I A B C D E F G H I A B C D E F F F F F F F F F F FG H I A B C D E F E F G H I A B C D E E E E E E E E E F G H I A B C D E D E F G H I A B C D D D D D D D E F G H I A B C D C D E F G H I A B C C C C C D E F G H I
24、 A B C B C D E F G H I A B B B C D E F G H I A B A B C D E F G H I A B C D E F G H I A打印打印(d yn)前前 6 行行 打印打印(d yn)后后5行行xfor(x=A;x=A;x-)第36頁/共59頁第三十六頁,共60頁。void writelinex(char);void main( ) char x ;for ( x=A;x=A;x-)writelinex(x);第37頁/共59頁第三十七頁,共60頁。void writelinex(char u) / 打印(d yn)第u行char y ;int i
25、;for ( y=u; y=I;y+)printf ( “%c”, y);for ( y=A; y=u-1;y+)printf ( “%c”, y);for( i=1;i=(5-(u-A)*2; i+) printf ( “”); for( i=1;i=2*(u-A)+1;i+) printf ( “%c”, u);for( i=1;i=(5-(u-A)*2); i+)printf ( “”);for ( y=u+1; y=I;y+) printf ( “%c”, y); for ( y=A; y=u;y+) printf ( “%c”, y);printf ( “n”);第38頁/共59頁第
26、三十八頁,共60頁。重寫打印(d yn)100以內素數 for (i=2;i=2;j-)return true i%j = 0第39頁/共59頁第三十九頁,共60頁。#include “stdio.h”bool prime( int );void main( ) int i ; for ( i = 2 ;i = 2 ; j- ) if ( n%j = 0 )return false ; return true ;第40頁/共59頁第四十頁,共60頁。驗證(ynzhng) Pascal 定理 圓內接六邊形三雙對邊延線的交點(jiodin)在一條直線上ABCDEFB1B2B3讀入六個極角的值求六個
27、頂點A, B, C, D, E, F 在直角坐標系中的坐標求三雙對邊交點B1, B2, B3 坐標驗證B1, B2, B3 是否在一條直線上開始結束第41頁/共59頁第四十一頁,共60頁。 將6個點的極坐標轉換成直角坐標(zh jio zu bio) 已知極角theta,矢徑r,求一點(y din)的直角坐標(px, py)coordinatepx=r*cos(theta);py=r*sin(theta);returntrans_abcdef 轉換a xa , ya轉換b xb , yb轉換d xd , yd 轉換f xf , yf轉換e xe , ye轉換c xc , ycreturn第42
28、頁/共59頁第四十二頁,共60頁。 求交點(jiodin)B1,B2,B3的坐標 已知四點r, s, t, u求兩條直線(zhxin)交點Bthree_inter求AB 、DE交點B1求BC 、EF交點B2求CD 、FA交點B3returnintersection 求r, s ; t, u直線方程l1, l2求l1、l2交點Breturn第43頁/共59頁第四十三頁,共60頁。 已知四點r, s, t, u求兩條直線(zhxin)l1,l2的方程 已知兩點坐標px, py, qx, qy, 求直線(zhxin)的斜率a和截距bequtionreturn求r,s直線方程l1求t,u直線方程l2s
29、traightline b=(py*qx-qy*px)/(qx-px)return a=(py-qy)/(px-qx)第44頁/共59頁第四十四頁,共60頁。 已知兩條直線方程(fngchng)斜率分別為ma, na; 截距mb, nb;求直線交點(wx, wy) 驗證(ynzhng)B1, B2, B3是否在一條直線上interwx=(nb-mb)/(ma-na); wy=ma*px+mb; returntestreturn 求過B1, B2直線方程L判斷B3是否在直線L上第45頁/共59頁第四十五頁,共60頁。/*PROGRAM Pascal theorem*/#include math.
30、h#include stdio.h#define PI 3.1415927#define eps 1e-5float radius; /* 圓的半徑 */float theta1, theta2, theta3, theta4, theta5, theta6; / * 六個極角的度數 */float xa, ya, xb, yb, xc, yc, xd, yd, xe, ye, xf, yf; /* 六個頂點的直角坐標(zh jio zu bio) */float b1_x, b1_y, b2_x, b2_y, b3_x, b3_y; /* 三個交點的直角坐標(zh jio zu bio) *
31、/ float b12_a, b12_b; /*B1和B2構成直線的斜率和截距*/第46頁/共59頁第四十六頁,共60頁。/*主程序之前這段為“函數原型”以及各個函數返回結果所用變量*/void trans_abcdef();float px, py; /* 用來保存coordinate()轉換(zhunhun)的直角坐標 */void coordinate (float, float);void three_inter();void intersection (float, float, float, float, float, float, float, float);float l1_a
32、, l1_b, l2_a, l2_b; /* 兩條直線的斜率和截距 */void equation (float, float, float, float, float, float, float, float);float a, b; /* 直線方程的斜率和截距 */void straightline(float, float, float, float);float wx, wy; /* 直線交點的直角坐標 */void inter (float, float, float, float);int test (float, float, float, float, float, float
33、);第47頁/共59頁第四十七頁,共60頁。/*主函數(hnsh)*/void main() /*讀入圓形的半徑*/ printf(please input the radius of the circle:); scanf(%f, &radius); /*讀入六個角*/ printf(please input six angle:); scanf(%f %f %f %f %f %f, &theta1, &theta3, &theta3, &theta4, &theta5, &theta6); trans_abcdef(); /*計算六個
34、定點坐標*/ three_inter(); /*求三個交點*/ if( test(b1_x, b1_y, b2_x, b2_y, b3_x, b3_y) ) /*驗證*/ printf(ok); else printf(There is an error when:n); printf(theta1=%d theta2=%dn, theta1, theta2); printf(theta3=%d theta4=%dn, theta3, theta4); printf(theta5=%d theta6=%dn, theta5, theta6); 第48頁/共59頁第四十八頁,共60頁。/*計算六
35、個頂點(dngdin)坐標*/void trans_abcdef() coordinate(radius, theta1); xa=px; ya=py; coordinate(radius, theta2); xb=px; yb=py; coordinate(radius, theta3); xc=px; yc=py; coordinate(radius, theta4); xd=px; yd=py; coordinate(radius, theta5); xe=px; ye=py; coordinate(radius, theta6); xf=px; yf=py;第49頁/共59頁第四十九頁
36、,共60頁。/*計算(j sun)一個頂點坐標*/void coordinate(float r, float theta) /* 先把“角度”轉換成“弧度”,再轉換成直角坐標 */ px=r*cos(PI*theta/180); py=r*sin(PI*theta/180);第50頁/共59頁第五十頁,共60頁。/*求三個交點(jiodin)*/void three_inter() intersection(xa, ya, xb, yb, xd, yd, xe, ye); b1_x=wx; b1_y=wy; intersection(xb, yb, xc, yc, xe, ye, xf, yf); b2_x=wx; b2_y=wy; intersection(xc, yc, xd, yd, xf, yf, xa, ya); b3_x=wx; b3_y=wy;第51頁/共59頁第五十一頁,共60頁。/*已知四點,求兩條直線(zhxin)交點*/void intersection(float rx, float ry, float sx, floa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國開電大專科《建筑力學》在線形考(形成性作業1至4)試題及答案
- 廣西賀州市本年度(2025)小學一年級數學統編版專題練習(上學期)試卷及答案
- 2025-2030年中國數據采集盤點機行業發展戰略規劃及投資潛力研究報告
- 江西省萍鄉市重點中學2025屆高三下學期第六次檢測英語試卷含解析
- 電氣類專業學業水平考試題及答案
- 職業技術學院2024級建筑工程技術專業人才培養方案
- 航標器材智能制造考核試卷
- 毛織品行業市場多元化戰略調整優化調整考核試卷
- 石灰在復合材料中的應用考核試卷
- 服務機器人行業人機交互體驗設計考核試卷
- 工程安全質量問題罰款通知單
- 區級綜合醫院關于落實區領導干部醫療保健工作實施方案
- 顏色標準LAB值對照表
- 幼兒園其他形式的教育活動課件
- 住宅項目開盤前工作倒排表
- 蝦苗購銷合同模板
- 功能飲料項目投資計劃書(模板范文)
- 小學六年級數學應用題易錯題練習
- 儲氣罐年度檢驗報告
- 財產保全申請登記表
- 中層干部360度考核測評表(共4頁)
評論
0/150
提交評論