吉林大學(xué)程序設(shè)計基礎(chǔ)教材第五章-模塊化程序設(shè)計--函數(shù).ppt
《吉林大學(xué)程序設(shè)計基礎(chǔ)教材第五章-模塊化程序設(shè)計--函數(shù).ppt》由會員分享,可在線閱讀,更多相關(guān)《吉林大學(xué)程序設(shè)計基礎(chǔ)教材第五章-模塊化程序設(shè)計--函數(shù).ppt(59頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第五章模塊化程序設(shè)計 函數(shù) 求給定三角形的外心 模塊化程序設(shè)計函數(shù)程序設(shè)計實例 例5 1 求給定三角形的外心 以e為例 求解垂直平分線 假設(shè)A點坐標(biāo)為xa yaB點坐標(biāo)為xb ybC點坐標(biāo)為xc ycAC邊的中點E的坐標(biāo)為xe yeAC邊的直線方程表示為Y a1 X b1AB邊的直線方程表示為Y a2 X b2AC邊垂直平分線e的直線方程為Y u1 X v1AB邊垂直平分線f的直線方程為Y u2 X v2 include 括入標(biāo)準(zhǔn)輸入輸出函數(shù)庫頭文件voidmain 主函數(shù)floatxa ya xb yb xc yc 分別保存三角形三個頂點的X Y方向坐標(biāo)floatxe ye AC邊的中點E的坐標(biāo)floatxf yf AB邊的中點F的坐標(biāo)floata1 b1 AC邊的直線方程系數(shù)floata2 b2 AB邊的直線方程系數(shù)floatu1 v1 AC邊的垂直平分線的直線方程系數(shù)floatu2 v2 AB邊的垂直平分線的直線方程系數(shù)floatxo yo 外心O的坐標(biāo) 輸入三個點的X Y方向坐標(biāo) printf pleaseinputxa ya xb yb xc yc n scanf f f f f f f 求AC邊垂直平分線e xe xa xc 2 先求AC邊的中點Eye ya yc 2 a1 ya yc xa xc 再求過A C兩點的直線方程b1 ya a1 xa u1 1 a1 求過E點的與AC垂直的直線的直線方程v1 ye u1 xe 求AB邊垂直平分線f xf xa xb 2 先求AB邊的中點Eyf ya yb 2 a2 ya yb xa xb 再求過A B兩點的直線方程b2 ya a1 xa u2 1 a2 求過F點的與AC垂直的直線的直線方程v2 yf u2 xf 求e f交點O xo u2 u1 v2 v1 yo u1 xo v1 打印輸出 printf 外心坐標(biāo) x 10 3fy 10 3f n xo yo 計算過程一致 而參與運算的數(shù)據(jù)不同 例5 2 用函數(shù)改寫例5 1的程序 include 括入標(biāo)準(zhǔn)輸入輸出函數(shù)庫頭文件1 求垂直平分線 參數(shù) 兩個頂點r s的x y坐標(biāo) floataa 全局變量 用于保存?zhèn)鬟frs邊的垂直平分線的直線方程斜率2floatlines floatxr floatyr floatxs floatys 3floatxt yt 中點T的坐標(biāo)4floata b 過r s兩點的直線方程系數(shù)5 先求中點T xt xr xs 2 6yt yr ys 2 7 再求過r s兩點的直線方程rs a yr ys xr xs 8b yr a xr 9 求過中點T的與rs垂直的直線方程 aa 1 a 計算斜率aa10returnyt aa xt 計算截距b 并帶著b值返回11 voidmain 主函數(shù)13floatxa ya xb yb xc yc 分別保存三角形三個頂點的X Y坐標(biāo)14floatu1 v1 AC邊的垂直平分線的直線方程系數(shù)15floatu2 v2 AB邊的垂直平分線的直線方程系數(shù)16floatxo yo 外心O的坐標(biāo)17 輸入三個點的X Y方向坐標(biāo)346360416108116212 printf pleaseinputxa ya xb yb xc yc n 18scanf f f f f f f 求AC邊垂直平分線e v1 lines xa ya xc yc 截距20u1 aa 斜率21 求AB邊垂直平分線f v2 lines xa ya xb yb 截距22u2 aa 斜率23 求e f交點O xo v2 v1 u2 u1 24yo u1 xo v1 25 打印輸出 printf 外心坐標(biāo) x 10 3fy 10 3f n xo yo 26 子程序 自頂向下 逐步求精 程序設(shè)計技術(shù)的基礎(chǔ)從問題的整體 最頂層 出發(fā) 向下分解問題 逐層細(xì)分 得到整個問題的解決方法使用子程序技術(shù)分離了 做什么 與 怎么做 程序邏輯結(jié)構(gòu)清晰 易寫 易讀 易懂 程序的設(shè)計 調(diào)試 維護變得容易 5 2函數(shù) 例5 2 程序執(zhí)行過程函數(shù)概念的組成函數(shù)定義函數(shù)調(diào)用使用函數(shù)注意事項先定義該函數(shù) 標(biāo)準(zhǔn)庫函數(shù)除外 類似于數(shù)學(xué)中的函數(shù)定義 再在表達式中調(diào)用該函數(shù) 數(shù)學(xué)中計算某函數(shù)的一個特定值 5 2 1函數(shù)定義 function declaration 除標(biāo)準(zhǔn)庫函數(shù)外 程序中使用函數(shù)必須先定義 然后再用 函數(shù)調(diào)用 調(diào)用它 函數(shù)定義形式類型說明符標(biāo)識符 參數(shù)列表 復(fù)合語句 floatdis floatxr floatyr floatxs floatys returnsqrt xr xs xr xs yr ys yr ys 函數(shù)類型 函數(shù)名字 形參列表 復(fù)合語句函數(shù)體 函數(shù)定義說明符 函數(shù)定義說明符上述形式的第一行稱 函數(shù)定義說明符 形式如下TTF 參數(shù)列表 具體指明以下點 函數(shù)的結(jié)果類型 由 類型說明符 TT 標(biāo)明 函數(shù)的名字 由類型說明符后的 標(biāo)識符 F 標(biāo)明 函數(shù)的形式參數(shù)個數(shù)和每個形式參數(shù)的特性 由 參數(shù)列表 標(biāo)明 函數(shù)類型函數(shù)的結(jié)果類型缺省int類型結(jié)果類型不能是數(shù)組類型 函數(shù)類型函數(shù)可以是無值的 即 無類型 void參數(shù)列表 parameter list 每個參數(shù)聲明具體說明形式 類型說明符標(biāo)識符參數(shù)列表形式Tid Tid Tid C允許使用無參函數(shù) 無參函數(shù)的參數(shù)列表為空 或使用 空類型 的類型說明符 void TTF TTF void 復(fù)合語句 compound statement 由聲明和語句列表組成聲明部分具體的說明本函數(shù)內(nèi)使用的其它量 語句部分規(guī)定在本函數(shù)中要執(zhí)行的算法動作 函數(shù)定義的形式 TTF Tid Tid Tid intf intx inty floatz intf intx y floatz intf intx y floatz 5 2 2函數(shù)調(diào)用 調(diào)用過程首先順序計算實參表中各實參值然后把這些值順序傳入形參表的各個形參中最后進入函數(shù)執(zhí)行復(fù)合語句 一般形式F U U U F 例子lines xa ya xc yc lines xa ya xb yb printf 外心坐標(biāo) x 10 3fy 10 3f n xo yo 主程序 調(diào)用函數(shù) 返回 結(jié)束 函數(shù) 參數(shù)結(jié)合規(guī)則靜態(tài)上看 實參表中的實參與被調(diào)用函數(shù)中形參表的形參 按位置從左向右依次一一對應(yīng)對應(yīng)位置上的形實參間要賦值兼容各個實參的計算次序是依賴于實現(xiàn)的 參數(shù)結(jié)合動作計算實參表達式的值把實參的值按賦值轉(zhuǎn)換規(guī)則 轉(zhuǎn)換成形參的類型 如果不能完成該轉(zhuǎn)換 則稱函數(shù)參數(shù)不一致 產(chǎn)生錯誤把轉(zhuǎn)換后的實參值送入形參 3 intf intx inty returnx y voidmain inta 3 b 2 x 9 intc c f a b a x printf d n c printf d n x 2 9 程序輸出為 609 a b x 返回值 x y c main f 內(nèi)存 5 12 60 60 0 x y v z u main f 內(nèi)存 g 返回值 返回值 由左至右 include stdio h intx y intf intz x x 1 return z z intg intu intv voidmain x 0 g x f 2 0 2 1 4 4 0 x y v z u main f 內(nèi)存 g 返回值 返回值 由右至左 include stdio h intx y intf intz x x 1 return z z intg intu intv voidmain x 0 g x f 2 1 2 1 4 4 并行計算 不知道結(jié)果 include stdio h intx y intf intz x x 1 return z z intg intu intv voidmain x 0 g x f 2 代碼中參數(shù)值不能依賴計算次序 根據(jù)參數(shù)出現(xiàn)的位置形式參數(shù) 函數(shù)聲明 局部于函數(shù)的變量 intf intx inty returnx y 實際參數(shù) 函數(shù)調(diào)用voidmain inta 2 b 3 f a b b f 2 b 3 根據(jù)參數(shù)值的傳遞規(guī)則值參當(dāng)調(diào)用函數(shù)時 把實參的值傳入形參變量變參當(dāng)調(diào)用函數(shù)時 把實參的地址值傳入形參變量C語言中的參數(shù)都是值參 函數(shù)返回返回方式 return return表達式 函數(shù)運行到復(fù)合語句末尾 最后那個閉花括號 后 例子returnsqrt xr xs xr xs yr ys yr ys returnsqrt s s uv s uw s vw 函數(shù)值 有返回類型的函數(shù)intf intx inty if x y returnx elsereturny 無返回類型的函數(shù)voidg intw if w 1 return elsex 3 有返回類型函數(shù)的函數(shù)值使用returne 向調(diào)用函數(shù)的主程序傳遞函數(shù)值returne 的執(zhí)行過程是 計算表達式e的值把表達式值按賦值轉(zhuǎn)換規(guī)則 轉(zhuǎn)換成函數(shù)的結(jié)果類型 返回語句中表達式的類型與函數(shù)的結(jié)果類型必須賦值兼容 用類型轉(zhuǎn)換后的值作為函數(shù)值 并帶著它返回到調(diào)用該函數(shù)處 無返回類型函數(shù)的函數(shù)值voidg intw if w 1 return elsex 3 在函數(shù)調(diào)用處 所調(diào)函數(shù)無值可以帶回 對于無類型函數(shù) 在函數(shù)調(diào)用處不需要函數(shù)值 這種返回是正常的 對于有類型函數(shù) 在函數(shù)調(diào)用處極可能需要函數(shù)值參加下一步運算 這將帶來不可預(yù)料的結(jié)果 5 2 3先調(diào)用后定義 函數(shù)原型為什么使用函數(shù)原型任何標(biāo)識符都必須聲明 而且必須先聲明后使用在聲明定義函數(shù)時必須保證函數(shù)聲明位置在使用前出現(xiàn)從程序行文順序上控制 一般比較難實現(xiàn)函數(shù)原型 方便靈活 一般形式TTF T T T TTF Tid Tid Tid 例子floatf int float int char floatf intz floatu intv charw 函數(shù)原型的功能滿足了C標(biāo)識符先定義后使用的要求并向編譯系統(tǒng)提供所調(diào)用函數(shù)的信息函數(shù)返回類型函數(shù)的參數(shù)個數(shù)函數(shù)參數(shù)特性等信息程序設(shè)計風(fēng)格最好把所有函數(shù)原型集中 放在主函數(shù)之前 floatxa ya xb yb xc yc xd yd floats1 s2 ss m floatliners floatxr floatyr floatxs floatys floatareauvw floatxu floatyu floatxv floatyv floatxw floatyw voidmain void printf pleaseinputxa ya xb yb xc yc xd yd n scanf f f f f f f f f returnsqrt s s uv s uw s vw 程序設(shè)計實例 重寫打印字符矩陣重寫打印100以內(nèi)素數(shù)驗證Pascal定理 重寫打印字符方陣 ABCDEFGHIABCDEFGHIABCDEFGHIABBBCDEFGHIABCDEFGHIABCCCCCDEFGHIABCDEFGHIABCDDDDDDDEFGHIABCDEFGHIABCDEEEEEEEEEFGHIABCDEFGHIABCDEFFFFFFFFFFFGHIABCDEFEFGHIABCDEEEEEEEEEFGHIABCDEDEFGHIABCDDDDDDDEFGHIABCDCDEFGHIABCCCCCDEFGHIABCBCDEFGHIABBBCDEFGHIABABCDEFGHIABCDEFGHIA 打印前6行 打印后5行 x voidwritelinex char voidmain charx for x A x A x writelinex x voidwritelinex charu 打印第u行chary inti 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 重寫打印100以內(nèi)素數(shù) returnfalse for j i 2 j 2 j returntrue i j 0 include stdio h boolprime int voidmain inti for i 2 i 2 j if n j 0 returnfalse returntrue 驗證Pascal定理 圓內(nèi)接六邊形三雙對邊延線的交點在一條直線上 將6個點的極坐標(biāo)轉(zhuǎn)換成直角坐標(biāo) 已知極角theta 矢徑r 求一點的直角坐標(biāo) px py 求交點B1 B2 B3的坐標(biāo) 已知四點r s t u求兩條直線交點B 已知四點r s t u求兩條直線l1 l2的方程 已知兩點坐標(biāo)px py qx qy 求直線的斜率a和截距b 已知兩條直線方程斜率分別為ma na 截距mb nb 求直線交點 wx wy 驗證B1 B2 B3是否在一條直線上 PROGRAMPascaltheorem include math h include stdio h definePI3 1415927 defineeps1e 5floatradius 圓的半徑 floattheta1 theta2 theta3 theta4 theta5 theta6 六個極角的度數(shù) floatxa ya xb yb xc yc xd yd xe ye xf yf 六個頂點的直角坐標(biāo) floatb1 x b1 y b2 x b2 y b3 x b3 y 三個交點的直角坐標(biāo) floatb12 a b12 b B1和B2構(gòu)成直線的斜率和截距 主程序之前這段為 函數(shù)原型 以及各個函數(shù)返回結(jié)果所用變量 voidtrans abcdef floatpx py 用來保存coordinate 轉(zhuǎn)換的直角坐標(biāo) voidcoordinate float float voidthree inter voidintersection float float float float float float float float floatl1 a l1 b l2 a l2 b 兩條直線的斜率和截距 voidequation float float float float float float float float floata b 直線方程的斜率和截距 voidstraightline float float float float floatwx wy 直線交點的直角坐標(biāo) voidinter float float float float inttest float float float float float float 主函數(shù) voidmain 讀入圓形的半徑 printf pleaseinputtheradiusofthecircle scanf f 計算六個頂點坐標(biāo) voidtrans 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 計算一個頂點坐標(biāo) voidcoordinate floatr floattheta 先把 角度 轉(zhuǎn)換成 弧度 再轉(zhuǎn)換成直角坐標(biāo) px r cos PI theta 180 py r sin PI theta 180 求三個交點 voidthree 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 已知四點 求兩條直線交點 voidintersection floatrx floatry floatsx floatsy floattx floatty floatux floatuy equation rx ry sx sy tx ty ux uy inter l1 a l1 b l2 a l2 b 已知四點 求兩條直線方程 voidequation floatrx floatry floatsx floatsy floattx floatty floatux floatuy straightline rx ry sx sy l1 a a l1 b b straightline tx ty ux uy l2 a a l2 b b 計算由兩點確定直線方程的斜率 a 和截距 b voidstraightline floatex floatey floatfx floatfy a fy ey fx ex 斜率 b ey a ex 截距 已知兩個直線方程的斜率和截距 求它們交點 voidinter floatma floatmb floatna floatnb wx nb mb ma na wy ma wx mb 檢驗 booltest floatb1 x floatb1 y floatb2 x floatb2 y floatb3 x floatb3 y straightline b1 x b1 y b2 x b2 y if fabs b3 y a b3 x b eps returntrue elsereturnfalse 本章小結(jié) 函數(shù)的定義函數(shù)的調(diào)用模塊化程序設(shè)計思想 作業(yè) 5 45 8- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 吉林大學(xué) 程序設(shè)計 基礎(chǔ) 教材 第五 模塊化 函數(shù)
鏈接地址:http://m.italysoccerbets.com/p-6294614.html