2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、<p>  電子設(shè)計(jì)應(yīng)用軟件訓(xùn)練總結(jié)報(bào)告</p><p>  學(xué)生姓名: </p><p>  專 業(yè): </p><p>  班 級: </p><p><b>  學(xué) 號: </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>  成績:_____</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對話框,選取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對話框并在其中選擇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è)置對話

16、框,如圖9所示,如果此時(shí)檢查沒有錯(cuò)誤,可以生成網(wǎng)絡(luò)表。</p><p><b>  圖9電氣規(guī)則檢查</b></p><p>  當(dāng)我們設(shè)計(jì)好原理圖,在進(jìn)行了ERC電氣規(guī)則檢查正確無誤后,就要生成網(wǎng)絡(luò)表,為PCB布線做準(zhǔn)備。打開Design/Create Netlist對話框,生成網(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>  如果我們新建元件在封裝庫里沒有相對應(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ò)表添加對話框,如圖12所示,然后選擇自動(dòng)布局,進(jìn)行多次布局,使它盡可能完美,然后選擇自動(dòng)布線,彈出一個(gè)對話框如圖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的知識,學(xué)習(xí)了運(yùn)用Protel 99 SE進(jìn)行繪制電路原理圖、建立元件庫、生成網(wǎng)絡(luò)表,進(jìn)行封裝,制作PCB板。在這個(gè)過程中鞏固了已學(xué)過的電子技術(shù)的基礎(chǔ)知識,學(xué)會用Protel軟件,為以后基礎(chǔ)課和專業(yè)課程的學(xué)習(xí)建立初步基

21、礎(chǔ)并提高自己的實(shí)踐能力。通過這次一個(gè)綜合設(shè)計(jì)訓(xùn)練的機(jī)會,我學(xué)到了很多的知識,掌握了Protel99 SE軟件系統(tǒng)的相關(guān)知識,按自己步驟完成了設(shè)計(jì),畫出了原理圖和仿真圖,掌握了有關(guān)電路的畫圖方法,對它的原理和作用有了進(jìn)一步的了解。雖說我們設(shè)計(jì)的時(shí)間上有些短暫,但我們這些天很努力去做,互相探討,學(xué)習(xí)。 我們都在利用這些天時(shí)間做這個(gè)設(shè)計(jì)竟自己最大的努力去完成設(shè)計(jì),去查找相關(guān)的資料。但這其中也有不足之處因?yàn)闀r(shí)間倉促我們設(shè)計(jì)的電路不是很專業(yè),再有

22、由于我們欠缺很多專業(yè)知識,設(shè)計(jì)上出現(xiàn)了很多問題,但經(jī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]張利國.Protel電路板設(shè)計(jì)入門與應(yīng)用實(shí)例 北京:中國電力出版社,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]北京:中國電力出版社,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ā)平臺為Windows 2000,程序設(shè)計(jì)設(shè)計(jì)語言采用Vi

27、sual C++,數(shù)據(jù)庫采用MS SQL 2000,程序運(yùn)行平臺為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ù)組,分別存儲每天的桃子個(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>  (2)用鏈數(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> ?。?)數(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è)算法,其核心是利用鏈表這種存儲結(jié)構(gòu),將每天的桃子數(shù)存儲在鏈表中,在鏈表中實(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> ?。?)在用鏈數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)時(shí),運(yùn)行時(shí)沒有顯示錯(cuò)誤,但輸出不是預(yù)測的結(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> ?。?)在生

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> ?。?)還有些其它方面的錯(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ù)組長度,所以有

52、時(shí)會使得空間利用率不高,浪費(fèi)內(nèi)存;而鏈?zhǔn)酱鎯κ且环N動(dòng)態(tài)的存儲方式,其長度可以根據(jù)需要進(jìn)行適當(dāng)?shù)淖儎?dòng)的,因?yàn)樗抢弥羔榿碚以厮诘拇鎯卧?;另外遞歸算法所需的存儲空間要相對少,但在分析時(shí)相對來說會顯得較復(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)猴子吃桃子問題,這對我來說是個(gè)很具有挑戰(zhàn)性的任務(wù),雖然只做了一個(gè)很簡單的學(xué)生學(xué)籍管理模塊,但通過自己的設(shè)計(jì)也從中學(xué)到了不少東西,更深刻的理解了課本中的內(nèi)容。計(jì)算機(jī)軟件技術(shù)基礎(chǔ)是一門實(shí)踐性較強(qiáng)的課程,為了學(xué)好這門課程,必須在掌握理論知識的同時(shí),加強(qiáng)上機(jī)實(shí)踐。同時(shí)再次深刻理解了C語言以及計(jì)算機(jī)軟件

56、技術(shù)基礎(chǔ)的知識,文件的概念和相關(guān)操作,以及有關(guān)數(shù)據(jù)結(jié)構(gòu)的很多知識。根據(jù)實(shí)際問題的需要,對個(gè)方面的優(yōu)缺點(diǎn)加以綜合平衡,從中選擇比較適宜的實(shí)現(xiàn)方法。在本次課程設(shè)計(jì)中,我明白了理論與實(shí)際相結(jié)合的重要性,并提高了自己組織數(shù)據(jù)及編寫程序的能力,培養(yǎng)了基本的,良好的程序設(shè)計(jì)技能。提高綜合運(yùn)用所學(xué)知識的能力。</p><p>  我不斷地去找書本知識和查閱其它有關(guān)資料,不僅鞏固了對課本知識的掌握,還有利于以后更好的進(jìn)步,提高了

57、對課外知識的了解,雖然花費(fèi)了不少時(shí)間,但只要學(xué)到有價(jià)值的東西,我認(rèn)為都是值得的。在完成該軟件設(shè)計(jì)的過程中,我問了同學(xué)和老師,還查閱了很多和鏈表有關(guān)系的書籍,通過學(xué)習(xí),翻看以前學(xué)過的知識,使我明白了我在學(xué)習(xí)知識上的很多不足。不過在此同時(shí)又重新復(fù)習(xí)了課本,從中學(xué)到了許多以前未學(xué)到的知識,感覺非常有成就感,讓我對自己更加有信心,讓我對數(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為對應(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ù)?請輸入天數(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,"對不起?此刻猴子沒有桃子?","提示",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、(" ║◆ 幫助請按 0 ◆║\n"); </p><p>  printf(" ║? ? ║\n"); </p>&

86、lt;p>  printf(" ║◎ ●┅┅┅┅┅┅┅ 數(shù)組求解請按 1┅┅┅┅┅┅┅● ◎║\n"); </p><p>  printf(" ║? ●┅┅┅┅┅┅┅ 鏈表求解請按 2┅┅┅┅┅┅┅● ? ║\n"); </p><p>  printf("

87、 ║◆ ●┅┅┅┅┅┅┅ 直接求解請按 3┅┅┅┅┅┅┅● ◆║\n"); </p><p>  printf(" ║? ●┅┅┅┅┅ 任意一天吃桃情況請按 4 ┅┅┅┅● ? ║\n"); </p><p>  printf(" ║? ●┅┅┅┅

88、┅┅ 安全退出系統(tǒ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請選擇(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(" 班級: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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論