最新版C毕业课程设计报告.docx
- 文档编号:28124863
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:36
- 大小:743.07KB
最新版C毕业课程设计报告.docx
《最新版C毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《最新版C毕业课程设计报告.docx(36页珍藏版)》请在冰豆网上搜索。
最新版C毕业课程设计报告
《C语言程序设计》
课程设计报告
(2012—2013学年第二学期)
专业:
软件工程(软件服务)
班级:
姓名学号:
指导教师:
成绩:
计算机与信息工程学院
2013年6月28日
一、课程设计的目的与要求····································1
二、方案实现与调试··········································1
2.1掷骰子游戏··········································1
2.2射击游戏············································3
2.3计算存款本息之和·····································5
2.4肇事逃逸············································7
2.5礼炮···············································8
2.6汽车加油···········································9
2.7大优惠············································11
2.8金币··············································13
三、课程设计分析与总结·····································14
附录程序清单···········································14
一、课程设计的目的与要求(含设计指标)
1.1实验目的
C语言是一种编程灵活,特色鲜明的程序设计语言。
C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。
结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。
达到如下目的:
1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;
2.让学生扎实掌握C程序设计语言的相关知识;
3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。
1.2设计要求
根据实验内容的要求自由选定题目。
编写程序要求遵循如下基本要求:
●模块化程序设计
●锯齿型书写格式
●必须上机调试通过
二、方案实现与调试
2.1掷骰子游戏
•2.1.1题目内容的描述
两人玩骰子,游戏规则如下:
1)两人轮流掷骰子,每次掷两个,每人最多掷10次。
2)将每人每次的分值累加计分
3)当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。
4)结束条件:
当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。
最后显示双方分数并判定优胜者。
•2.1.2输入数据类型、格式和内容限制和输出数据的说明
输入数据类型:
整数型;
格式:
stand(time(0));输入数=time()%6+1;
内容限制:
产生最多10次随机数;
输出数据说明:
双方掷骰子的分数,游戏的获胜者。
•2.1.3主要模块的算法描述
2.1.4调试过程及实验结果
1)调试过程
a、经过5次后一方累计分数多出另一方的30%及以上时程序未结束,解决——把第15行的判断条件sum1/sum2>=1.3||sum2/sum1>=1.3改成sum1>=sum2*1.3||sum1>=sum1*1.3;
b、计算总分时,乙的总分都为0;解决——子函数返回值错误,改正返回变量。
2、实验结果截图
2.2射击游戏
•2.2.1题目内容的描述
在程序运行时屏幕上方第一行随机出现一个符号,要求游戏者输入一个1-80之间的整数,当用户输入一个整数后,一个*立即从屏幕底端的该整数列向上移动,若移动到屏幕的顶端能撞上符号,则游戏者获胜;若没有撞上,则要求再输入一个整数,共允许输入5次,如果一直没有撞上,则认为游戏者输。
提示:
1)输入符号可以采用printf("%c",'\1')
2)显示*号向上移动:
输出一些空行;输出*号;以循环的方式增加延时(for(i=0;i<100000;i++););clrscr()清屏重新绘制*号
•2.2.2输入数据类型、格式和内容限制和输出数据的说明
输入数据类型:
整型,字符型;
格式:
srand(time(NULL)),scanf("%d",&t);
内容限制:
1~80;
输出数据:
游戏是否获胜
•2.2.3主要模块的算法描述
•2.2.4调试过程及实验结果
1)调试过程
1、第19行for(j=10;j>0;j++);后多了个分号,导致子弹无法运动,解决——删除分号;
2、运行时子弹与目标间无运行路径,直接在下遗憾出现;解决——第29行添加已循环for(i=1;i 3、出现语句后却“: ”或富含格式不对,变量类型定义出错,变量名不合法等问题;解决——缺“;”的补充“: ”,格式不对的给成英文格式的,重新定义变量,改正变量名; 2)实验结果 2.3计算存款本息之和 •2.3.1题目内容的描述 以“存款利率”为关键字上网搜索目前我国整存整取不同期限我国的银行存款利率,只计算一年、三年和五年三种期限。 问题: 1)要求输入存钱的本金和期限,求到期能从银行得到的利息与本金合计。 2)假设存款期限为三十年本金为10万,比较一年、三年和五年滚存三十年后的本息金额。 (一年期: 3.00%;三年期: 4.25%;五年期: 4.75%) •2.3.2输入数据类型、格式和内容限制和输出数据的说明 (1)输入数据类型: 整型;格式: 本金(空格)年限; 内容限制: 年限这能为1,3,5; 输出数据: 期能从银行得到的本息。 (2)输入数据: 无; 输出数据: 三种期限滚存三十年后的本息及三种年限所获本息多少的比较。 •2.3.3主要模块的算法描述 2.3.4调试过程及实验结果 1)调试过程 a、主函数调用函数时,函数名与子函数名不一致导致编译不通过,解决——调用函数名与子函数名一致; b、子函数中的变量为正确使用该函数所定义的局部变量而无用main函数中的变量,而导致编译失败,解决——改正中函数调用的变量; c、三个求不同年限本息的子函数中s1,s2,s3赋初值为0.0导致运行结果均为0,解决 ——改正s1,s2,s3所付赋初值: s1=x,s2=i,s3=m。 2)实验结果 2.4肇事逃逸 •2.4.1题目内容的描述 某部闽DT的出租车交通肇事逃逸,现场无人看清后面的四位数字,但三位目击群众提供信息如下: 1)车牌号后两位相同; 2)车牌号前两位相同; 3)车牌号是一个整数的平方。 请编程查出肇事逃逸车辆的车牌号。 •2.4.2输入数据类型、格式和内容限制和输出数据的说明 输入数据: 无; 输出数据: 肇事车牌号“闽DT7744”; •2.4.3主要模块的算法描述 2.4.4调试过程及实验结果 1、调试过程: 1)思路错误导致运行出错; 2)循环嵌套出错导致死循环而无结果,解决——改正循环计数变量的上下限 3)输出语句出错导致出现“闽DT0”的结果(正解“闽DT0000”),解决—— printf("肇事车辆车牌号为: 闽DT%d\n",m)改为 printf("肇事车辆车牌号为: 闽DT%d%d%d%d\n",a,a,b,c); 2、实验结果: 或 2.5礼炮 •2.5.1题目内容的描述 鸣放礼炮起源于英国。 据说400多年前英国海军用的是火炮。 当战舰进入友好国家的港口之前,或在公海上与友好国家的舰船相遇时,为了表示没有敌意,便把船上大炮内的炮弹统统放掉,对方的海岸炮舰船也同样做以表示回报。 这种做法以后就逐渐成为互致敬意的一种礼仪。 由于当时最大的战舰装有大炮21门,所以鸣炮21响就成了一种最高礼节。 有四艘战舰ABCD开始鸣放礼炮各21响,已知A战舰每隔5秒放一次,B战舰每隔6秒放一次,C战舰每隔7秒放一次,D战舰每隔8秒放一次.假设各炮手对时间掌握非常准确,请问观众共可以听到几次礼炮声? •2.5.2输入数据类型、格式和内容限制和输出数据的说明 输入数据: 无; 输出数据: 观众可以听到的礼炮声次数; •2.5.3主要模块的算法描述 2.5.4调试过程及实验结果 1)调试过程: 1、礼炮.cpp(16): errorC2059: syntaxerror: ‘=’ 礼炮.cpp(17): errorC2143: syntaxerror: missing';'before'{' 解决——if(t2<21&&time%==0)改为if(t2<21&&time%6==0) 2、运行结果为21次出错,解决——在循环中四个判断语句结束后增加s=0; 2)实验结果: 2.6汽车加油 •2.6.1题目内容的描述 一辆汽车加满油后可行驶n公里。 旅途中有若干个加油站。 设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。 输入: 第一行有2个正整数N和K(1<=N<=100,1<=K<=100),表示汽车加满油后可行驶N公里,且旅途中有K个加油站。 接下来的1行中,有K+1个整数,表示第K个加油站与第K-1个加油站之间的距离。 第0个加油站表示出发地,汽车已加满油。 第K+1个整数表示第K个加油站与目的地的距离。 输出: 将编程计算出的最少加油次数输出。 如果无法到达目的地,则输出NoSolution。 (注意: No和Solution之间有一个空格)。 例如: 输入: 88 323654272 输出: 5 •2.6.2输入数据类型、格式和内容限制和输出数据的说明 输入数据类型: 整型; 格式: N(空格)K;距离1(空格或回车)距离2……; 内容限制: 1<=N<=100;1<=K<=100; 输出数据: 加油的最少次数和有停靠加油的加油站编号; •2.6.3主要模块的算法描述 2.6.4调试过程及实验结果 1)调试过程 1、errorC2143: syntaxerror: missing';'before'break';解决——在 printf("NoSlution\n")语句后加“;”号; 2、程序无法运行,解决——scanf("%d",dis[i]);改为scanf("%d",&dis[i]); 3、运行结果(加油次数和应停靠加油站编号)出错;解决——“s=0;”和“t[j-1]=dis[i];”改为“s=dis[i];”和“t[j-1]=i;”。 2)实验结果 2.7大优惠 •2.7.1题目内容的描述 中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天? 输入的测试数据为一行,实例包括2个整数M,K(2<=K<=M<=1000)。 输出一个整数,表示M元可以用的天数。 •2.7.2输入数据类型、格式和内容限制和输出数据的说明 输入数据类型: 整型; 格式: M回车,K回车; 内容限制: 2 输出数据: M元可以用的天数。 •2.7.3主要模块的算法描述 2.7.4调试过程及实验结果 1)调试过程 1、程序无法运行;解决增加一个整行变量表示已消费的费用; 2)实验结果 2.8金币 •2.8.1题目内容的描述 国王用金币奖励他忠诚的侍从。 第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。 这种奖励的模式将是固定不变的,即在N天侍从工作中的每一天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。 要求在给定的天数时,你的程序能够统计国王总共奖励了侍从多少金币。 •2.8.2输入数据类型、格式和内容限制和输出数据的说明 •2.8.3主要模块的算法描述 2.8.4调试过程及实验结果 1)调试过程 1、出现死循环,解决——在循环语句嵌套的选择语句中增加一条break语句中止循环。 2)实验结果 三、课程设计分析与总结 课程设计是一门纯实践性课程,不像第一学期上理论纳贿只要知道原理就行,要通过实打实的上机编写代码,调试程序解决问题,同时还要不断的改进代码,使程序更简洁,有时候即使一段程序能运行,还并不意味着就是一段好的程序,还要经过多次的修改和改进;课设过程中的分析问题与解决问题,个人觉得算法才是程序设计的灵魂,只有能够写出一个好的解决问题的算法,才能写出一个好的程序;问题剖析,解题思考,写出算法,编写代码,运行和调试程序,解决问题等课设步骤,一个都不能少。 经过了一周,虽然完成了任务书要求的的基本任务,但依然没有完成全部的问题,虽勉勉强强能完成基本任务,但能力不足还是显露无疑,虽理论知识够用,但是实践还有待加强。 附录: 源程序清单 2.1掷骰子游戏 #include #include #include intmain() { intm,sum1=0,sum2=0,a,b,c,d; intpoint1(intx,inty); intpoint2(inti,intj); srand(time(0)); for(m=0;m<10;m++) { if(m>=5) { if(sum1>=sum2*1.3||sum1>=sum2*1.3) break; } a=rand()%6+1;//产生1~6的随机数 b=rand()%6+1; c=rand()%6+1; d=rand()%6+1; sum1=sum1+point1(a,b);//计算甲总分数 sum2=sum2+point2(c,d);//计算乙总分数 } printf("甲的总分: %d\n乙的总分: %d\n",sum1,sum2); if(sum1>sum2) printf("甲获胜\n"); else { if(sum1==sum2) printf("甲乙平手\n"); else printf("乙获胜\n"); }//判断获胜者 return0; } intpoint1(intx,inty) { intn1=0; printf("甲: %d%d\n",x,y);//判断甲每次得分 if(x==y) { if(x==6) n1=8; else n1=7; } else { if(x>y) n1=y; else n1=x; } returnn1; } intpoint2(inti,intj) { intn2=0; printf("乙: %d%d\n",i,j);//判断乙每次得分 if(i==j) { if(i==6) n2=8; else n2=7; } else { if(i>j) n2=j; else n2=i; } returnn2; } 2.2射击游戏 #include #include #include intmain() { inti,j,m,n,t; longintk; printf("***************************开始游戏*******************************\n"); printf("*********************你有5次机会射击目标*************************\n"); srand(time(NULL)); n=rand()%80+1;//产生一个0~80的随机数 for(i=0;i printf("");//在第一行的第n列前的所有列打印空格 printf("%c\n",'\1');//在第一行第n列出现一个'\1'所代表的符号 for(m=0;m<5;m++) { scanf("%d",&t); for(j=10;j>0;j--) { system("cls"); for(i=0;i<80;i++) { if(i==n) printf("%c",'\1'); else printf(""); } for(i=1;i printf("\n"); for(k=0;k<80;k++)//在发射位置显示子弹* { if(k==t) printf("*"); else printf(""); } for(k=0;k<;k++);//延时 } if(t==n) { printf("击中目标,你赢了! ! ! \n"); break; } else printf("你还有%d次机会\n",4-m); if(m==4) printf("机会耗尽,你输了! ! ! \n"); } return0; } 2.3计算存款本息之和 #defineA10.03 #defineA20.0425 #defineA30.0475 #include #include intmain() { intp=t=30,P,T[3],k; floatsum1,sum2,sum3,temp,s1,s2,s3; floatpoint1(intx,inty); floatpoint2(inti,intj); floatpoint3(intm,intn); floatcomparation(floatu,floatv,floatw); printf("请输入存钱的本金\n"); scanf("%d",&P); printf("请输入存钱的期限(请输入1,3或5)\n"); for(k=0;k<3;k++) scanf("%d",&T[k]); for(k=0;k<3;k++) { if(T[k]==1) s1=P*(1+A1); else { if(T[k]==3) s2=P*(1+A2*3); else { if(T[k]==5) s3=P*(1+A3*5); } } } printf("到期能从银行得到的本息一年期为: %.2f\n",s1); printf("到期能从银行得到的本息三年期为: %.2f\n",s2); printf("到期能从银行得到的本息五年期为: %.2f\n",s3); printf("******************************************************************\n"); printf("假设存款期限为三十年本金为10万\n"); printf("\n"); sum1=point1(p,t); sum2=point2(p,t); sum3=point3(p,t); temp=comparation(sum1,sum2,sum3); return0; } floatpoint1(intx,inty)//计算一年期滚存后本息 { inta; floats1=x; for(a=1;a<=y;a++) s1=s1*(1+A1); printf("一年期滚存后本息为: %.2f\n",s1); returns1; } floatpoint2(inti,intj)//计算三年期滚存后本息 { intb; floats2=i; j=j/3; for(b=1;b<=j;b++) s2=s2*(1+A2*3); printf("三年期滚存后本息为: %.2f\n",s2); returns2; } floatpoint3(intm,intn)//计算五年期滚存后本息 { intc; floats3=m; n=n/5; for(c=1;c<=n;c++) s3=s3*(1+A3*5); printf("五年期滚存后本息为: %.2f\n",s3); returns3; } floatcomparation(floatu,floatv,floatw)//比较一年、三年和五年滚存三十年后的本息金额 { if(u>v) { if(v>w) printf("本金为10万滚存三十年后的本息金额: 一年期>三年期>五年期\n"); else { if(u>w) printf("本金为10万滚存三十年后的本息金额: 一年期>五年期>三年期\n"); else printf("本金为10万滚存三十年后的本息金额: 五年期>一年期>三年期\n"); } } else { if(u>w) printf("本金为10万滚存三十年后的本息金额: 三年期>一年期>五年期\n"); else { if(v>w) printf("本金为10万滚存三十年后的本息金额: 三年期>五年期>一年期\n"); else printf("本金为10万滚存三十年后的本息金额: 五年期>三年期>一年期\n"); } } return0; } 2.4肇事逃逸 #include #include intmain() { inta,b,x,m; floatn; for(a=0;a<10;a++) { for(b=1;b<10;b++)//当闽DT0000允许的情况写下b=0 { m=a*1100+b*11; n=sqrt(m); x=int(n); if(x==n) printf("肇事车辆车牌号为: 闽DT%d%d%d%d\n",a,a,b,b); } } return0; }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新版 毕业 课程设计 报告