C语言程序课程设计--沙漠穿越问题

上传人:liy****000 文档编号:118917319 上传时间:2019-12-28 格式:DOC 页数:10 大小:142.50KB
返回 下载 相关 举报
C语言程序课程设计--沙漠穿越问题_第1页
第1页 / 共10页
C语言程序课程设计--沙漠穿越问题_第2页
第2页 / 共10页
C语言程序课程设计--沙漠穿越问题_第3页
第3页 / 共10页
C语言程序课程设计--沙漠穿越问题_第4页
第4页 / 共10页
C语言程序课程设计--沙漠穿越问题_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《C语言程序课程设计--沙漠穿越问题》由会员分享,可在线阅读,更多相关《C语言程序课程设计--沙漠穿越问题(10页珍藏版)》请在金锄头文库上搜索。

1、课 程 设 计 报 告学院、系:吉林大学珠海学院计算机科学与技术系专业名称:计算机科学与技术课程设计科目C语言程序课程设计所在班级:学生学号:学生姓名:指导教师:完成时间:2012年4月15日穿越沙漠问题一、设计任务与目标穿越沙漠问题:一辆吉普车穿越1000公里的沙漠,吉普车的总装耗油量为500加仑,耗油率为每小时1加仑。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。请编程求解,若让吉普车用最少的耗油量穿越沙漠,应该在那些地方建立临时油库,在每个临时油库存储的油量应该是多少。具体要求如下; (1) 运行程序后直接输出结果; (2) 显示输出界面; (3) 分条显示结果。二、方案设计与

2、论证穿越沙漠问题,是一个极值问题。为达到让吉普车用最少的耗油量穿越沙漠,则说明该问题只有唯一解。而从问题中我们可以看出,显然吉普车是不能一次就穿越沙漠的,需要采取推进的方法,也就是在沙漠中前进一定的距离后就要建立临时油库为接下的路程做准备。而我们从题目中可以知道最基本的信息,比如必须要走奇数次,这样才能确保最后到达终点方向。然而我们又要保持效率,就要满足向终点时要满载和每个储油点都要储油点需要的和路上消耗的油量。而针对这个问题,我们可以采取倒推的方法进行求解,从终点往起点推,然后记录每个储油点的位置和储油量。而相反,正推是不可能的,因为我们不知道第一个储油点与起点的距离,但却可以知道最后一个储

3、油点与终点相距500km。而我们可以推出,详细情况如下图:我们必须要做到i与i+1点之间往返若干次,而且每次到达i+1处,吉普车的油要消耗完,每次从i+1处出发的时候,又要装满油。所以我们可以知道,两点之间的距离必须满足在耗油最少的条件下,使i点存够i*500加仑汽油的要求。取第一个例子来说,第一个储油点i=1应该距离终点i=0处500km,而且应该在那个储油点存放500加仑汽油,这样才能保证吉普车能从i=1处到达终点i=0处。此时我们将距离设为distance,储油点存放油量设为oil。那么从这个例子中我们知道,distance1=500,oil1=500。那么继续推导,为了在i=1处存放5

4、00加仑汽油,那么吉普车至少从i=2处开两趟满载油的车道i=1处。所以我们可以知道i=2处至少要存放2*500=1000加仑汽油,即oil2=1000。加上从i=1返回至i=2处一趟空载,总共往返三次。而在这三次往返路程的耗油量按要求只能为500加仑,即distance12=500/3km。那么我们可以继而推出distance2=distance1+distance12=500+500/3。为了直观的了解情况,详情情况如下图:而同样的,为了在i=2处存放1000加仑汽油,吉普车至少从i=3处开三趟装满油的车至i=2处。所以i=3处至少存放3*500=1500加仑汽油,即oil3=1500。加上

5、前面一段的返程空车,总共五次往返。路途的耗油量也应为最低标准的500仑,即distance23=500/5。而可以得出distance3=distance2+distance23=500+500/3+500/5。详情情况如下图:所以我们继续推导下去的话,我们可以发现:为了在i=k处存放k*500加仑汽油,吉普车至少要从i=k+1处开k趟载满油的车到i=k处。而我们根据前面例子的公式可以推出:oilk+1=(k+1)*500=oilk+500,加上从i=k处返回i=k+1的返趟,总共2k-1次。而同样的这2k-1次的总耗油量都按照最低标准,即distancekk+1=500/(2k-1),dis

