- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
實用cc語言程式設計
程式設計實習第十三次上課 傅榮勝 再次提醒下週小考 下個禮拜6/10上機小考 考試分兩個時段: 4:10~5:00 U9822118曾樺陽(含)之前 5:10~6:00 U9822120 王裕意(含)之後 Jung-Sheng Fu, DEE, NUU, ROC * Jung-Sheng Fu, DEE, NUU, ROC * 範例: 請寫一個函式,其參數如下: 一陣列 此陣列的長度 函式的傳回值為此陣列長度的最大值之駐標,如陣列A為{1,2,6,3,2},則會傳回2,因為A[2] = 6 在main function中,先用用亂數產生一個100個元素值為0~100的值之陣列,再呼叫本題的函式找出最大值元素的駐標。 Jung-Sheng Fu, DEE, NUU, ROC * 範例 如果上題中除了要傳回最大元素的index之外,也要傳回最大值,該如何做? 請注意,我們只能有一個傳回值。 所以,只能使用參數來接收,但此參數的使用必須使用參考引用或傳址引用,在此我們用較簡單的參考引用。 問題:為什麼陣列不用就可以用參數來接收或改變值? 講解上次作業 有些同學上傳的相似度極高,請說明 P(n, r) = n?? (n ? 1) ? …? (n ? r +1)表示從n個人中選取r個來排隊的方法數。 請寫一個遞迴函式會傳回P(n, r)之值 使用二分法的遞迴函式解出aq % n。 Jung-Sheng Fu, DEE, NUU, ROC * Jung-Sheng Fu, DEE, NUU, ROC * 一維陣列的排序處理 (Sorting) 使用一維陣列時,常常會有需要將陣列的資料依序排列的問題,如:由小到大排序或由大到小排序。 在此,若時間允許,我們介紹一種常見的最影單的排序方法(但效能較差): 汽泡排序法 叫用標準函式庫的函式可以省去自己重新寫程式的麻煩。 Jung-Sheng Fu, DEE, NUU, ROC * 汽泡排序法 汽泡排序法是一種最容易了解的排序方法,這個方法的運作邏輯為將兩個相臨的汽泡(元素)做比較,比較大的汽泡(元素)就往上浮(右移)。 Jung-Sheng Fu, DEE, NUU, ROC * 汽泡排序法 資料交換 (例:bubble.cpp ) Jung-Sheng Fu, DEE, NUU, ROC * 叫用函式庫內建的排序函式qsort Qsort的排序效能遠高於汽泡排序法,但稍複雜,有興趣的同學可選修資料結構作進一步的了解。 在此我們要學著使用呼叫標準函式庫的qsort。 函式庫中的qsort可以 支援所有的資料型別(double,int,…等等), 而且可以定義比較大小的規則,而此規則必須是一個函數,也就是說要用另一個函數當成是它的參數 但怎麼可以另函數當參數呢?替代方法是用函數指標當參數 因此使用qsort的概念有些複雜,但很重要,請仔細認真聆聽。今天沒有習題,只要照著老師一步步完成並存檔, Jung-Sheng Fu, DEE, NUU, ROC * 函數指標 指標不一定要指向資料,它也可以指向函數,稱為函數指標(function pointer)。 對於一個函數而言,其名稱即是一個函數指標,永遠指向函數的開頭處。 宣告函數指標的語法如下: 資料型態 (*函數指標)(參數串列); Jung-Sheng Fu, DEE, NUU, ROC * 快速排序法 qsort()函數的雛型如下: #include stdlib.h void qsort( void *base, size_t nelem, size_t width, int (*fcmp)(const void *e1, const void *e2) ); 其中base指向欲被排序的陣列之開頭處,nelem為陣列的大小, width為每個陣列元素所佔的記憶體空間。 而fcmp則為函數的指標,指向一個使用者自定的比較函數,而該函數的參數為指標,分別指向陣列中的兩個元素,假如 e1e2 則傳回一正整數,若e1=e2則傳回0,若e1e2則傳回一個負數。 Jung-Sheng Fu, DEE, NUU, ROC * 定義快速排序法的比較函數 – 以整數元素為例 int compare(const void *a, const void *b) { int x, y; x = *((int*)a); //先將指標轉換為正確的指標(整數指標) y = *((int*)b); if( x y ) return( 1 ); //較大時傳回 +1 if( x y ) return( -1 ); //較小時傳回 -1 retur
文档评论(0)