版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 電子設(shè)計(jì)應(yīng)用軟件訓(xùn)練總結(jié)報(bào)告</p><p> 學(xué)生姓名: </p><p> 專 業(yè): </p><p> 班 級(jí): </p><p><b> 學(xué) 號(hào): </b></p><p> 指導(dǎo)教師: <
2、/p><p> 訓(xùn)練時(shí)間:2013年 7月1日至 2013年7月12日</p><p><b> 電子信息工程學(xué)院</b></p><p> 電子設(shè)計(jì)應(yīng)用軟件訓(xùn)練任務(wù)</p><p><b> 一 、訓(xùn)練任務(wù)</b></p><p> 1、PROTEL部分</p&
3、gt;<p> (1) 熟練掌握PROTEL軟件的使用;</p><p> (2) 按要求繪制電路原理圖和PCB版圖(能夠用自動(dòng)布線和手動(dòng)布線相結(jié)合);</p><p> (3) 能夠按要求建立元件庫和封裝庫。</p><p><b> 2、軟件設(shè)計(jì)部分</b></p><p> 按照給定的軟件設(shè)
4、計(jì)任務(wù)完成相應(yīng)的軟件設(shè)計(jì)(見軟件設(shè)計(jì)任務(wù)部分)。</p><p><b> 二、基本要求及說明</b></p><p> 1、PROTEL部分</p><p> (1) 電路原理圖圖紙尺寸按照給定的任務(wù)作相應(yīng)的設(shè)置;</p><p> (2) 電路原理圖見PROTEL訓(xùn)練任務(wù)部分;</p><
5、p> (3) 按指定電路圖在PROTEL 99中繪制原理圖和印制板圖;</p><p> (4) 按照給定要求創(chuàng)建原理圖器件和該器件的相應(yīng)的封裝(見PROTEL訓(xùn)練任務(wù)部分)。</p><p><b> 2、軟件設(shè)計(jì)部分</b></p><p> 按軟件設(shè)計(jì)要求實(shí)現(xiàn)相應(yīng)的功能(見軟件設(shè)計(jì)任務(wù)部分)</p><p
6、> 三、按照要求撰寫總結(jié)報(bào)告</p><p><b> 成績(jī):_____</b></p><p> PROTEL訓(xùn)練任務(wù)</p><p><b> 數(shù)碼管封裝尺寸</b></p><p><b> 軟件設(shè)計(jì)任務(wù)</b></p><p>
7、 題目:猴子吃桃子問題</p><p> 有一群猴子摘了一堆桃子,他們每天都吃當(dāng)前桃子的一半且再多吃一個(gè),到了第10天就只余下一個(gè)桃子。用多種方法實(shí)現(xiàn)求出原來這群猴子共摘了多少個(gè)桃子。要求:</p><p> 1、采用數(shù)組數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)上述求解</p><p> 2、采用鏈數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)上述求解</p><p><b> PRO
8、TEL部分</b></p><p><b> 任務(wù)說明</b></p><p> 1.熟練掌握PROTEL軟件的使用;</p><p> 2.按要求繪制電路原理圖和PCB版圖(能夠用自動(dòng)布線和手動(dòng)布線相結(jié)合);</p><p> 3.能夠按要求建立元件庫和封裝庫。</p><p&g
9、t; 二、原理圖繪制說明并新建一個(gè)元件庫</p><p> 1.新建設(shè)計(jì)數(shù)據(jù)庫文件</p><p> 雙擊Protel 99 圖標(biāo),點(diǎn)擊File(文件)中new(新建)項(xiàng),新建設(shè)計(jì)數(shù)據(jù)庫,Database File Name處可輸入設(shè)計(jì)庫存盤文件名,點(diǎn)擊Browse改變存盤目錄,單擊OK,即可建立設(shè)計(jì)數(shù)據(jù)庫。如下圖1。</p><p><b> 圖
10、1新建設(shè)計(jì)庫 </b></p><p> 建立設(shè)計(jì)庫后,打開MyDesign.dbb,進(jìn)入Documents文件中,并在菜單欄選取File/New...如圖2,打開New Document對(duì)話框,選取Schematic Document(原理圖繪制)建立一個(gè)新的原理圖文檔。如圖3。</p><p><b> 圖2新建原理圖文件</b></p&g
11、t;<p><b> 圖3原理圖文件</b></p><p> 選擇菜單中的Ddesign/Options命令,系統(tǒng)將彈出Document Options對(duì)話框并在其中選擇Sheet Options選項(xiàng)卡進(jìn)行設(shè)置接下來要設(shè)置電路圖圖紙信息,將電路原理圖圖紙?jiān)O(shè)置為A4尺寸。如圖4所示。</p><p><b> 圖4頁面設(shè)置大小</b
12、></p><p> 打開原理圖文檔Sheet1.Sch,放置元件庫中已有元件并按電路原理圖連接線路,沒有的元件在元件庫中建立并添加(見元件庫的建立),如圖5。</p><p><b> 圖5原理圖繪制 </b></p><p><b> 元件庫的建立</b></p><p> 新建一
13、個(gè)Sheet.lib文件,如圖6。</p><p><b> 圖6新建元件庫</b></p><p> 然后打開Sheet.lib文件,建立一個(gè)新的元件,如圖7。</p><p><b> 圖7新建元件</b></p><p> 將新建元件庫添加到原理圖設(shè)計(jì)庫,如圖8。</p>
14、<p><b> 圖8添加新建元件庫</b></p><p><b> 3.繪制導(dǎo)線</b></p><p> 單擊鼠標(biāo)右鍵,選擇Place wire,單擊鼠標(biāo)左鍵確定導(dǎo)線的起點(diǎn),在導(dǎo)線的終點(diǎn)處單擊鼠標(biāo)左鍵確定終點(diǎn),單擊鼠標(biāo)右鍵,則完成了一段導(dǎo)線的繪制,此時(shí)仍為繪制狀態(tài),將光標(biāo)移到新導(dǎo)線的起點(diǎn),單擊鼠標(biāo)左鍵,按前面的步驟繪制另一
15、條導(dǎo)線,最后單擊鼠標(biāo)右鍵兩次退出繪制狀態(tài)。繪制好的電路原理圖如圖附錄I所示</p><p><b> 印制板圖繪制說明</b></p><p><b> 1.生成網(wǎng)絡(luò)表文件</b></p><p> 打開原理圖文件,執(zhí)行菜單命令 Tools/ERC,系統(tǒng)彈出Step Electrical Rule Check設(shè)置對(duì)話
16、框,如圖9所示,如果此時(shí)檢查沒有錯(cuò)誤,可以生成網(wǎng)絡(luò)表。</p><p><b> 圖9電氣規(guī)則檢查</b></p><p> 當(dāng)我們?cè)O(shè)計(jì)好原理圖,在進(jìn)行了ERC電氣規(guī)則檢查正確無誤后,就要生成網(wǎng)絡(luò)表,為PCB布線做準(zhǔn)備。打開Design/Create Netlist對(duì)話框,生成網(wǎng)絡(luò)表。網(wǎng)表生成并保存后,就可以進(jìn)行PCB設(shè)計(jì)了。生成的網(wǎng)絡(luò)表如圖10所示。 </
17、p><p><b> 圖10網(wǎng)絡(luò)表的生成</b></p><p><b> 2.元件封裝的建立</b></p><p> 如果我們新建元件在封裝庫里沒有相對(duì)應(yīng)的封裝,那應(yīng)該在Pcblib.lib中按任務(wù)要求建立一個(gè)封裝,首先根據(jù)任務(wù)書中給的尺寸距離,開始在封裝庫中放置焊點(diǎn),放置焊點(diǎn)時(shí)光標(biāo)變?yōu)槭?,中間帶有一個(gè)焊盤,移動(dòng)光
18、標(biāo)使焊盤到達(dá)合適的位置后,單擊鼠標(biāo)將其定位,將工作層面切換到頂層布線層,執(zhí)行菜單命令畫線,然后畫出繪制元件的外形輪廓——方形。如圖11。</p><p><b> 圖11元件封裝</b></p><p><b> 3.繪制印制板圖</b></p><p> 在Document中新建PCB1.PCB文件,在keepou
19、tlayer中畫一個(gè)方框,然后選中菜單欄Design/Netlist,打開網(wǎng)絡(luò)表添加對(duì)話框,如圖12所示,然后選擇自動(dòng)布局,進(jìn)行多次布局,使它盡可能完美,然后選擇自動(dòng)布線,彈出一個(gè)對(duì)話框如圖13所示,勾選選項(xiàng),去掉多余的選項(xiàng),選擇全部布線,生成印制版圖(見附錄Ⅱ)。</p><p><b> 圖12網(wǎng)絡(luò)表添加</b></p><p><b> 圖13自動(dòng)
20、布線</b></p><p><b> 總結(jié) </b></p><p> 通過這次設(shè)計(jì)訓(xùn)練,我學(xué)習(xí)了如何使用Protel 99 Se的知識(shí),學(xué)習(xí)了運(yùn)用Protel 99 SE進(jìn)行繪制電路原理圖、建立元件庫、生成網(wǎng)絡(luò)表,進(jìn)行封裝,制作PCB板。在這個(gè)過程中鞏固了已學(xué)過的電子技術(shù)的基礎(chǔ)知識(shí),學(xué)會(huì)用Protel軟件,為以后基礎(chǔ)課和專業(yè)課程的學(xué)習(xí)建立初步基
21、礎(chǔ)并提高自己的實(shí)踐能力。通過這次一個(gè)綜合設(shè)計(jì)訓(xùn)練的機(jī)會(huì),我學(xué)到了很多的知識(shí),掌握了Protel99 SE軟件系統(tǒng)的相關(guān)知識(shí),按自己步驟完成了設(shè)計(jì),畫出了原理圖和仿真圖,掌握了有關(guān)電路的畫圖方法,對(duì)它的原理和作用有了進(jìn)一步的了解。雖說我們?cè)O(shè)計(jì)的時(shí)間上有些短暫,但我們這些天很努力去做,互相探討,學(xué)習(xí)。 我們都在利用這些天時(shí)間做這個(gè)設(shè)計(jì)竟自己最大的努力去完成設(shè)計(jì),去查找相關(guān)的資料。但這其中也有不足之處因?yàn)闀r(shí)間倉促我們?cè)O(shè)計(jì)的電路不是很專業(yè),再有
22、由于我們欠缺很多專業(yè)知識(shí),設(shè)計(jì)上出現(xiàn)了很多問題,但經(jīng)過努力和探討請(qǐng)教完成了這次設(shè)計(jì)任務(wù)??傊?jīng)過共同努力還是完成了預(yù)期的實(shí)訓(xùn)任務(wù)。</p><p> 總之,這次實(shí)訓(xùn)任務(wù),讓我深入的了解如何使用Protel軟件,通過</p><p><b> 參考文獻(xiàn)</b></p><p> [1]高鵬.電路設(shè)計(jì)與制作-Protel99se入門與提高,[
23、M]北京機(jī)械工業(yè)出版社2000出年版</p><p> [2]張利國(guó).Protel電路板設(shè)計(jì)入門與應(yīng)用實(shí)例 北京:中國(guó)電力出版社,2013.04</p><p> [3]趙建領(lǐng).Protel 99 SE設(shè)計(jì)寶典.第2版 ,[M]北京:電子工業(yè)出版社,2011</p><p> [4]鄧奕.Protel 99 SE原理圖與PCB設(shè)計(jì),[M]北京:人民郵電出版社,
24、2011</p><p> [5]陳強(qiáng).Protel電路設(shè)計(jì)入門與實(shí)例,[M]北京:中國(guó)電力出版社,2009 </p><p> [6]孫衛(wèi)峰.Protel應(yīng)用技術(shù),[M]北京:人民郵電出版社,2009</p><p> [7]王衛(wèi)兵.PROTEL99SE基礎(chǔ)教程,[M]北京:北京郵電出版社,2010</p><p> [8]杜剛.電
25、路板設(shè)計(jì)與制作:Protel應(yīng)用教程主編,[M]清華大學(xué)出版社 2010 </p><p> 附錄I 電路原理圖</p><p><b> 圖14原理圖</b></p><p> 附錄II 印制板圖</p><p><b> 圖15印制板</b></p><p>
26、<b> 軟件設(shè)計(jì)部分</b></p><p><b> 任務(wù)說明</b></p><p> 任務(wù)主要解決猴子吃桃子的問題。一群猴子摘了一堆桃子,他們每天都吃當(dāng)前桃子的一半且再多吃一個(gè),到了第10天就只余下一個(gè)桃子。用多種方法實(shí)現(xiàn)求出原來這群猴子共摘了多少個(gè)桃子。在課程設(shè)計(jì)中,系統(tǒng)開發(fā)平臺(tái)為Windows 2000,程序設(shè)計(jì)設(shè)計(jì)語言采用Vi
27、sual C++,數(shù)據(jù)庫采用MS SQL 2000,程序運(yùn)行平臺(tái)為Windows 98/2000/XP。</p><p> 在整個(gè)程序中分別采用數(shù)組數(shù)據(jù)結(jié)構(gòu)、鏈數(shù)據(jù)結(jié)構(gòu)、遞歸等結(jié)構(gòu)形式實(shí)現(xiàn)此問題的求解。程序通過調(diào)試運(yùn)行,初步實(shí)現(xiàn)了設(shè)計(jì)目標(biāo)。猴子吃桃問題涉及一個(gè)比較有趣的數(shù)組,把猴子吃桃的天數(shù)倒過來看的話,以天數(shù)作為數(shù)組的下標(biāo)i,剩下桃子的個(gè)數(shù)a[i]的遞推公式為a[i]=(a[i-1]+1)*2。a[i]實(shí)際代
28、表了倒數(shù)第i天剩下的桃子數(shù)。所以可以求得此數(shù)組的通項(xiàng)公式為a[i]=3*pow(2,(i-1))-2 (i>=2)</p><p> 按照要求完成軟件設(shè)計(jì)任務(wù)</p><p><b> 1.需求分析</b></p><p> 有一群猴子摘了一堆桃子,他們每天都吃當(dāng)前桃子的一半且再多吃一個(gè),到了第10天就只余下一個(gè)桃子。用兩種方法實(shí)
29、現(xiàn)求出原來這群猴子共摘了多少個(gè)桃子。</p><p><b> 要求:</b></p><p> (1) 采用數(shù)組數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)上述求解</p><p> ?。?) 采用鏈數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)上述求解</p><p><b> 2.概要設(shè)計(jì) </b></p><p
30、> ?。?)用數(shù)組數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)上述求解</p><p> 在taozi函數(shù)中定義一個(gè)一維數(shù)組,分別存儲(chǔ)每天的桃子個(gè)數(shù),根據(jù)題目的內(nèi)容找出各個(gè)數(shù)之間的關(guān)系,用數(shù)組元素表示出來,根據(jù)用戶輸入要計(jì)算哪一天的桃子,用for循環(huán)控制結(jié)束。在main函數(shù)中讓用戶輸入要計(jì)算的哪一天,調(diào)用taozi函數(shù),以便用戶可查出任意一天的桃子個(gè)數(shù),用switch語句判斷用戶要執(zhí)行的功能,然后用while循環(huán)控制,直到用戶輸入0為止
31、。</p><p> ?。?)用鏈數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)上述求解</p><p> 先寫出預(yù)定義常量和類型,寫出結(jié)點(diǎn)的類型定義,創(chuàng)建結(jié)點(diǎn),初始化鏈表,定義變量并初始化,找出結(jié)點(diǎn)與其后繼結(jié)點(diǎn)之間的聯(lián)系,然后在主函數(shù)中控制。</p><p><b> (3)設(shè)計(jì)方案</b></p><p> 如果用數(shù)組結(jié)構(gòu)解決這個(gè)問題,把猴子吃
32、桃的天數(shù)倒過來看的話,以天數(shù)作為數(shù)組的下標(biāo)i,剩下桃子的個(gè)數(shù)a[i]的遞推公式為a[i]=(a[i-1]+1)*2。a[i]實(shí)際代表了倒數(shù)第i天剩下的桃子數(shù)。所以可以求得此數(shù)組的通項(xiàng)公式為a[i]=3*2e(i-1)-2 (i>=2)。</p><p> 如果用鏈結(jié)構(gòu)解決這個(gè)問題,建立一個(gè)鏈表,根據(jù)每天桃子數(shù)與后一天桃子數(shù)的關(guān)系n=2*n+2,依次將每天的桃子數(shù)存進(jìn)鏈表中,最后輸出第一天的桃子數(shù)。<
33、;/p><p> 如果用遞歸結(jié)構(gòu)解決這個(gè)問題,要求利用他們每天都吃當(dāng)前桃子的一半且再多吃一個(gè)這一特點(diǎn),設(shè)計(jì)一個(gè)遞歸算法。</p><p><b> 3.詳細(xì)設(shè)計(jì)</b></p><p><b> (1)數(shù)組結(jié)構(gòu)</b></p><p> 把猴子吃桃的天數(shù)倒過來看的話,以天數(shù)作為數(shù)組的下標(biāo)i,剩下
34、桃子的個(gè)數(shù)a[i]的遞推公式為a[i]=(a[i-1]+1)*2。a[i]實(shí)際代表了倒數(shù)第i天剩下的桃子數(shù)。所以可以求得此數(shù)組的通項(xiàng)公式為a[i]=3*pow(2,(i-1))-2 (i>=2)。數(shù)組結(jié)構(gòu)算法的流程圖如圖16:</p><p><b> 圖16數(shù)組流程圖</b></p><p> int day,tao[11]; //定義數(shù)組和下標(biāo)<
35、;/p><p> tao[0]=0; //tao[0]賦值為0</p><p> tao[1]=1; //倒數(shù)第一天的桃子數(shù)為1</p><p> for(day=2;day<=10;day++)</p><p> tao[day]=3*pow(2,day-1)-2; //給數(shù)組的賦值</p&
36、gt;<p> printf("最初的桃子數(shù)為%d\n",tao[10]);//輸出最初的桃子數(shù)</p><p><b> ?。?)鏈結(jié)構(gòu)</b></p><p> 用鏈結(jié)構(gòu)實(shí)現(xiàn)這個(gè)算法,其核心是利用鏈表這種存儲(chǔ)結(jié)構(gòu),將每天的桃子數(shù)存儲(chǔ)在鏈表中,在鏈表中實(shí)現(xiàn)數(shù)的遞推。</p><p> 首先是建立一個(gè)空鏈
37、表,產(chǎn)生一個(gè)頭結(jié)點(diǎn),且將頭結(jié)點(diǎn)的地址賦給L。然后把每天的桃子數(shù)從鏈表的第一個(gè)結(jié)點(diǎn)插入鏈表。最后第一天的桃子數(shù)被最后一個(gè)插入鏈表,成為鏈表中第一個(gè)值,將其賦給e,最后只要輸出e即得到第一天的桃子數(shù)。</p><p> 建立單鏈表的程序代碼如下:</p><p> void InitList(LinkList &L)//構(gòu)造一個(gè)空鏈鏈表</p><p>&l
38、t;b> { </b></p><p> L=(LinkList)malloc(sizeof(LNode));//產(chǎn)生頭結(jié)點(diǎn),并使L指向此頭結(jié)點(diǎn)</p><p> if(!L) exit(OVERFLOW);</p><p> L->next=NULL;</p><p><b> }</b&g
39、t;</p><p> 這個(gè)算法中,我運(yùn)用了單鏈表,單鏈表每個(gè)結(jié)點(diǎn)由數(shù)據(jù)和指向后驅(qū)結(jié)點(diǎn)指針兩部分構(gòu)成。在插入數(shù)據(jù)時(shí),將插入的位置的前一項(xiàng)的原有后去指針賦給此結(jié)點(diǎn)的后去指針,然后把插入結(jié)點(diǎn)的data地址賦給前一結(jié)點(diǎn)的后驅(qū)指針,插入就完成了。</p><p> 插入結(jié)點(diǎn)的程序代碼如下:</p><p> Status ListInsert(LinkList L,i
40、nt i,ElemType e)//在第i個(gè)位置之前插入元素e</p><p><b> { </b></p><p> int j=0;//計(jì)數(shù)器初值為0</p><p> LinkList s,p=L;//p指向頭結(jié)點(diǎn)</p><p> while(p&&j<i-1)//尋找第i個(gè)結(jié)點(diǎn)&
41、lt;/p><p><b> {</b></p><p><b> j++;</b></p><p> p=p->next;</p><p><b> }</b></p><p> 鏈?zhǔn)綌?shù)據(jù)結(jié)構(gòu)圖如圖17:</p><p&
42、gt;<b> head</b></p><p> 圖17鏈表結(jié)點(diǎn)邏輯結(jié)構(gòu)圖</p><p><b> ?。?)遞歸</b></p><p> 設(shè)計(jì)遞歸算法,利用x=2*x+2,定義一個(gè)函數(shù)sum_fan,然后不斷調(diào)用自身,求得第一天的桃子數(shù)。</p><p> 遞歸算法的流程圖如圖18&l
43、t;/p><p><b> 圖18遞歸流程圖</b></p><p><b> 主要程序代碼如下:</b></p><p> int sum_fan(int n,int i) //子函數(shù)sum_fun,參數(shù)n和i接受主函數(shù)的參數(shù) x和day</p><p><b> {</b&
44、gt;</p><p><b> if (i>0)</b></p><p><b> {</b></p><p> n = sum_fan((n+1)*2,--i); //每一次都用((n+1)*2)的值去調(diào)用子函數(shù)本身 </p><p><b> }</b>
45、;</p><p> return n; //返回結(jié)果</p><p> 三、程序調(diào)試過程以及實(shí)驗(yàn)結(jié)果</p><p><b> 1.調(diào)試分析</b></p><p> (1)在用鏈數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)時(shí),運(yùn)行時(shí)沒有顯示錯(cuò)誤,但輸出不是預(yù)測(cè)的結(jié)果,代碼如下:</p><
46、p> for(i=m-1;i>0;i--)</p><p><b> {</b></p><p> s=(LNode *) malloc(sizeof(LNode));</p><p> p->next=s;</p><p> s->data=2*(p->data+1);</
47、p><p> s->next=NULL;</p><p><b> }</b></p><p> 在指針的移動(dòng)時(shí),由于p總是第一個(gè)結(jié)點(diǎn),在for循環(huán)前已經(jīng)被賦值,指針P 應(yīng)該總是指向最后一個(gè)結(jié)點(diǎn)的,所以在這句s->next=NULL前加上一句p=s就行了, 就能輸出正確結(jié)果。</p><p> (2)在生
48、成新結(jié)點(diǎn)時(shí),一定要用強(qiáng)制類型轉(zhuǎn)換,要不就要出錯(cuò)。不能把s=(LNode *) malloc(sizeof(LNode))寫成s=(LNode) malloc(sizeof(LNode));因?yàn)樗鼈儾粚儆谕活愋汀?lt;/p><p> ?。? )在用棧數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)的過程中,雖然只有一個(gè)錯(cuò)誤,但卻顯示了好多錯(cuò)誤。主要原因是由于一個(gè)參數(shù)是在main函數(shù)中定義的,但卻被其它函數(shù)調(diào)用,只要 把該參數(shù)定義成全局變量就行了。&l
49、t;/p><p> ?。?)在用while循環(huán)時(shí),由于控制條件的不恰當(dāng)導(dǎo)致的錯(cuò)誤,不過只要再認(rèn)真分析一下,就正確了。</p><p> (5)還有些其它方面的錯(cuò)誤,不過只要看一眼,就能改正,是粗心造成的。</p><p><b> 2.運(yùn)行結(jié)果</b></p><p> 進(jìn)入運(yùn)行界面如圖19:</p>&
50、lt;p><b> 圖19運(yùn)行界面</b></p><p> 數(shù)組結(jié)構(gòu)的運(yùn)行結(jié)果如圖20:</p><p><b> 圖20數(shù)組結(jié)構(gòu)結(jié)果</b></p><p> 鏈結(jié)構(gòu)的運(yùn)行結(jié)果如圖21:</p><p><b> 圖21鏈結(jié)構(gòu)結(jié)果</b></p>
51、<p> 直接求解結(jié)果如圖22:</p><p><b> 圖22直接求解結(jié)果</b></p><p><b> 結(jié)論</b></p><p> 1.各算法特點(diǎn)及其功能擴(kuò)展:</p><p> 運(yùn)用數(shù)組數(shù)據(jù)結(jié)構(gòu)求解最大的優(yōu)點(diǎn)是存取方便,但是由于在使用之前得確定數(shù)組長(zhǎng)度,所以有
52、時(shí)會(huì)使得空間利用率不高,浪費(fèi)內(nèi)存;而鏈?zhǔn)酱鎯?chǔ)是一種動(dòng)態(tài)的存儲(chǔ)方式,其長(zhǎng)度可以根據(jù)需要進(jìn)行適當(dāng)?shù)淖儎?dòng)的,因?yàn)樗抢弥羔榿碚以厮诘拇鎯?chǔ)單元的;另外遞歸算法所需的存儲(chǔ)空間要相對(duì)少,但在分析時(shí)相對(duì)來說會(huì)顯得較復(fù)雜些。其實(shí),我們可以綜合各種方法的利弊,通過以下代碼的功能,如利用for循環(huán)進(jìn)行輸出,就可以得到每一天桃子的剩余量,從而提高解決問題的效率。</p><p><b> 2.結(jié)果的驗(yàn)證</b&
53、gt;</p><p> 由運(yùn)行結(jié)果可知原始桃子個(gè)數(shù)為:1534 個(gè),則以下為每天所剩余桃子個(gè)數(shù)的驗(yàn)證: </p><p> 第一天:3070-(3070/2+1)=153 第二天:1534-(1534/2+1)=766 </p><p> 第三天:766-(766/2+1)=382 第四天:382-(382/2+1)=190 <
54、;/p><p> 第五天:190-(190/2+1)=94 第六天:94-(94/2+1)=46 </p><p> 第七天:46-(46/2+1)=22 第八天:22-(22/2+1)=10</p><p> 第九天:10-(10/2+1)=4 第十天:4-(4/2+1)=1</p><
55、;p><b> 3.實(shí)驗(yàn)總結(jié)</b></p><p> 這次的課程設(shè)計(jì)的內(nèi)容是用C語言實(shí)現(xiàn)猴子吃桃子問題,這對(duì)我來說是個(gè)很具有挑戰(zhàn)性的任務(wù),雖然只做了一個(gè)很簡(jiǎn)單的學(xué)生學(xué)籍管理模塊,但通過自己的設(shè)計(jì)也從中學(xué)到了不少東西,更深刻的理解了課本中的內(nèi)容。計(jì)算機(jī)軟件技術(shù)基礎(chǔ)是一門實(shí)踐性較強(qiáng)的課程,為了學(xué)好這門課程,必須在掌握理論知識(shí)的同時(shí),加強(qiáng)上機(jī)實(shí)踐。同時(shí)再次深刻理解了C語言以及計(jì)算機(jī)軟件
56、技術(shù)基礎(chǔ)的知識(shí),文件的概念和相關(guān)操作,以及有關(guān)數(shù)據(jù)結(jié)構(gòu)的很多知識(shí)。根據(jù)實(shí)際問題的需要,對(duì)個(gè)方面的優(yōu)缺點(diǎn)加以綜合平衡,從中選擇比較適宜的實(shí)現(xiàn)方法。在本次課程設(shè)計(jì)中,我明白了理論與實(shí)際相結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫程序的能力,培養(yǎng)了基本的,良好的程序設(shè)計(jì)技能。提高綜合運(yùn)用所學(xué)知識(shí)的能力。</p><p> 我不斷地去找書本知識(shí)和查閱其它有關(guān)資料,不僅鞏固了對(duì)課本知識(shí)的掌握,還有利于以后更好的進(jìn)步,提高了
57、對(duì)課外知識(shí)的了解,雖然花費(fèi)了不少時(shí)間,但只要學(xué)到有價(jià)值的東西,我認(rèn)為都是值得的。在完成該軟件設(shè)計(jì)的過程中,我問了同學(xué)和老師,還查閱了很多和鏈表有關(guān)系的書籍,通過學(xué)習(xí),翻看以前學(xué)過的知識(shí),使我明白了我在學(xué)習(xí)知識(shí)上的很多不足。不過在此同時(shí)又重新復(fù)習(xí)了課本,從中學(xué)到了許多以前未學(xué)到的知識(shí),感覺非常有成就感,讓我對(duì)自己更加有信心,讓我對(duì)數(shù)據(jù)結(jié)構(gòu)這門課程也更感興趣了,以前我一直感覺枯燥難學(xué)的數(shù)據(jù)結(jié)構(gòu),現(xiàn)在我也愿意去認(rèn)真研究學(xué)習(xí)了。</p&g
58、t;<p><b> 五、參考文獻(xiàn)</b></p><p> [1]嚴(yán)蔚敏,吳偉民 .?dāng)?shù)據(jù)結(jié)構(gòu)(C語言版),[M]北京:北京大學(xué)出版社,2006</p><p> [2]譚浩強(qiáng).C語言程序設(shè)計(jì)教程,[M]北京:高等教育出版社,1998</p><p> [3]王紅梅.?dāng)?shù)據(jù)結(jié)構(gòu),[M]北京:清華大學(xué)出版社,2009</
59、p><p> [4]李大友.C語言程序設(shè)計(jì),[M]北京:清華大學(xué)出版社,1999</p><p> [5]劉振安.C語言設(shè)計(jì)課程設(shè)計(jì),[M]北京:機(jī)械工業(yè)出版社,2007</p><p><b> 六、程序清單</b></p><p> #include"stdio.h" </p>
60、<p> #include"stdlib.h" </p><p> #include"windows.h" //包含系統(tǒng)命令</p><p> #include"malloc.h" </p><p><b> //用數(shù)組實(shí)現(xiàn) </b></p><p
61、> void shuzu(int a[]){ </p><p><b> int i; </b></p><p> a[9]=1; //初始化信息 </p><p> printf("\t\t\t day number \n"); //day為天數(shù)?number為對(duì)應(yīng)的桃子數(shù)
62、 </p><p> printf("\t\t\t\t ┏━━━━━┓ \n"); </p><p> for(i=9;i>=1;i--) </p><p> a[i-1]=(a[i]+1)*2; </p><p> //以數(shù)組形式輸出桃子每天的數(shù)量 </p><p&
63、gt; for(i=0;i<=9;i++){ </p><p> printf("\t\t\t\t %3d┃%6d ┃\n",i+1,a[i]); </p><p> printf("\t\t\t\t ┣━━━━━┫ \n"); </p><p><b>
64、 } </b></p><p> printf("\t\t\t →即猴子共摘了%d個(gè)桃子\n\n",a[0]); </p><p><b> } </b></p><p><b> //用單鏈表實(shí)現(xiàn) </b></p><p> typedef st
65、ruct node</p><p><b> { </b></p><p> int data; </p><p> struct node *next; </p><p> }LinkList; //定義鏈表結(jié)點(diǎn) </p><p> LinkList *create()</p&g
66、t;<p><b> { </b></p><p> LinkList *head,*s; </p><p> int day,num; </p><p> day=10;num=1; //初始化信息 </p><p> head=(LinkList *)malloc(sizeof(L
67、inkList)); //生成頭結(jié)點(diǎn)</p><p> while(day>0)//while控制的循環(huán)語句</p><p><b> { </b></p><p> s=(LinkList *)malloc(sizeof(LinkList)); //生成一個(gè)新的結(jié)點(diǎn)</p><p> s->data
68、=num; </p><p> s->next=head->next; </p><p> head->next=s; </p><p> num=(num+1)*2; //計(jì)算下個(gè)結(jié)點(diǎn)的data域值 </p><p><b> day--; </b></p><p>&
69、lt;b> } </b></p><p> return head; </p><p><b> } </b></p><p> void print(LinkList *L){ //輸出單鏈表 </p><p> LinkList *p=L->next; </p><
70、;p> int day=10,i=1,m; </p><p> printf("\n\t下面依次從第一天開始連續(xù)以鏈表形式輸出每天的桃子數(shù)為?\n\n"); </p><p> while(p && day>0){ </p><p> printf(" ?%5d ?→",p->
71、data); </p><p> if(day==10) m=p->data; </p><p> p=p->next; </p><p> day--;i++; </p><p> if(i==6) printf("\n\n"); </p><p><b> }
72、 </b></p><p> printf("NULL\n\n"); </p><p> printf("\t\t\t →即猴子共摘了%d個(gè)桃子\n\n",m); </p><p><b> } </b></p><p><b> //直接求
73、解 </b></p><p> void direct(){ //直接通過while語句實(shí)現(xiàn) </p><p> int day=10,n=1; </p><p> printf("\t\t\t |------------|------------|\n"); </p><p> printf(
74、"\t\t\t | day | number |\n"); </p><p> printf("\t\t\t | 10\t| 1 |\n",day,n); </p><p> while(day>1){ </p><p>
75、n=(n+1)*2; </p><p><b> day--; </b></p><p> printf("\t\t\t | %-6d| %-7d|\n",day,n); </p><p><b> } </b></p><p> prin
76、tf("\t\t\t |------------|------------|\n"); </p><p> printf("\t\t\t →即猴子共摘了%d個(gè)桃子\n\n",n); </p><p><b> } </b></p><p> //任意一天猴子所吃的桃子數(shù)及剩下的桃子數(shù)
77、</p><p> void oneday(){ </p><p> int day,n=10,count=1; </p><p> printf("\n\t您想查看幾天前猴子吃掉的桃子數(shù)及所剩下的桃子數(shù)?請(qǐng)輸入天數(shù)。"); </p><p> scanf("%d",&day); &
78、lt;/p><p> if(day>0 && day<11){ </p><p> while(n!=day){ </p><p> count=(count+1)*2; </p><p><b> n--; </b></p><p><b> } &l
79、t;/b></p><p> printf("\t\t |------------|------------|------------|\n"); </p><p> printf("\t\t | day | eat | shengyu |\n"); </p><p>
80、 printf("\t\t |------------|------------|------------|\n"); </p><p> printf("\t\t | %-6d | %-7d | %-7d |\n",day,count+2,count); </p><p> printf(&quo
81、t;\t\t |------------|------------|------------|\n\n"); </p><p><b> } </b></p><p> else MessageBox(NULL,"對(duì)不起?此刻猴子沒有桃子?","提示",MB_OK); </p><p>
82、;<b> } </b></p><p><b> //運(yùn)算菜單設(shè)置 </b></p><p> void main_menu(){ </p><p> system("color 2A"); //設(shè)置屏幕背景顏色為藍(lán)色?字體顏色為綠色 </p><p> print
83、f(" ╔═══════════════════════════════╗\n"); </p><p> printf(" ║? ? ║\n"); </p><p> printf("
84、 ║◆ ◆║\n"); </p><p> printf(" ║? 歡迎進(jìn)入猴子吃桃程序設(shè)計(jì) ? ║\n"); </p><p> printf
85、(" ║◆ 幫助請(qǐng)按 0 ◆║\n"); </p><p> printf(" ║? ? ║\n"); </p>&
86、lt;p> printf(" ║◎ ●┅┅┅┅┅┅┅ 數(shù)組求解請(qǐng)按 1┅┅┅┅┅┅┅● ◎║\n"); </p><p> printf(" ║? ●┅┅┅┅┅┅┅ 鏈表求解請(qǐng)按 2┅┅┅┅┅┅┅● ? ║\n"); </p><p> printf("
87、 ║◆ ●┅┅┅┅┅┅┅ 直接求解請(qǐng)按 3┅┅┅┅┅┅┅● ◆║\n"); </p><p> printf(" ║? ●┅┅┅┅┅ 任意一天吃桃情況請(qǐng)按 4 ┅┅┅┅● ? ║\n"); </p><p> printf(" ║? ●┅┅┅┅
88、┅┅ 安全退出系統(tǒng)請(qǐng)按 5┅┅┅┅┅● ? ║\n"); </p><p> printf(" ║◆ ◆║\n"); </p><p> printf(" ║?
89、 ? ║\n"); </p><p> printf(" ╚═══════════════════════════════╝\n"); </p><p><b> } </b></p><p> voi
90、d main(){ </p><p> LinkList *L;</p><p> int a[10];</p><p> int choice;</p><p><b> a:</b></p><p><b> do{ </b></p><
91、p> main_menu(); </p><p> printf("\n"); </p><p> printf("\t請(qǐng)選擇(0-5):[ ]\b\b"); </p><p> scanf("%d",&choice); </p><p> if(choic
92、e<0 || choice>5){ </p><p> MessageBox(NULL,"您的輸入有誤","提示",MB_OK); </p><p><b> goto a; </b></p><p><b> } </b></p><p>
93、 else switch(choice){ </p><p> case 0:MessageBox (NULL,"已知猴子每天吃當(dāng)前桃子的一半且再多吃一 個(gè)?到了第10天就余下一個(gè)桃子,求共摘了多少桃子?","題目 ",MB_ICONQUESTION);break; </p><p> case 1:shuzu(a);break; </p
94、><p> case 2:L=create();print(L);break; </p><p> case 3:direct();break; </p><p> case 4:oneday();break;</p><p> case 5: //退出系統(tǒng) </p><p> printf("\n\
95、n"); </p><p> printf(" *━*━*━*━*━*━*━*━*━*━*-歡迎再次光臨-*━*━*━*━*━*━*━*━*━*━*\n"); </p><p> printf(" 設(shè)計(jì)者:楊凱 \n"
96、 ); </p><p> printf(" 班級(jí):14020104\n" ); </p><p> printf(" 設(shè)計(jì)時(shí)間:2013年7月\n"
97、 ); </p><p><b> exit(0); </b></p><p><b> } </b></p><p><b> } </b></p><p> while(choice>=0 && c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- c++課程設(shè)計(jì)報(bào)告---猴子吃桃問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)-猴子吃桃
- 猴子吃桃問題數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)
- 猴子吃桃問題-數(shù)據(jù)結(jié)構(gòu)與算法課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)——多項(xiàng)式及猴子吃桃問題
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---猴子吃桃子問題
- 《會(huì)計(jì)實(shí)訓(xùn)》課程設(shè)計(jì)
- c語言上機(jī)實(shí)訓(xùn)
- 【課程設(shè)計(jì)】c語言課程設(shè)計(jì)
- 機(jī)床課程設(shè)計(jì)實(shí)訓(xùn)報(bào)告
- protel課程設(shè)計(jì)
- c語言課程設(shè)計(jì)
- c語言課程設(shè)計(jì)
- c語言課程設(shè)計(jì)
- c語言程序設(shè)計(jì)實(shí)訓(xùn)教程習(xí)題和實(shí)驗(yàn)解答
- protel課程設(shè)計(jì)報(bào)告
- 論c語言程序設(shè)計(jì)實(shí)訓(xùn)總結(jié)
- protel軟件課程設(shè)計(jì)
- 機(jī)床課程設(shè)計(jì)實(shí)訓(xùn)報(bào)告1
- 電子日歷課程設(shè)計(jì)實(shí)訓(xùn)報(bào)告
評(píng)論
0/150
提交評(píng)論