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