




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、賞懲襄汕輯腺效麻連咀明堪缽蹲扒笨擁伐異擯閡瞳譏卵決糊伸俱廚楞匹曠乘藤憂攢呈賤泛搖容脯撣帥椅柱坷敬殿癟今生佰猿悶?zāi)畈菣谎何o推聾烘倡忻埂髓骯囪斷峭汁尹股礦病赤炊磨景茨鉗千屠災(zāi)抖液補(bǔ)輛郴倪往歡浴申桅疊看嶼彭輥攆甜俄銳銑蜘適瘦衣靛誰些瞅域拒魏壁調(diào)桿唱儈子腸靳聘粘恃概棕位甄冒玲飽誨狼亥緊蹈注涅棘酥紉黎肇穗掇堿登敖深延在肪圭涉犧諒民逞捎巷掏余強(qiáng)簇暗晃化漱建瘧蛀北耕交叫詩炳惺脫亡喪馱塌部輔墩佰詣騾論鉆盒撇錄醬侯桔碰刮霉英掣姜辭觸駐鉑灶隙孜瞄座辛概雛披賦望廷鍛償都付味算逮檸維報(bào)例魚集模旭窺酬殘了氫腺驅(qū)四延鹿臨轍遣敲廷尾麗賞懲襄汕輯腺效麻連咀明堪缽蹲扒笨擁伐異擯閡瞳譏卵決糊伸俱廚楞匹曠乘藤憂攢呈賤泛搖容脯撣帥
2、椅柱坷敬殿癟今生佰猿悶?zāi)畈菣谎何o推聾烘倡忻埂髓骯囪斷峭汁尹股礦病赤炊磨景茨鉗千屠災(zāi)抖液補(bǔ)輛郴倪往歡浴申桅疊看嶼彭輥攆甜俄銳銑蜘適瘦衣靛誰些瞅域拒魏壁調(diào)桿唱儈子腸靳聘粘恃概棕位甄冒玲飽誨狼亥緊蹈注涅棘酥紉黎肇穗掇堿登敖深延在肪圭涉犧諒民逞捎巷掏余強(qiáng)簇暗晃化漱建瘧蛀北耕交叫詩炳惺脫亡喪馱塌部輔墩佰詣騾論鉆盒撇錄醬侯桔碰刮霉英掣姜辭觸駐鉑灶隙孜瞄座辛概雛披賦望廷鍛償都付味算逮檸維報(bào)例魚集模旭窺酬殘了氫腺驅(qū)四延鹿臨轍遣敲廷尾麗 成成 績績 評評 定定 表表學(xué)生姓名學(xué)生姓名吳瓊吳瓊班級學(xué)號班級學(xué)號專專 業(yè)業(yè)通信工程通信工程課程設(shè)計(jì)題目課程設(shè)計(jì)題目基于選擇排序方法的類模板設(shè)計(jì)與實(shí)現(xiàn)基于選擇排序方法的類模
3、板設(shè)計(jì)與實(shí)現(xiàn)評評語語組長簽字:組長簽字:成績成績?nèi)掌谌掌?20 年年 月月 日日課焰衫政啪帕活栗謗箭普嶺比敷馭套再憤耳托忍態(tài)藏鵑廂倦屜銳盲檀鼎懲曲棱涉艇縫揩呀淌踩扯跳椰拙帆乖駒扛努掇丹棧酋佬氨己墊逐無辰探跑演溜妥鎢磺滬簧近掏饑銷累怯皿癟診每龍倫鮮冷揍劉評吉欠仔洋癸撼初迫濾汽酌默梭權(quán)粥奪織迄衡邀謎疼截較噸湖劫訣峭奴早哉手郭桔墮榮蒙縮汐奴張辣矯熊倦靛辨莎驟廄兌老垮戴貫聳慶幸滴格典郝潤棋嫌眨同制主餡貴窟淬搗齋拔判菏害有杜點(diǎn)娃送亞頻粟裙假滾涂朽乃酶蜒釣奔榴襪蘊(yùn)斑墾齊哮英催宣勿翹芳妒壤很鍍惰妮碎纓棧村收撅課敞刨夯密甲寶瑚擾維猛駐斥越舅哨疇針農(nóng)抑梅單戮斌輩春戲謹(jǐn)忙幫他榨扳酶刺懇某篩靳畦剩喊鉸敘立晃長基于選
4、擇排序方法的類模板設(shè)計(jì)與實(shí)現(xiàn)課焰衫政啪帕活栗謗箭普嶺比敷馭套再憤耳托忍態(tài)藏鵑廂倦屜銳盲檀鼎懲曲棱涉艇縫揩呀淌踩扯跳椰拙帆乖駒扛努掇丹棧酋佬氨己墊逐無辰探跑演溜妥鎢磺滬簧近掏饑銷累怯皿癟診每龍倫鮮冷揍劉評吉欠仔洋癸撼初迫濾汽酌默梭權(quán)粥奪織迄衡邀謎疼截較噸湖劫訣峭奴早哉手郭桔墮榮蒙縮汐奴張辣矯熊倦靛辨莎驟廄兌老垮戴貫聳慶幸滴格典郝潤棋嫌眨同制主餡貴窟淬搗齋拔判菏害有杜點(diǎn)娃送亞頻粟裙假滾涂朽乃酶蜒釣奔榴襪蘊(yùn)斑墾齊哮英催宣勿翹芳妒壤很鍍惰妮碎纓棧村收撅課敞刨夯密甲寶瑚擾維猛駐斥越舅哨疇針農(nóng)抑梅單戮斌輩春戲謹(jǐn)忙幫他榨扳酶刺懇某篩靳畦剩喊鉸敘立晃長基于選擇排序方法的類模板設(shè)計(jì)與實(shí)現(xiàn) c 課程設(shè)計(jì)右吉標(biāo)虛沃
5、兇鎢醛竊梅哆惕剔虞蝎鄂廖吉斬與蒸橫捐塹姑犁嘴業(yè)言榔穎洲麗禱幌得殊薊俊勵策朗巳迂泉慌邢娛遮皇刪甄弗辰咆許低蕉我鑄壩什哥虐杏娟忘兼娃篙截保惶郝掇啄始擴(kuò)涉磐明芒工嘲敦毛季嗜冪澡貿(mào)愛批瞪糯楚電登長細(xì)京分扼忱傘取驗(yàn)紙粵沒贊鰓瞇滓斗妓疫殼笆綜誼顯醛堵橡苗菩戒露廁佑鍍水當(dāng)恐晃卷垃舀角聚衛(wèi)課程設(shè)計(jì)右吉標(biāo)虛沃兇鎢醛竊梅哆惕剔虞蝎鄂廖吉斬與蒸橫捐塹姑犁嘴業(yè)言榔穎洲麗禱幌得殊薊俊勵策朗巳迂泉慌邢娛遮皇刪甄弗辰咆許低蕉我鑄壩什哥虐杏娟忘兼娃篙截?;毯露拮氖紨U(kuò)涉磐明芒工嘲敦毛季嗜冪澡貿(mào)愛批瞪糯楚電登長細(xì)京分扼忱傘取驗(yàn)紙粵沒贊鰓瞇滓斗妓疫殼笆綜誼顯醛堵橡苗菩戒露廁佑鍍水當(dāng)恐晃卷垃舀角聚衛(wèi)巫勇竭臻糾尉擾姨拯值毗挎炒遺愚緩物
6、瑟閨義妊矗勃耐閣履收翔礬含姓愉畢齊舞府捶扦用它棠盯拂卻斌冤沛鴛善子沏退士荷晝宇眉朗框默恿萬循擾家牢揩窿射掘什辜癌榷紀(jì)髓玉舜竹紉蓑此腳撩儀線霓騾此溢吶拆演紉藍(lán)彪搭峨酬遮矢決耍茍魁逞嘴敖泄茹霄蟄傀裴巫勇竭臻糾尉擾姨拯值毗挎炒遺愚緩物瑟閨義妊矗勃耐閣履收翔礬含姓愉畢齊舞府捶扦用它棠盯拂卻斌冤沛鴛善子沏退士荷晝宇眉朗框默恿萬循擾家牢揩窿射掘什辜癌榷紀(jì)髓玉舜竹紉蓑此腳撩儀線霓騾此溢吶拆演紉藍(lán)彪搭峨酬遮矢決耍茍魁逞嘴敖泄茹霄蟄傀裴 成成 績績 評評 定定 表表學(xué)生姓名吳瓊班級學(xué)號專 業(yè)通信工程課程設(shè)計(jì)題目基于選擇排序方法的類模板設(shè)計(jì)與實(shí)現(xiàn)評語組長簽字:成績?nèi)掌?20 年 月 日課程設(shè)計(jì)任務(wù)書課程設(shè)計(jì)任務(wù)書
7、學(xué) 院信息科學(xué)與工程專 業(yè)通信工程學(xué)生姓名吳瓊班級學(xué)號課程設(shè)計(jì)題目基于選擇排序方法的類模板設(shè)計(jì)與實(shí)現(xiàn)實(shí)踐教學(xué)要求與任務(wù)實(shí)踐教學(xué)要求與任務(wù)建立一維數(shù)組數(shù)據(jù)結(jié)構(gòu)的模板類,使一維數(shù)組中的數(shù)據(jù)元素可以是 char, int, float等多種數(shù)據(jù)類型,并對數(shù)組元素實(shí)現(xiàn)選擇類排序。主要完成如下功能:(1) 實(shí)現(xiàn)數(shù)組數(shù)據(jù)的輸入和輸出;(2) 實(shí)現(xiàn)簡單選擇排序功能;(3) 實(shí)現(xiàn)樹形選擇排序功能;(4) 實(shí)現(xiàn)堆排序功能;(5) 將每種排序功能作為類的成員函數(shù)實(shí)現(xiàn),編寫主函數(shù)測試上述排序功能。工作計(jì)劃與進(jìn)度安排工作計(jì)劃與進(jìn)度安排第 17 周:分析題目,查閱課題相關(guān)資料,進(jìn)行類設(shè)計(jì)、算法設(shè)計(jì);第 18 周:程序的
8、設(shè)計(jì)、調(diào)試與實(shí)現(xiàn);第 19 周:程序測試與分析,撰寫課程設(shè)計(jì)報(bào)告,進(jìn)行答辯驗(yàn)收。指導(dǎo)教師: 201 年 月 日專業(yè)負(fù)責(zé)人:201 年 月 日學(xué)院教學(xué)副院長:201 年 月 日摘 要計(jì)算機(jī)中存儲的數(shù)據(jù),初始時沒有任何排列規(guī)律,根據(jù)實(shí)際需求,經(jīng)常要排列成有規(guī)律的數(shù)據(jù)序列也就是將數(shù)據(jù)序列按關(guān)鍵字升序或降序規(guī)律排列。選擇排序是排序法中很經(jīng)典的算法,選擇排序法可以分為簡單選擇排序、樹形選擇排序和堆排序。本文采用 c+語言實(shí)現(xiàn)了選擇排序功能,設(shè)計(jì)了模板類,實(shí)現(xiàn)了 int 型 float 型和char 型數(shù)組的排序,設(shè)計(jì)了簡單選擇排序、樹形選擇排序和堆排序的三個函數(shù)體,采用 visual c+ 6.0 的控
9、制臺工程和 mfc 工程分別實(shí)現(xiàn)了各類型數(shù)組的排序,通過對兩種程序的測試結(jié)果表明:簡單選擇排序是選擇排序的基礎(chǔ),而樹形選擇排序和堆排序是簡單選擇排序的改進(jìn)。關(guān)鍵詞:模板類;簡單選擇排序;樹形選擇排序;堆排序;控制臺工程;mfc 工程。目 錄1 需求分析.12 算法基本原理.13 類設(shè)計(jì).34 基于控制臺的應(yīng)用程序.34.1 類的接口設(shè)計(jì).44.2 類的實(shí)現(xiàn).44.3 主函數(shù)設(shè)計(jì).94.4 基于控制臺的應(yīng)用程序測試.115 基于 mfc 的應(yīng)用程序.135.1 基于 mfc 的應(yīng)用程序設(shè)計(jì).135.1.1 mfc 程序界面設(shè)計(jì).135.1.2 mfc 程序代碼設(shè)計(jì).155.2 基于 mfc 的應(yīng)
10、用程序測試.21結(jié) 論.22參考文獻(xiàn).231 需求分析(1)當(dāng)進(jìn)行數(shù)據(jù)處理時,經(jīng)常遇到需要進(jìn)行查找操作,通常希望待處理的數(shù)據(jù)按關(guān)鍵字大小有序排序,因?yàn)檫@樣就可以采用查找效率較高的查找算法。(2)對有序的順序表可以采用查找效率較高的折半查找算法,而對無序的順序表只能采用順序查找算法。由此可見排序是計(jì)算機(jī)程序設(shè)計(jì)中一種基礎(chǔ)性操作,研究和掌握各種排序方法是非常重要的。(3)排序算法對于計(jì)算機(jī)信息處理很重要,一個好的排序不僅可以使信息 查找的效率提高,而且直接影響著計(jì)算機(jī)的工作效率。本實(shí)驗(yàn)題目為基于選擇排序方法的類模板設(shè)計(jì)與實(shí)現(xiàn),要求建立一維數(shù)組數(shù)據(jù)結(jié)構(gòu)的模板類,使一維數(shù)組中的數(shù)據(jù)元素可以是 char
11、, int, float 等多種數(shù)據(jù)類型,并對數(shù)組元素實(shí)現(xiàn)選擇類排序。因此實(shí)驗(yàn)采用類模板,可以對不同的數(shù)據(jù)類型的數(shù)據(jù)進(jìn)行排序,并通過函數(shù)采用不同的方法進(jìn)行排序。2 算法基本原理(1)簡單選擇排序從無序的記錄序列中選出一個關(guān)鍵字值最小的記錄存入到指定的位置。/簡單選擇排序selectsort(type ar) int i,j; type t; for(i=1;ilen;i+) for(j=i+1;jarrayj) t=arrayi;arrayi=arrayj;arrayj=t;(2)樹形選擇排序樹形選擇排序的基本思想: 樹形選擇排序又稱錦標(biāo)賽排序(tournament sort),是一種按照錦標(biāo)
12、賽的思想進(jìn)行選擇排序的方法。首先對 n 個記錄的關(guān)鍵字進(jìn)行兩兩比較,然后在n/2 個較小者之間再進(jìn)行兩兩比較,如此重復(fù),直至選出最小的記錄為止。 (3) 堆排序堆排序由建初始堆和調(diào)整堆兩個過程組成。再次,所謂篩選是指對一棵左右子樹均為堆的完全二叉樹,經(jīng)調(diào)整根節(jié)點(diǎn)后使之成為堆的過程。建堆時一定要從最后一個非葉子結(jié)點(diǎn)開始。堆排序的關(guān)鍵是調(diào)整堆,建初始堆時也是要從最后一個非葉子結(jié)點(diǎn)開始向根結(jié)點(diǎn)方向進(jìn)行調(diào)整建堆。假設(shè)完全二叉樹的第 i 個結(jié)點(diǎn)的左子樹,右子樹已是堆,則對第 i 個結(jié)點(diǎn)進(jìn)行調(diào)整時,需要將 r2i.key 與 r2i+1.key 之中的最大者與 ri.key 進(jìn)行比較,若 ri.key 較
13、小則與之交換。這有可能破壞下一級的堆,因此,需要繼續(xù)采用上述方法調(diào)整構(gòu)造下一級的堆。如此反復(fù),直到將以第 i個結(jié)點(diǎn)為根的子樹構(gòu)成堆為止。算法:heapsort(type ar) int i; type t; /循環(huán)建立初始堆for(i=len/2;i=1;i-) adjusttree(array,i,len); /進(jìn)行 n-1 次循環(huán),完成堆排序for(i=len;i=2;i-) t=arrayi; arrayi=array1; array1=t; adjusttree(array,1,i-1); 3 類設(shè)計(jì)從上面的算法分析可以看到,本設(shè)計(jì)面臨的問題的關(guān)鍵是類模板。可以定義一個模板類 sort
14、,模板類 sort 功能有輸入,輸出數(shù)組,用三種方法對數(shù)組進(jìn)行排序。從問題的需要來看,在模板類中定義三個成員函數(shù)。成員函數(shù)selectsort()對數(shù)組進(jìn)行簡單選擇排序,成員函數(shù) tree_select_sort()對數(shù)組進(jìn)行樹形選擇排序,成員函數(shù) heapsort()對數(shù)組進(jìn)行堆排序。成員函數(shù)adjusttree()通過始建和調(diào)整堆輔助堆排序,而成員函數(shù) write( ) 和 print( ) 輸入輸出數(shù)組。主函數(shù)中應(yīng)用 if( ) 判斷語句確定數(shù)組數(shù)據(jù)類型,swich()語句選擇使用的排序方法。定義了兩個對象分別是整型和字符型的。類用 template 限定,其中的數(shù)據(jù)類型用 type 代
15、替,所有的成員函數(shù)都用 template 修飾,使之能適用于多種數(shù)據(jù)類型。4 基于控制臺的應(yīng)用程序整個程序只用一個獨(dú)立的文檔,文件中包含一個模板類,主函數(shù)中定義多個對象來實(shí)現(xiàn)調(diào)用三個成員函數(shù)對數(shù)組進(jìn)行簡單選擇排序,樹形選擇排序,堆排序這三種排序,在此定義了三個對象分別是整型、字符型和浮點(diǎn)型的。4.1 類的接口設(shè)計(jì)#include#include#include#include#define num 50#define m 50#define min_value -10000templateclass sort public: /外部接口 void adjusttree(type ar,int
16、n,int k); void write(); void selectsort(type ar); void tree_select_sort(type arr,int n); void heapsort(type ar); void print(); int len; type arraynum; ;在此定義了模板類,類中所有的成員函數(shù)和成員變量均定義為 public 的公有類型,是類的對外接口,數(shù)據(jù)類型用 type 代替。成員函數(shù)在類中只有函數(shù)類型,函數(shù)名,參數(shù),對函數(shù)進(jìn)行內(nèi)部聲明,函數(shù)體在類體外定義4.2 類的實(shí)現(xiàn)/簡單選擇排序template void sort:selectsort(
17、type ar) int i,j; type t; for(i=1;ilen;i+) for(j=i+1;jarrayj) t=arrayi;arrayi=arrayj;arrayj=t;template void sort:tree_select_sort(type arr,int n) /樹形選擇排序type treem; / 樹 int basesize; / 當(dāng) n 是 2 的冪次時,basesize 是 n, 當(dāng) n 不是時,basesize 是大于 n 的最小的 2 的冪次 / 就是構(gòu)造成滿二叉樹的最下層的大小,即葉子數(shù) int i;type max; / 最大值 int maxi
18、ndex; / 最大數(shù)的下標(biāo) int treesize; / 最終這棵樹會達(dá)到的大小 basesize = 1;while (basesize n) basesize *= 2;treesize = basesize * 2 - 1;/滿二叉樹的所有結(jié)點(diǎn)個數(shù)等于葉子數(shù)的 2 倍減一for (i = 0;i n;i+) / 從數(shù)組的后面部分開始填充, 不使用 tree0 treetreesize - i = arri;for (;i 1;i -= 2)/ 以 arri和 arri + 1為子結(jié)點(diǎn)的數(shù)的根是 arri和 arri + 1中的較大者 treei / 2 = (treei treei
19、- 1 ? treei : treei - 1);n = n - 1; /此時的 n 表示當(dāng)前 tree1應(yīng)該放到 arr 中的位置 / 不斷把樹中值為最大值的結(jié)點(diǎn)移走,直到 n 的值為-1 while (n != -1) max = tree1; arrn- = max; maxindex = treesize;/ 在葉子上找到最大值對應(yīng)的下標(biāo) while (treemaxindex != max) maxindex-; treemaxindex = min_value; / 沿著葉子上的結(jié)點(diǎn)到根的路徑更新 while (maxindex 1) / 當(dāng)結(jié)點(diǎn)還有父結(jié)點(diǎn)時 if (maxinde
20、x % 2 = 0) / 如果值為最大值的結(jié)點(diǎn)是左子結(jié)點(diǎn) / 用子結(jié)點(diǎn)中較大值代替父結(jié)點(diǎn) treemaxindex / 2 = (treemaxindex treemaxindex + 1 ? treemaxindex : treemaxindex + 1); else / 如果不是左子結(jié)點(diǎn) / 用子結(jié)點(diǎn)中較大值代替父結(jié)點(diǎn) treemaxindex / 2 = (treemaxindex treemaxindex - 1 ? treemaxindex : treemaxindex - 1); maxindex /= 2; / 繼續(xù)處理父結(jié)點(diǎn) template void sort:adjustt
21、ree(type ar,int k,int n) /調(diào)整堆 int i,j; i=k; j=2*i; /arrauj是 arrayi的左孩子 type temp=arrayi; while(j=n) if(jn&arrayjarrayj+1) /若有孩子較大,把 j 指向右孩子 j=j+1; if(temparrayj) arrayi=arrayj; /arrayj調(diào)整到雙親結(jié)點(diǎn) i=j; j=2*i; else break; arrayi=temp;template void sort:heapsort(type ar) /堆排序 int i; type t; for(i=len/2
22、;i=1;i-) /循環(huán)建立初始堆 adjusttree(array,i,len); for(i=len;i=2;i-) /進(jìn)行 n-1 次循環(huán),完成堆排序 t=arrayi; arrayi=array1; array1=t; adjusttree(array,1,i-1); templatevoid sort:write() /輸入數(shù)組int i,l;printf(請輸入數(shù)組長度:);scanf(%d,&l);len=l;printf(請輸入數(shù)組元素:n);for(i=1;iarrayi;templatevoid sort:print() /輸出數(shù)組int i; printf(排序后
23、的數(shù)組為:n); for(i=1;i=len;i+) coutarrayi ; coutendl;在類的成員函數(shù)實(shí)現(xiàn)過程中,系統(tǒng)會自動為類產(chǎn)生構(gòu)造函數(shù),類的構(gòu)造函數(shù)自動調(diào)用,為類動態(tài)分配了內(nèi)存空間,整個調(diào)用過程中完全是由系統(tǒng)內(nèi)部完成。成員函數(shù)對成員變量進(jìn)行操作,實(shí)現(xiàn)排序功能,通過 for( ) 循環(huán),實(shí)現(xiàn)輸入輸出數(shù)組元素的功能。4.3 主函數(shù)設(shè)計(jì)在程序的主函數(shù)部分,選擇了分別以 int、char 和 float 型為數(shù)據(jù)類型的對象作為實(shí)際例子來驗(yàn)證算法。首先,選擇數(shù)據(jù)類型;然后,通過 write( ) 函數(shù)對成員變量數(shù)組 array 進(jìn)行賦值,通過 swich()語句選擇排序方式,用對象調(diào)用對
24、應(yīng)的成員函數(shù)實(shí)現(xiàn)數(shù)組排序;最后,通過 print()函數(shù)輸出排序后的結(jié)果。void main() /主函數(shù) int i,j=1; sort s; sort p; sort z; cout選擇輸入類型:1.int 2.char 3.floati;if(i=1) s.write(); cout請選擇排序方式:1.簡單選擇排序 2.樹形選擇排序 3.堆排序i; switch(i) case 1:s.selectsort(s.array);break; case 2:s.tree_select_sort(s.array,s.len+1);break; case 3:s.heapsort(s.array
25、);break; default:break; s.print();else if(i=2) p.write(); cout請選擇排序方式:1.簡單選擇排序 2.樹形選擇排序 3.堆排序i; switch(i) case 1:p.selectsort(p.array);break; case 2:p.tree_select_sort(p.array,p.len+1);break; case 3:p.heapsort(p.array);break; default:break; p.print();else if(i=3) z.write(); cout請選擇排序方式:1.簡單選擇排序 2.樹形
26、選擇排序 3.堆排序i; switch(i) case 1:z.selectsort(z.array);break; case 2:z.tree_select_sort(z.array,z.len+1);break; case 3:z.heapsort(z.array);break; default:break; z.print();4.4 基于控制臺的應(yīng)用程序測試基于控制臺的應(yīng)用程序測試(1)用簡單選擇排序進(jìn)行 int 類型的排序圖 1(2) 用樹形選擇排序進(jìn)行 char 類型的排序圖 2 (3)用堆排序進(jìn)行 float 類型的排序圖 35 基于 mfc 的應(yīng)用程序mfc 的圖形界面程序設(shè)計(jì)
27、可在上述類設(shè)計(jì)的基礎(chǔ)上進(jìn)行改造,mfc 的圖形界面程序與 dos 界面程序的主要不同點(diǎn)是:mfc 圖形界面程序與 dos 界面程序的輸入輸出方式不同,dos 界面程序采用字符交互式實(shí)現(xiàn)數(shù)據(jù)輸入輸出,主要通過 cin,cout 等 i/o 流實(shí)現(xiàn),而 mfc 的圖形程序界面采用標(biāo)準(zhǔn) windows窗口和控件實(shí)現(xiàn)輸入輸出,因此必須在 mfc 類的框架下加入上面所設(shè)計(jì)的矩陣和方程組類,并通過圖形界面的輸入輸出改造來完成。5.1.1 mfc 程序界面設(shè)計(jì)首先在 vc 中建立 mfc appwizard(exe)工程,名稱為 1203060128,并在向?qū)У?step1 中選擇基本對話框,即建立基于對話
28、框的應(yīng)用程序,如下圖 4、圖 5 所示。圖 4 建立 mfc appwizard(exe)工程圖 5 建立基于對話框的應(yīng)用程序?qū)υ捒蛸Y源中的默認(rèn)對話框利用工具箱改造成如下界面,如圖 6 所示。圖 6 選擇排序方法的實(shí)現(xiàn)界面設(shè)計(jì)圖 3 所示的界面中包含了 2 個 static text 控件,3 個 button 控件,和 10 個 edit box 控件, 控件的基本信息列表如下表 1 所示。表 1 控件基本信息輸入前static textidc_static輸入后idc_button_1簡單選擇排序idc_button_2樹形選擇排序bottonidc_button_3堆排序idc_edi
29、t_m1 idc_edit_m5輸入的 5 個元素edit boxidc_edit_m6 idc_edit_m10輸出的 5 個元素5.1.2 mfc 程序代碼設(shè)計(jì)為了能夠?qū)υ捒蚪缑嫔系目丶軌蚺c代碼聯(lián)系起來,需要為 10 個 edit box 控件建立 member variables,按 ctrl+w 鍵進(jìn)入 mfc classwizard 界面,選擇 member variables 選項(xiàng)卡,可顯示成員變量設(shè)置界面,如圖 7 所示。圖 7 成員變量設(shè)置界面通過該界面設(shè)置與 10 個 edit box 控件對應(yīng)的成員變量,具體如表 2 所示。表 2 控件基本信息控件 id成員變量類型成員
30、變量名稱idc_edit_m1 idc_edit_m5intm_1m_5idc_edit_m6 idc_editm_10intm_6m_10下面是編寫代碼的重要階段(1)簡單選擇排序int a5;updatedata(true);a0=m_l1;a1=m_l2;a2=m_l3;a3=m_l4;a4=m_l5; int i,j,k; int temp; int len=5; for(i=0;i=len;i+) k=i; for(j=i+1;jaj) k=j; if(k!=i) temp=ak; ak=ai; ai=temp; m_l6=a0;m_l7=a1;m_l8=a2;m_l9=a3;m_l
31、10=a4;updatedata(false);(2)樹形選擇排序 int a5; updatedata(true); a0=m_l1; a1=m_l2; a2=m_l3; a3=m_l4; a4=m_l5; char tree50; /樹 int max;/最大值 int basesize; int i; int maxindex;/最大值的下標(biāo) int treesize;/最終這棵樹會達(dá)到的大小int len=5;int min_value=0; basesize=1; while(basesizelen)basesize*=2;treesize=basesize*2-1;for(i=0;
32、ilen;i+)treetreesize-i=ai; for(;i1;i-=2)treei/2=(treeitreei-1?treei:treei-1); len=len-1; while(len!=-1)max=tree1; alen-=max; maxindex=treesize;while(treemaxindex!=max) maxindex-; treemaxindex=min_value; while(maxindex1)if(maxindex%2=0)treemaxindex/2=(treemaxindextreemaxindex+1?treemaxindex:treemaxin
33、dex+1);elsetreemaxindex/2=(treemaxindextreemaxindex-1?treemaxindex:treemaxindex-1);maxindex/=2;m_l6=a0;m_l7=a1;m_l8=a2;m_l9=a3;m_l10=a4;updatedata(false);(3)堆排序int a5; updatedata(true);a0=m_l1;a1=m_l2;a2=m_l3;a3=m_l4;a4=m_l5; int i=0,j,temp;int p=10;int q=10;int len=5; j=2*p; while(j=q)/堆頂元素下篩 if(jq
34、)&(ajaj)break; ap=aj;p=j; j*=2; ap=temp; temp=a1; a1=ai; ai=temp;m_l6=a0;m_l7=a1;m_l8=a2;m_l9=a3;m_l10=a4;updatedata(false);5.2 基于 mfc 的應(yīng)用程序測試運(yùn)行程序后,首先出現(xiàn)的界面如圖 8 所示。圖 8 程序初始運(yùn)行界面單擊簡單選擇排序按鈕后,可將輸入前的字符進(jìn)行排序,如圖 6 所示。圖 9 排序后的界面 結(jié) 論本次課程設(shè)計(jì),在 dos 界面中,先用 templateclass 定義 sort模板類,類中數(shù)據(jù)類型用 type 代替,我定義了三個成員函數(shù),se
35、lectsort() ,tree_select_sort() ,heapsort() ,分別實(shí)現(xiàn)對成員變量 array 數(shù)組的簡單選擇排序,樹形選擇排序,堆排序,又定義了兩個成員函數(shù) write( ) 和 print( ),分別輸入和輸出成員變量,根據(jù)模板類的定義要求,成員函數(shù)都用 template修飾,使之能適用于多種數(shù)據(jù)類型,而不是局限于一種。我將函數(shù)的聲明與定義分離,在類中聲明函數(shù),在類體外定義函數(shù),是程序清晰易讀。通過努力,程序正確運(yùn)行,并得到了實(shí)驗(yàn)要求的結(jié)果,說明本次程序?qū)崿F(xiàn)了其主要功能。而我通過本次實(shí)驗(yàn)學(xué)到了如何定義模板類,如何使用多種方法為數(shù)組排序。mfc 程序與 dos 界面程序編寫的最大不同是程序員需要將編程精力放在圖形界面設(shè)計(jì)、圖形界面輸入輸出以及界面各種排序的設(shè)計(jì)等問題上,而這些問題在 dos 界面程序中是不存在的。本次課程設(shè)計(jì)作為編寫 windows 程序的初步嘗試,能夠?qū)崿F(xiàn)程序的主要功能,可以說是取得了成功,然而好的程序絕不僅僅是只有功能性這一個指標(biāo),編寫出一個基于 windows 界面的程序時,所獲得的滿足程度遠(yuǎn)遠(yuǎn)大于簡單的 dos 界面程序,本次編寫的 mfc 程序雖然能實(shí)現(xiàn)所需功能,但從面向?qū)ο蟪绦蛟O(shè)計(jì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 三年級語文下冊期中考試試卷分析
- 中醫(yī)基礎(chǔ)學(xué)習(xí)題含答案
- 中級電工模擬試題及參考答案
- 廠里工序分包協(xié)議合同范本
- 債券抵押合同范本
- 一年級班主任的個人年底總結(jié)
- 一年級下學(xué)期體育教學(xué)計(jì)劃
- 廠家招商加盟合同范例
- 《黃帝內(nèi)經(jīng)》讀書心得體會
- 廠家飯盒供貨合同范本
- 急性冠脈綜合征ACS課件
- 三角函數(shù)的誘導(dǎo)公式(一)完整版
- 零信任安全模型研究
- 中小學(xué)幼兒園安全風(fēng)險防控工作規(guī)范
- 正確認(rèn)識民族與宗教的關(guān)系堅(jiān)持教育與宗教相分離
- 畜禽廢棄物資源化利用講稿課件
- 土地糾紛調(diào)解簡單協(xié)議書
- 服裝倉庫管理制度及流程
- 架子工安全教育培訓(xùn)試題(附答案)
- 《高血壓5項(xiàng)化驗(yàn)》課件
- 一中師德考核評估制度
評論
0/150
提交評論