版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 課 程 設(shè) 計 報 告</p><p><b> 穿越沙漠問題</b></p><p><b> 一、設(shè)計任務(wù)與目標(biāo)</b></p><p> 穿越沙漠問題:一輛吉普車穿越1000公里的沙漠,吉普車的總裝耗油量為500加侖,耗油率為每小時1加侖。由于沙漠中沒有油庫,必須先用這輛車在沙漠中建立臨時
2、油庫。</p><p> 請編程求解,若讓吉普車用最少的耗油量穿越沙漠,應(yīng)該在那些地方建立臨時油庫,在每個臨時油庫存儲的油量應(yīng)該是多少。</p><p><b> 具體要求如下;</b></p><p> (1) 運行程序后直接輸出結(jié)果;</p><p> (2) 顯示輸出界面;</p><p
3、> (3) 分條顯示結(jié)果。</p><p><b> 二、方案設(shè)計與論證</b></p><p> 穿越沙漠問題,是一個極值問題。為達(dá)到讓吉普車用最少的耗油量穿越沙漠,則說明該問題只有唯一解。而從問題中我們可以看出,顯然吉普車是不能一次就穿越沙漠的,需要采取推進的方法,也就是在沙漠中前進一定的距離后就要建立臨時油庫為接下的路程做準(zhǔn)備。而我們從題目中可以知道
4、最基本的信息,比如必須要走奇數(shù)次,這樣才能確保最后到達(dá)終點方向。然而我們又要保持效率,就要滿足向終點時要滿載和每個儲油點都要儲油點需要的和路上消耗的油量。</p><p> 而針對這個問題,我們可以采取倒推的方法進行求解,從終點往起點推,然后記錄每個儲油點的位置和儲油量。而相反,正推是不可能的,因為我們不知道第一個儲油點與起點的距離,但卻可以知道最后一個儲油點與終點相距500km。</p><
5、;p> 而我們可以推出,詳細(xì)情況如下圖:</p><p> 我們必須要做到i與i+1點之間往返若干次,而且每次到達(dá)i+1處,吉普車的油要消耗完,每次從i+1處出發(fā)的時候,又要裝滿油。所以我們可以知道,兩點之間的距離必須滿足在耗油最少的條件下,使i點存夠i*500加侖汽油的要求。取第一個例子來說,第一個儲油點i=1應(yīng)該距離終點i=0處500km,而且應(yīng)該在那個儲油點存放500加侖汽油,這樣才能保證吉普車能
6、從i=1處到達(dá)終點i=0處。此時我們將距離設(shè)為distance,儲油點存放油量設(shè)為oil。那么從這個例子中我們知道,distance[1]=500,oil[1]=500。</p><p> 那么繼續(xù)推導(dǎo),為了在i=1處存放500加侖汽油,那么吉普車至少從i=2處開兩趟滿載油的車道i=1處。所以我們可以知道i=2處至少要存放2*500=1000加侖汽油,即oil[2]=1000。加上從i=1返回至i=2處一趟空載
7、,總共往返三次。而在這三次往返路程的耗油量按要求只能為500加侖,即distance12=500/3km。那么我們可以繼而推出distance[2]=distance[1]+distance12=500+500/3。</p><p> 為了直觀的了解情況,詳情情況如下圖:</p><p> 而同樣的,為了在i=2處存放1000加侖汽油,吉普車至少從i=3處開三趟裝滿油的車至i=2處。所
8、以i=3處至少存放3*500=1500加侖汽油,即oil[3]=1500。加上前面一段的返程空車,總共五次往返。路途的耗油量也應(yīng)為最低標(biāo)準(zhǔn)的500侖,即distance23=500/5。而可以得出distance[3]=distance[2]+distance23=500+500/3+500/5。</p><p><b> 詳情情況如下圖:</b></p><p>
9、 所以我們繼續(xù)推導(dǎo)下去的話,我們可以發(fā)現(xiàn):為了在i=k處存放k*500加侖汽油,吉普車至少要從i=k+1處開k趟載滿油的車到i=k處。而我們根據(jù)前面例子的公式可以推出:oil[k+1]=(k+1)*500=oil[k]+500,加上從i=k處返回i=k+1的返趟,總共2k-1次。而同樣的這2k-1次的總耗油量都按照最低標(biāo)準(zhǔn),即distancekk+1=500/(2k-1),distance[k+1]=distance[k]+dista
10、ncekk+1=distance[k]+500/(2k-1)。</p><p> 而我們現(xiàn)在可以知道最后i=n至終點的距離為1000-distance[n],oil[n]=500*n。為了在i=n處取得n*500加侖汽油,吉普車至少從始點開n+1次滿載車到i=n,加上i=n返回始點的n趟返程空車,總共2n+1次,而這總耗油量為(1000-distance[n])*(2n+1),即始點存放油量為oil[n]+(1
11、000-distance[n])*(2n+1)。</p><p> 則我們可以通過輸入代碼來求出我們想得到的值。</p><p> 三、程序框圖或流程圖,程序清單與調(diào)用關(guān)系</p><p> int 定義整型變量</p><p> float 定義浮點型變量</p><p> do-while 循環(huán)體<
12、/p><p><b> k 儲油點的序號</b></p><p> d累計終點至當(dāng)前儲油點的距離</p><p> d1 i=n至始點的距離</p><p> oil 儲油點存放的油量</p><p> distance 距離</p><p><b>
13、四、全部源程序清單</b></p><p> #include<stdio.h></p><p> void main()</p><p><b> {</b></p><p> int k; /*定義每個儲油點的序號*/</p><p> float
14、 d,d1; /*定義d為累計終點至當(dāng)前貯油點的距離,定義d1為i=n至始點的距離*/</p><p> float oil[10],dis[10]; /*oil為每個儲油點存放的油量,distance為該儲油點離終點的距離*/</p><p><b> int i;</b></p><p> printf("N
15、O.\tdistance(km)\toil(cc)\n");</p><p> k=1; /*賦值k為1*/</p><p> d=500; /*從i=1處開始向始點倒推導(dǎo)*/</p><p> dis[1]=500; /*第一段距離為500km*/</p><p> oil[1]=500
16、; /*第一個儲油點的儲油量為500cc*/</p><p> do{ /*進入循環(huán)體*/</p><p><b> k=k+1;</b></p><p> d=d+500/(2*k-1);</p><p><b> dis[k]=d;</b><
17、/p><p> oil[k]=oil[k-1]+500;</p><p> }while(!(d>=1000)); /*達(dá)到起點,跳出循環(huán)*/</p><p> dis[k]=1000; /*置始點至終點的距離值*/</p><p> d1=1000-dis[k-1]; /*求i=n處至始點的距離*
18、/</p><p> oil[k]=d1*(2*k+1)+oil[k-1]; /*得出始點藏油量*/</p><p> for(i=0;i<k;i++) /*進入循環(huán)體,得出每個儲油點的位置 */</p><p> printf("%d\t%f\t%f\t\n",i,1000-dis[k-i],oil[k-i]);
19、 /*逐一輸出*/</p><p> } /*程序結(jié)束*/</p><p> 五、程序運行結(jié)果測試與分析</p><p> 如程序沒有錯誤,得出的結(jié)果應(yīng)該為:</p><p> NO. distance(km) oil(cc)</p><p> 0
20、 500.000000 500.000000</p><p> 1 334.000000 1000.000000</p><p> 2 234.000000 1500.000000</p><p> 3 163.00000
21、0 2000.000000</p><p> 4 108.000000 2500.000000</p><p> 5 63.000000 3000.000000</p><p> 6 25.000000
22、3500.000000</p><p> 7 0.000000 3925.000000</p><p> 而我們在Microsoft Visual C++ 6.0軟件運行該代碼,得出的結(jié)果如下圖:</p><p> 由該圖我們可以得出,我們應(yīng)設(shè)置七個點,第一個點在距離終點500km處,存放500cc汽油;第一個點
23、在距離起點500km處,存放500cc汽油;</p><p> 第二個點在距離起點334km處,存放1000cc汽油;</p><p> 第三個點在距離起點234km處,存放1500cc汽油;</p><p> 第四個點在距離起點163km處,存放2000cc汽油;</p><p> 第五個點在距離起點108km處,存放2500cc汽
24、油;</p><p> 第六個點在距離起點63km處,存放3000cc汽油;</p><p> 第七個點在距離起點25km處,存放3500cc汽油;</p><p> 在起點處存放3925cc汽油。</p><p> 由調(diào)試結(jié)果得出答案。</p><p><b> 六、結(jié)論與心得</b>
25、</p><p> 1.一開始將所有的數(shù)據(jù)定為int,以至于有時候會導(dǎo)致數(shù)據(jù)出現(xiàn)錯誤,直到改變?yōu)轭愋蚮loat,問題才得以解決。所以以后再設(shè)計代碼的過程中,要懂得如何區(qū)分?jǐn)?shù)據(jù)類型,并定義一個正確的數(shù)據(jù)類型以防止程序出錯和數(shù)據(jù)丟失。</p><p> 2.輸出語句printf("%d\t%f\t%f\t\n",i,1000-dis[k-i],oil[k-i],一開始將
26、k寫成了i,導(dǎo)致了數(shù)據(jù)的上下顛倒,找了很久都沒發(fā)現(xiàn),最后發(fā)現(xiàn)應(yīng)該改為k,問題才得以解決,所以在以后設(shè)計代碼的過程中,什么都要嚴(yán)謹(jǐn),邏輯性要強。要不然到最后會出現(xiàn)很嚴(yán)重的調(diào)試問題。</p><p> 3.一開始我并沒有選擇do-while的循環(huán)語句,導(dǎo)致了要不然就循環(huán)體出現(xiàn)錯誤,要不然就無法運行的問題。直到上網(wǎng)詢問,得到了幫助,才發(fā)現(xiàn)do-while語句是最佳方案,并將我之前的代碼加以改進,得出了最優(yōu)方案。所以以
27、后設(shè)計代碼的時候,除了自己的想法以外,還要多問多借鑒別人的方法,從而得出最優(yōu)的代碼。</p><p><b> 七、參考資料</b></p><p> [1] 劉斌等編著,面向?qū)ο蟪绦蛟O(shè)計 Visual C++,清華大學(xué)出版社,44-45頁。</p><p> [2] 余江等編著,C語言程序設(shè)計,天津科學(xué)技術(shù)出版社,14-15頁,34-3
28、5頁,78頁</p><p> [3] 百度知道,http://zhidao.baidu.com/</p><p> [4] 編程中國,http://www.bccn.net/</p><p><b> 八、致謝</b></p><p> 程序設(shè)計至此,已告了一段落,在整個程序設(shè)計的過程中,除了自身的努力外,還有
29、很多外部的力量一點點的指引我和幫助我完成。有老師,有同學(xué),有網(wǎng)友。在此,我衷心的跟他們說一聲謝謝。</p><p> 雖然成功調(diào)試,但是我依然覺得我的能力不足以解決很多問題,這個問題我花了很多時間去理解去解決,當(dāng)今社會追求效率,給了如此長的時間,換作別人也是可以完成的。所以在以后的學(xué)習(xí)過程中,要注意代碼運用的熟悉度,多訓(xùn)練盡量做到熟練運用,那么才可以在設(shè)計程序的過程中減少不必要的時間損耗。</p>
30、<p> 課堂中,我調(diào)試代碼的時候發(fā)現(xiàn)了錯誤,詢問老師,老師都很樂意一點點的幫助我走出困境并告訴我應(yīng)該怎么樣去做,讓我走少了許多彎路。在宿舍中,不懂得積極詢問同學(xué),從同學(xué)們身上學(xué)習(xí)到不一樣的知識與理解。在網(wǎng)絡(luò)中,我將問題發(fā)布在網(wǎng)上都能得到熱心的網(wǎng)友的解答。所以很開心與榮幸能夠得到你們的幫助。</p><p> 這次程序設(shè)計是個很不錯的鍛煉機會,在以后的學(xué)習(xí)過程中,我也要好好抓緊,鍛煉自己,提高自己
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c語言課程設(shè)計--矩陣問題
- c語言課程設(shè)計--迷宮問題
- 【課程設(shè)計】c語言課程設(shè)計
- c語言課程設(shè)計
- c語言課程設(shè)計
- c語言課程設(shè)計
- c語言課程設(shè)計--c語言投票程序
- c語言課程設(shè)計課程報
- c語言課程設(shè)計題目
- c語言課程設(shè)計報告
- c語言課程設(shè)計報告
- c語言課程設(shè)計--迷宮
- c語言課程設(shè)計 (2)
- c語言課程設(shè)計范例
- c語言課程設(shè)計報告
- c語言程序課程設(shè)計
- c語言課程設(shè)計報告
- c語言課程設(shè)計---c語言小車動畫程序
- c語言語言課程設(shè)計報告
- c語言課程設(shè)計背包問題的求解報告
評論
0/150
提交評論