6、tancek+1=distancek+distancekk+1=distancek+500/(2k-1)。而我们现在可以知道最后i=n至终点的距离为1000-distancen,oiln=500*n。为了在i=n处取得n*500加仑汽油,吉普车至少从始点开n+1次满载车到i=n,加上i=n返回始点的n趟返程空车,总共2n+1次,而这总耗油量为(1000-distancen)*(2n+1),即始点存放油量为oiln+(1000-distancen)*(2n+1)。则我们可以通过输入代码来求出我们想得到的值。三、程序框图或流程图,程序清单与调用关系int kk=k+1!(d=1000)distan

7、cek-1000i=0ikprintf(“%dt%dt)i+YNNY结束开始int 定义整型变量float 定义浮点型变量do-while 循环体k 储油点的序号d累计终点至当前储油点的距离d1 i=n至始点的距离oil 储油点存放的油量distance 距离四、全部源程序清单#includevoid main() int k; /*定义每个储油点的序号*/ float d,d1; /*定义d为累计终点至当前贮油点的距离,定义d1为i=n至始点的距离*/ float oil10,dis10; /*oil为每个储油点存放的油量,distance为该储油点离终点的距离*/ int i; print

8、f(NO.tdistance(km)toil(cc)n); k=1; /*赋值k为1*/ d=500; /*从i=1处开始向始点倒推导*/ dis1=500; /*第一段距离为500km*/ oil1=500; /*第一个储油点的储油量为500cc*/ do /*进入循环体*/ k=k+1; d=d+500/(2*k-1); disk=d; oilk=oilk-1+500; while(!(d=1000); /*达到起点,跳出循环*/ disk=1000; /*置始点至终点的距离值*/ d1=1000-disk-1; /*求i=n处至始点的距离*/ oilk=d1*(2*k+1)+oilk-1

9、; /*得出始点藏油量*/ for(i=0;ik;i+) /*进入循环体,得出每个储油点的位置 */ printf(%dt%ft%ftn,i,1000-disk-i,oilk-i); /*逐一输出*/ /*程序结束*/五、程序运行结果测试与分析如程序没有错误,得出的结果应该为:NO. distance(km) oil(cc) 0 500.000000 500.000000 1 334.000000 1000.000000 2 234.000000 1500.000000 3 163.000000 2000.000000 4 108.000000 2500.000000 5 63.000000

10、3000.000000 6 25.000000 3500.000000 7 0.000000 3925.000000而我们在Microsoft Visual C+ 6.0软件运行该代码,得出的结果如下图:由该图我们可以得出,我们应设置七个点,第一个点在距离终点500km处,存放500cc汽油;第一个点在距离起点500km处,存放500cc汽油;第二个点在距离起点334km处,存放1000cc汽油;第三个点在距离起点234km处,存放1500cc汽油;第四个点在距离起点163km处,存放2000cc汽油;第五个点在距离起点108km处,存放2500cc汽油;第六个点在距离起点63km处,存放30

11、00cc汽油;第七个点在距离起点25km处,存放3500cc汽油;在起点处存放3925cc汽油。由调试结果得出答案。六、结论与心得1.一开始将所有的数据定为int,以至于有时候会导致数据出现错误,直到改变为类型float,问题才得以解决。所以以后再设计代码的过程中,要懂得如何区分数据类型,并定义一个正确的数据类型以防止程序出错和数据丢失。2.输出语句printf(%dt%ft%ftn,i,1000-disk-i,oilk-i,一开始将k写成了i,导致了数据的上下颠倒,找了很久都没发现,最后发现应该改为k,问题才得以解决,所以在以后设计代码的过程中,什么都要严谨,逻辑性要强。要不然到最后会出现很

12、严重的调试问题。3.一开始我并没有选择do-while的循环语句,导致了要不然就循环体出现错误,要不然就无法运行的问题。直到上网询问,得到了帮助,才发现do-while语句是最佳方案,并将我之前的代码加以改进,得出了最优方案。所以以后设计代码的时候,除了自己的想法以外,还要多问多借鉴别人的方法,从而得出最优的代码。七、参考资料1 刘斌等编著,面向对象程序设计 Visual C+,清华大学出版社,44-45页。2 余江等编著,C语言程序设计,天津科学技术出版社,14-15页,34-35页,78页3 百度知道,http:/ 编程中国,http:/ 学生签名:2012年 月 日(以下由评定小组教师填写)质量评价指标(在相应栏目打)

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 资格认证/考试 > 其它考试类文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号