资源描述
C语言程序设计课程设计报告(2012 2013学年 第 3 学期)专 业: 软件工程班 级: 姓名学号: 指导教师: 成 绩: 软件工程系 2013 年06月24日 目 录一、课程设计的目的与要求(含设计指标)1二、方案实现与调试12.1掷骰子游戏12.2射击游戏32.3 计算存款本息之和62.4 肇事逃逸82.5礼炮102.6汽车加油122.7排考场座位问题142.8大优惠172.9金币182.10缩印21三、课程设计分析与总结23 一、课程设计的目的与要求(含设计指标)(一)、实验目的C语言是一种编程灵活,特色鲜明的程序设计语言。C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该C语言程序设计任务书,以在实训过程中给学生提供帮助。达到如下目的:1 在课程结束之前,让学生进一步了解C程序设计语言的编程功能;2 让学生扎实掌握C程序设计语言的相关知识;3 通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。(二)、设计要求根据实验内容的要求自由选定题目。编写程序要求遵循如下基本要求:l 模块化程序设计l 锯齿型书写格式l 必须上机调试通过二、方案实现与调试2.1掷骰子游戏 题目内容的描述 :两人玩骰子,游戏规则如下:1) 两人轮流掷骰子,每次掷两个,每人最多掷10次。2) 将每人每次的分值累加计分3) 当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。4) 结束条件:当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。最后显示双方分数并判定优胜者。输入数据类型、格式和内容限制和输出数据的说明输入数据类型、格式和内容限制:无输出数据:获胜方及分数主要模块的算法描述 开始初始化随机取数,比较甲乙方大小并将获得的分数加起来当累加分数为5次时候,比较甲是否大于1.3倍的乙甲获胜乙是否大于1.3倍的甲乙获胜随机取数,比较甲乙方大小并将获得的分数加起来当累加分数为10次时候,比较甲是否大于1.3倍的乙甲获胜乙是否大于1.3倍的甲乙获胜YYYYNNNN平局结束2.1.4调试过程及实验结果实验结果: 调试过程:1.在printf中忘记加%d导致运行没有结果,2.没有弄清楚全局变量和局部变量,导致出错,3.对于子函数的定义没有弄明白,以及指针的定义。2.2射击游戏2.2.1题目内容的描述 :在程序运行时屏幕上方第一行随机出现一个 符号,要求游戏者输入一个1-80之间的整数,当用户输入一个整数后,一个*立即从屏幕底端的该整数列向上移动,若移动到屏幕的顶端能撞上 符号,则游戏者获胜;若没有撞上,则要求再输入一个整数,共允许输入5次,如果一直没有撞上,则认为游戏者输。 提示: 1)输入 符号可以采用printf(%c,1) 2)显示*号向上移动:输出一些空行;输出*号;以循环的方式增加延时(for(i=0;i0i0printf(n);j-;kyk=1printf( );k+;printf(*); h-;system(cls); x=yl4l+;l5输出恭喜获胜输出游戏结束 再见了输出再来一次YNNYYNYYYNYN结束2.2.4调试过程及实验结果实验结果调试过程:清屏不会调用,只需1. #include 2. system(cls);2.3 计算存款本息之和2.3.1题目内容的描述 :以“存款利率”为关键字上网搜索目前我国整存整取不同期限我国的银行存款利率,只计算一年、三年和五年三种期限。 问题: 1) 要求输入存钱的本金和期限,求到期能从银行得到的利息与本金合计。 2)假设存款期限为三十年本金为10万,比较一年、三年和五年滚存三十年后的本息金额。2.3.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型、格式和内容限制:输入本金和期限输出数据:本息金额2.3.3系统主要模块的算法描述: 开始输入本金和期限计算一年滚存到期能从银行得到的利息与本金合计计算三年滚存到期能从银行得到的利息与本金合计计算五年滚存到期能从银行得到的利息与本金合计输出结果结束2.3.4调试过程及实验结果调试过程:刚开始没有弄明白本息的算法导致出错实验结果:2.4 肇事逃逸2.4.1题目内容的描述 某部闽DT的出租车交通肇事逃逸,现场无人看清后面的四位数字,但三位目击群众提供信息如下:1) 车牌号后两位相同; 2) 车牌号前两位相同; 3) 车牌号是一个整数的平方。请编程查出肇事逃逸车辆的车牌号2.4.2输入数据类型、格式和内容限制和输出数据的说明2.4.3系统主要模块的算法描述 .初始化m=31,i=j=0k=i*1000+i*100+j*10+ji!=j&m*m=k输出车牌号结束j+j10i10i+开始m=100m+NNYYNYNN2.4.4调试过程及实验结果实验结果: 2.5礼炮题目内容的描述 :鸣放礼炮起源于英国。据说400多年前英国海军用的是火炮。当战舰进入友好国家的港口之前,或在公海上与友好国家的舰船相遇时,为了表示没有敌意,便把船上大炮内的炮弹统统放掉,对方的海岸炮舰船也同样做以表示回报。这种做法以后就逐渐成为互致敬意的一种礼仪。由于当时最大的战舰装有大炮21门,所以鸣炮21响就成了一种最高礼节。有四艘战舰ABCD开始鸣放礼炮各21响,已知A战舰每隔5秒放一次,B战舰每隔6秒放一次, C战舰每隔7秒放一次, D战舰每隔8秒放一次.假设各炮手对时间掌握非常准确,请问观众共可以听到几次礼炮声?输入数据类型、格式和内容限制和输出数据的说明:输入数据类型、格式和内容限制:无输出数据为:观众共可以听到的礼炮声次数主要模块的算法描述 开始初始化a=0,b=0,c=0,d=0,count=0 a=0,b=0,c=0,d=0,count=0a=0,b=0,c=0,d=0,count=0a=0,b=0,c=0,d=0,count=0a=5*20|b=6*20|c=7*20|d=8*20a%5=0|b%6=0|c%7=0|d%8=0count+a=5*20a+b=6*20b+c=7*20c+d=8*20d+输出count结束NNNNNYYYYYY调试过程及实验结果实验结果:2.6汽车加油2.6.1题目内容的描述 :一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。输入:第一行有2 个正整数N和K(1 = N = 100,1 = Kn输出 No Solution初始化m=0,t=0,i=0int+;m=ai;输出最少加油次数结束YNNYNY2.6.4调试过程及实验结果实验结果:调试过程: 巧妙计算加油次数for(i=0;in) t+; m=ai; 2.7排考场座位问题2.7.1题目内容的描述 :假设考场有88的座位,每当一个考生进入考场就为他安排座位。主界面如下:请输入选项(1-4)1 设定考场座位2 取消考场座位3 显示某座位考生信息4 查找学生座位1) 选择1,用户输入准考证号,随机产生该学生座位的行号和列号,要求一个考生只有一个座位,已有考生的位置上不能再安排新的考生;2) 取消某人的考场座位;3) 输入行号列号,输出该考生的准考证号;4) 输入某学生的准考证号,输出该学生的座位。2.7.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型、格式和内容限制:输入选项(1-4)输出数据的说明:准考证号,学生的座位2.7.3系统主要模块的算法描述 考号的座位已取消anm=0;该考号是否有座位开始输入nn=1n=2n=3n=4输入考号该考号是否有座位是否该考号已经有座位随机取数安排座位输入考号是否有该座位否是anm=0; 初始化a99=0该考号已取消该座位为空输入行号和列号输出准考证号输入考号无考试信息输出行号和列号是否结束2.7.4调试过程及实验结果实验结果调试过程:二维数组不会调用参数,解决方法二维数组在定义时为void set(int (*a)9)2.8大优惠2.8.1题目内容的描述 中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天?输入的测试数据为一行,实例包括2个整数M, K(2 = K = M = 1000)。输出一个整数,表示M元可以用的天数。2.8.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型、格式和内容限制:输入刚开始有多少元以及每消费多少元可以获赠1元输出数据:最多可以用多少天2.8.3系统主要模块的算法描述 开始初始化i=1Please input K and M(2 = K = M 0i+; M=M-1;i%K=0M=M+1输出可用天数结束NYYYN2.8.4调试过程及实验结果2.9金币2.9.1题目内容的描述:国王用金币奖励他忠诚的侍从。第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。这种奖励的模式将是固定不变的,即在N天侍从工作中的每一天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。要求在给定的天数时,你的程序能够统计国王总共奖励了侍从多少金币。 2.9.2输入数据类型、格式和内容限制和输出数据的说明输入数据类型、格式和内容限制:给定的天数输出数据:国王总共奖励了侍从多少金币2.9.3系统主要模块的算法描述 开始初始化i=1,m=0输入工作的天数tit=t-i;m=m+i*i;i+;输出国王总共奖励了侍从的金币结束NYm=m+t*i;2.9.4调试过程及实验结果2.10缩印2.10.1题目内容的描述 你想把一张560400的图像放到一张216280的页面中,并且要使图像最大,你会怎么做?你可以将图像旋转90度,然后压缩50%,图像现在的大小变为200280。这样就可以放入页面中!1)输入:输入数据包含四个用空格隔开的正整数A,B,C和D,表示图像 大小是AB,页面大小是CD。所有的数据都小于1000。2)输出:如果图像不需要压缩(可能需要旋转)则输出100%。如果图像需要被压缩则输出最小压缩比(可能需要旋转)。我们假定没有图像会被压缩到1%以下,所有结果为一个整型的百分比,从1%到100%。2.10.2输入数据类型、格式和内容限制和输出数据的说明 输入数据类型、格式和内容限制:输入图片相素和页面大小 输出数据的说明:压缩比例2.10.3系统主要模块的算法描述 开始初始化i=1输入图片相素和页面大小a1000&b1000&c1000&d1000输入错误!i=100a/i=c&b/i=di+breakn=100/i;t=a;a=b;b=t;i=1i=100a/i=c&b/i=di+breakm=100/i;输出比例结束NNNNNYYYYY2.10.4调试过程及实验结果三、课程设计分析与总结附录:源程序清单1. 掷骰子游戏#include #include #include #include int x=0;int compare(int k1,int k2)/比较点数大小,计算得分if(k1=6&k2=6)x=x+8;else if(k1=k1)x=x+7;elseif(k1k2)x=x+k2;else x=x+k1;return x;void main() int a110,a210,b110,b210,i,x=0,y=0; /x,y分别计算甲乙得分srand(unsigned)time(NULL);for(i=0;i=1.3*y)printf(甲方获胜,得分为%d,x);if(y=1.3*x)printf(乙方获胜,得分为%d,y);else for(i=5;i=1.3*y)printf(甲方总分%dn,x); printf(乙方总分%dn,y);printf(甲方获胜,得分为%d,x);if(y=1.3*x)printf(甲方总分%dn,x); printf(乙方总分%dn,y);printf(乙方获胜,得分为%d,y);elseprintf(甲方总分%dn,x); printf(乙方总分%dn,y);printf(双方平局);2. 射击游戏#include #include #include #include void main()int k,i,x,h,j,y,l=0;x=rand()%80+1; printf(输入1-80的整数);do h=20;scanf(%d,&y);while(h0)for(i=1;i0)printf(n); j-; for(k=1;ky;k+)/输入*号printf( );printf(*); system(cls);/清屏 h-;if(x=y)printf(恭喜获胜了n);break; if(l4) printf(再来一次n);l+;while(l5);printf(游戏结束 再见了.%cn,1);3. 计算存款本息之和#include #include #includevoid main() int x,y; double a3;printf(请输入存钱的本金和期限);scanf(%d%d,&y,&x);a0=y*pow(1+0.0325,x);a1=y*pow(1+0.0425*3,x/3);a2=y*pow(1+0.0475*5,x/5);printf(一年滚存到期能从银行得到的利息与本金合计为%fn,a0);printf(三年滚存到期能从银行得到的利息与本金合计为%fn,a1);printf(五年滚存到期能从银行得到的利息与本金合计为%fn,a2);4. 肇事逃逸#includeint main(void)int i,j,k,m;for(m=31;m=100;m+)for(i=0;i10;i+)for(j=0;j10;j+)k=i*1000+i*100+j*10+j;if(i!=j&m*m=k)printf(肇事逃逸车辆的车牌号为%d,n,k);return 0;5. 礼炮#include int main()int a=0,b=0,c=0,d=0,count=0;while(a=5*20|b=6*20|c=7*20|d=8*20)if(a%5=0|b%6=0|c%7=0|d%8=0) count+;if(a=5*20)a+;if(b=6*20)b+;if(c=7*20)c+;if(d=8*20)d+;printf(观众共可以听到%d次礼炮声n,count);return 0;6汽车加油#includevoid main()int t=0,i,k,n,m=0,a100;/n为汽车加满油后可行驶多少公里,k旅途中有多少个加油站,a100为每个相邻加油站的距离printf(输入汽车加满油后可行驶多少公里n);scanf(%d,&n);printf(旅途中有多少个加油站n);scanf(%d,&k);printf(每个相邻加油站的距离);for(i=0;in)printf(No Solution);break;for(i=0;in)t+;m=ai;printf(最少加油次数为%dn,t);7. 排考场座位问题#include#include#include void set(int (*a)9);void delet(int (*a)9);void look(int (*a)9);void find(int (*a)9);void main()int i,n,a99=0; printf(*n);printf(学生系统nntt操作选单tnn); printf(tt1设定考场座位tn); printf(tt2取消考场座位tn);printf(tt3显示某座位考生信息tn);printf(tt4查找学生座位tn);printf(tt0退出程序tn); printf(*n); for(i=0;i10;i+)printf(n请输入选项:); scanf(%d,&n);switch(n)case 1:set(a);break; case 2:delet(a);break; case 3:look(a);break; case 4:find(a);break; case 0:printf(祝你考试顺利!n);exit(0);break; default:printf(输入错误!n);void set(int (*a)9)/设定考场座位 int b,j,k,n,m,t=0; printf(请输入考号:); scanf(%d,&b);srand(unsigned)time(NULL);j=rand()%8+1;k=rand()%8+1;for(n=1;n9;n+)for(m=1;m9;m+)if(anm=b)printf(该考号已经有座位了,座位是第%d行第%d列n,n,m);t=1;if(t=0)ajk=b;printf(你的座位第%d行第%d列n,j,k); void delet(int (*a)9)/取消考场座位int b,n,m,t=0; printf(请输入考号:); scanf(%d,&b);for(n=1;n9;n+)for(m=1;m9;m+) if(anm=b)anm=0; printf(该考号的座位已取消!n);t=1;if(t=0)printf(该座位为空!n);void look(int (*a)9)/显示某座位考生信息 int n,m; printf(请输入行号和列号:); scanf(%d%d,&n,&m);printf(考生的准考证号为%dn,anm);void find(int (*a)9)/查找学生座位int b,n,m,t=0; printf(请输入考号:); scanf(%d,&b);for(n=1;n9;n+)for(m=1;m9;m+)if(anm=b)printf(你的座位第%d行第%d列n,n,m);t=1;if(t=0)printf(无考试信息n);8. 大优惠#includevoid main()int K,M,i=0;printf(Please input K and M(2 = K = M = 1000):n);scanf(%d%d,&K,&M); if(2=K&K=M&M0)i+;/累计天数 M=M-1;/剩余钱数if(i%K=0) M=M+1;/奖励钱数printf(可用天数%dn,i);elseprintf(Input is error);9.金币 #includevoid main()int t,i=1,m=0;/t为工作的天数,m为国王总共奖励了侍从的金币printf(输入工作的天数n);scanf(%d,&t);dot=t-i;m=m+i*i;i+;while(ti);m=m+t*i;printf(国王总共奖励了侍从%d金币,m);10.缩印#include void main()int i,n,m,t,a,b,c,d;printf(请输入图片相素和页面大小:);scanf(%d%d%d%d,&a,&b,&c,&d);if(a1000&b1000&c1000&d1000)for(i=1;i=100;i+)/直接压缩if(a/i=c&b/i=d) break;n=100/i;t=a;a=b;b=t;for(i=1;i=100;i+)/旋转压缩if(a/i=c&b/i=d) break;m=100/i;if(n1|mm)/比较两种压缩百分printf(直接压缩%d%n,n);elseprintf(旋转压缩%d%n,m);elseprintf(输入错误!n);- 34 -设计日志6月24日了解设计报告内容,把要做的题全部都了解一下。做了礼炮代码这题;6月25日今天弥补昨天的题量做了三道,肇事逃逸, 掷骰子游戏计算存款本息之和 6月26日今天做了五道题射击游戏汽车加油大优惠金币缩印做到还算顺利 6月27日终于把最后一道排考场座位问题做完了,收获很大。 (注:指导教师评语和成绩所在表格另起一页)指导教师评 语课程设计成 绩指导教师签字 年 月 日
展开阅读全文