C语言毕业课程设计报告.docx
- 文档编号:24444374
- 上传时间:2023-05-27
- 格式:DOCX
- 页数:27
- 大小:73.85KB
C语言毕业课程设计报告.docx
《C语言毕业课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言毕业课程设计报告.docx(27页珍藏版)》请在冰豆网上搜索。
C语言毕业课程设计报告
(此文档为word格式,下载后您可任意编辑修改!
)
《C语言程序设计》
课程设计报告
(学年第学期)
专业:
班级:
姓名学号:
姓名:
指导教师:
成绩:
目录
一、课程设计的目的与要求………………………………………1
二、方案实现与调试……………………………………………1
2.1掷骰子游戏…………………………………………………1
2.2射击游戏……………………………………………………3
2.3计算存款本息之和……………………………………………5
2.4肇事逃逸……………………………………………………8
2.5礼炮…………………………………………………………10
2.6汽车加油……………………………………………………12
2.8大优惠………………………………………………………13
2.9金币…………………………………………………………15
三、课程设计分析与总结…………………………………………17
附录程序清单…………………………………………………17
一、课程设计的目的与要求
(一)实验目的
C语言是一种编程灵活,特色鲜明的程序设计语言。
C语言除了学习必须的基本知识,如概念,方法和语法规则之外,更重要的是进行实训,以提高学习者的动手和编程能力,这是学习语言的最终目的。
结合多年来的教学经验,根据学生的学习情况,为配合教学过程,使“项目教学法”能在本质上促使学生有更大进步,特编写了该《C语言程序设计任务书》,以在实训过程中给学生提供帮助。
达到如下目的:
1.在课程结束之前,让学生进一步了解C程序设计语言的编程功能;
2.让学生扎实掌握C程序设计语言的相关知识;
3.通过一些有实际意义的程序设计,使学生体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。
(二)设计要求
根据实验内容的要求自由选定题目。
编写程序要求遵循如下基本要求:
●模块化程序设计
●锯齿型书写格式
●必须上机调试通过
(三)课程设计报告(按《C语言程序设计课程设计报告》格式要求完成)
1、设计目的
2、总体设计(程序设计组成框图、流程图)
3、详细设计、模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)。
4、调试与测试:
调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施。
5、源程序清单和执行结果:
源程序中应有足够的注释。
(四)、检查标准
1、学生必须编写可运行的程序,对教师的提问能熟练地当面解释清楚,回答的问题和程序运行的结果作为评分的主要衡量标准;(课程设计当周的周三开始逐一检查)
2、按照本文后要求须提交电子内容的清单提交相关内容。
二、方案实现与调试
2.1掷骰子游戏(注,此题目用了两种方法,方法一:
一般的main函数方式;方法二:
加入函数分模块的方式。
代码见附录)
•2.1.1题目内容的描述
两人玩骰子,游戏规则如下:
1)两人轮流掷骰子,每次掷两个,每人最多掷10次。
2)将每人每次的分值累加计分
3)当两个骰子点数都为6时,计8分;当两个点数相等且不为两个6时,计7分;当两个点数不一样时,计其中点数较小的骰子的点数。
4)结束条件:
当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上。
最后显示双方分数并判定优胜者。
•2.1.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
整型;2)内容限制:
随机数的产生;
3)输出数据:
获胜一方。
•2.1.3主要模块的算法描述
1)程序流程图如下:
2)语言描述如下:
此题目主要运用了循环语句。
首先用随机数产生器产生产生玩家投骰子的点数;
接下来根据点数计算玩家的分;接下来判断投掷的次数是否达到5次是的话比较一方的累计分数是不是在另一方的1.3倍以上,是的话则胜利,否的话继续投掷!
•2.1.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
没能正确理解“当双方都掷10次或经过5次后一方累计分数多出另一方的30%及以上”这句话的意思,以为是满五或者满十的时候带累计总分一次然后比较分数,确定获胜方!
所以将“if(i>=6)”z这个语句写成了“if(i==6)”,在后来的调试过程中发现,及时改正了!
2)实验结果如下:
2.2射击游戏
•2.2.1题目内容的描述
在程序运行时屏幕上方第一行随机出现一个符号,要求游戏者输入一个1-80之间的整数,当用户输入一个整数后,一个*立即从屏幕底端的该整数列向上移动,若移动到屏幕的顶端能撞上符号,则游戏者获胜;若没有撞上,则要求再输入一个整数,共允许输入5次,如果一直没有撞上,则认为游戏者输。
提示:
1)输入符号可以采用printf("%c",'\1')
2)显示*号向上移动:
输出一些空行;输出*号;以循环的方式增加延时(for(i=0;i<100000;i++););clrscr()清屏重新绘制*号。
•2.2.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
整型、长整型;2)内容限制:
键入数字
3)输出数据:
挑战成功还是失败获胜一方;4)System(“cls”),清屏。
•2.2.3主要模块的算法描述
1)程序流程图
2)简单的语言描述:
清屏;然后循环每行输出*;依次循环,判断是否击中目标;5次输入结束,或者击中目标结束。
•2.2.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
在首次写完代码之后,运行发现无法将图形置于屏幕第一行,之后查阅资料发现是代码控制不够完整,而后添加代码修改成功!
2)实验结果如下:
2.3计算存款本息之和
•2.3.1题目内容的描述
以“存款利率”为关键字上网搜索目前我国整存整取不同期限我国的银行存款利率,只计算一年、三年和五年三种期限。
问题:
(1)要求输入存钱的本金和期限,求到期能从银行得到的利息与本金合计。
(2)假设存款期限为三十年本金为10万,比较一年、三年和五年滚存三十年后的本息金额。
•2.3.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
长整型;2)内容限制:
键入本金与年限;
3)输出数据:
本息和PI
•2.3.3主要模块的算法描述
(1)1)程序流程图如下:
2)语言描述如下:
输入限定之内的年份与存款金额,选择对应的年利率计算本息和。
(2)1)程序流程图如下
2)语言描述如下:
存款期限为三十年,本金为10万,分别计算一年、三年和五年滚存三十年后的本息金额,然后进行比较,输出分别输出一年、三年和五年滚存三十年后的本息金额和最大的本息额。
•2.3.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
(1)在初次编程中,将本金,年份定义成int型,在后来的测试过程中发现不合适,因为年利率有多个小数点,最终更正用float定义!
(2)在写代码时,部分代码忘记标下标,导致结果如下,第一次修改时将float改成double未能成功,而后检查后运行正确!
2)实验结果如下:
(1)
(2)
2.4肇事逃逸
•2.4.1题目内容的描述
某部闽DT的出租车交通肇事逃逸,现场无人看清后面的四位数字,但三位目击群众提供信息如下:
1)车牌号后两位相同;
2)车牌号前两位相同;
3)车牌号是一个整数的平方。
请编程查出肇事逃逸车辆的车牌号。
•2.4.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
整型;2)内容限制:
前两位相同,后两位相同,整数的平方;
3)输出数据:
四位整数
•2.4.3主要模块的算法描述
2)程序流程图如下:
2)语言描述如下:
前两位,后两位相同,则前两位用i表示,后两位用均表示,用k是100以内的两位整数,l表示这个四位数,用循环语句依次判断结果适合公式:
k*k=l=1000*i+100*i+10*j+j,即为肇事车牌号!
•2.4.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
书写代码时,定义四位车牌号为l,由于字母l与数字1比较像,结果导致混淆,在vc环境运行后,发现错误,及时改正!
在以后,将尽量少使用字母l来定义变量!
2)实验结果如下:
2.5礼炮
•2.5.1题目内容的描述
鸣放礼炮起源于英国。
据说400多年前英国海军用的是火炮。
当战舰进入友好国家的港口之前,或在公海上与友好国家的舰船相遇时,为了表示没有敌意,便把船上大炮内的炮弹统统放掉,对方的海岸炮舰船也同样做以表示回报。
这种做法以后就逐渐成为互致敬意的一种礼仪。
由于当时最大的战舰装有大炮21门,所以鸣炮21响就成了一种最高礼节。
有四艘战舰ABCD开始鸣放礼炮各21响,已知A战舰每隔5秒放一次,B战舰每隔6秒放一次,C战舰每隔7秒放一次,D战舰每隔8秒放一次.假设各炮手对时间掌握非常准确,请问观众共可以听到几次礼炮声?
•2.5.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
整型;2)内容限制:
题目依据;
3)用到的主要语句:
循环条件判断;4)输出数据:
礼炮声(整型)。
•2.5.3系统主要模块的算法描述
1)程序流程图如下:
2)简要的语言描述如下:
根据条件“A战舰每隔5秒放一次,B战舰每隔6秒放一次,C战舰每隔7秒放一次,D战舰每隔8秒放一次.”确定可能性!
依次判断,累计听到的次数,得出结果!
•2.5.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
发现定义变i是与int之间没有空格,导致结果如下,调试修改正确。
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输入数据类型、格式和内容限制和输出数据的说明
3)数据类型:
数组类型;2)内容限制:
键入数据:
4)用到的主要语句:
循环条件判断;4)输出数据:
加油次数(整型)。
•2.6.3系统主要模块的算法描述
1)简要的语言描述
按题目要求输入数据;首先判断可行驶的路程是否足够汽车到达加油站;如果不能到达,则需要加油,在此处记录一次并循环;得出累计加油次数之和算得出结果。
•2.6.4调试过程及实验结果
1)实验结果如下:
2.8大优惠
•2.8.1题目内容的描述
中国移动推出最新的手机资费优惠方案,按照这个方案Tom的手机每天消费1元,每消费K元就可以获赠1元,一开始Tom有M元,问最多可以用多少天?
输入的测试数据为一行,实例包括2个整数M,K(2<=K<=M<=1000)。
输出一个整数,表示M元可以用的天数。
•2.8.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
整型;2)内容限制:
键入数字M、K;
3)输出数据:
可以使用的天数。
•2.8.3主要模块的算法描述
1)程序流程图如下:
2)语言描述如下:
此题目主要运用了循环、判断语句。
首先键入总钱数M与元获赠1元需消费的钱数K,判断M与0的关系,下来根据情况执行程序,直到钱数小于等于零时终止输出天数。
•2.8.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
没有仔细阅读题目,导致在后来的测试中,输入的数据有M>K的,与事实不相符合,在后来的检查调试过程中,加入了限定的条件!
2)实验结果如下:
2.9掷骰子游戏
•2.9.1题目内容的描述
国王用金币奖励他忠诚的侍从。
第一天侍从工作结束后,国王奖励了他一个金币;接着的两天侍从工作中(第二天,第三天)的每一天,国王奖励了他两个金币;接着的三天侍从工作中(第四天,第五天,第六天)的每一天,国王奖励了他三个金币;接着的四天侍从工作中(第七天,第八天,第九天,第十天)的每一天,国王奖励了他四个金币。
这种奖励的模式将是固定不变的,即在N天侍从工作中的每一天,国王将奖励他N个金币;接着的N+1天的侍从工作中的每一天,国王将奖励他N+1个金币。
要求在给定的天数时,你的程序能够统计国王总共奖励了侍从多少金币。
•2.9.2输入数据类型、格式和内容限制和输出数据的说明
1)数据类型:
整型;2)内容限制:
键入天数;
3)输出数据:
整型输出金币个数。
•2.9.3主要模块的算法描述
3)程序流程图如下:
2)语言描述如下:
了解题意之后得出,主要的数据间的关系为算法为sum=sum+i*i,j=j-i,通过判断j,之间的关系终止进行总求和输出结果。
•2.9.4调试过程及实验结果
1)调试过程遇到的问题与解决方案:
在写思考是忘记天数不能为零,再后来的写代码是也没有注意,后来发现不符合实际,添加代码“j!
=0”,修改成功!
2)实验结果如下:
二、课程设计分析与总结
由于上学期在语言的学习方面没有足够的重视,因此,基础功不是很扎实,在这次课程设计中显得特别吃力,不过最终还是基本完成了此次课程设计的内容。
在各个实验中解决问题的基本流程是:
分析问题→分析解决问题的基本流程→选择合适的算法语句→书写程序→调试修改→按要求书写实验报告。
在这些过程中,我认为分析问题的解决流程最为重要,分析好解决流程之后,就可以清楚的知道自己这一步要干什么,下一步要干什么,思路就显得十分清楚,按照这个流程解决问题是我感觉做得好的一面。
不过也有很多不足,例如:
好久没碰C语言了,for语句,while语句的基本功能都模糊了,在选择运用时还要在课本、网络上熟悉这些内容,还有一点就是自己对函数、模块化的思想掌握不够,按照实验要求需运用模块化的方式来解决问题,自己却很少使用这种思想,这就是实验中的不足之处。
总而言之,通过这次5天的课程设计我进一步了解C程序设计语言的编程功能,握C程序设计语言的相关知识,体会到学以致用,并能将程序设计的知识与专业知识有效地结合,更全面系统地了解行业知识。
众多不足之处我会在大二上学期重修《高级语言程序设计》时进一步加固,力争将这门基础课真正的学好、用好,摆正思想,为以后的专业课的学习大好基础!
最后感谢谢老师的一而再再而三的严格要求及耐心指导,感谢感谢同学们的帮助,谢谢你们!
附录:
源程序清单(保存在code-.cpp)
2.1掷骰子游戏:
①掷骰子游戏方法一.cpp
#include { inti,j,k,l,m,n,grade1=0,grade2=0; srand((unsigned)time(NULL));生成随机数产生器 for(i=1;i<11;i++) { for(l=1;l<;l++);程序缓冲的作用 printf("第一个人第%d次投出的数\n",i); j=rand()%6+1; printf("%d\n",j); k=rand()%6+1; printf("%d\n",k); if(k==j==6) grade1=grade1+8; if(k==j==5||k==j==4||k==j==3||k==j==2||k==j==1) grade1=grade1+7; else if(k>j) grade1=grade1+j; else grade1=grade1+k; printf("第二个人第%d次投出的数\n",i); n=rand()%6+1; printf("%d\n",n);rand()产生随机数 m=rand()%6+1; printf("%d\n",m); if(m==6||n==6) grade2=grade2+8; if(m==n==5||m==n==4||m==n==3||m==n==2||m==n==1) grade2=grade2+7; else if(m>n) grade2=grade2+n; else grade2=grade2+m; if(i>=6) if(grade1>=1.3*grade2||grade2>=1.3*grade1) i=10; } printf("第一个人累计分数%d\n",grade1); printf("第二个人累计分数%d\n",grade2); if(grade1>grade2) printf("第一个人获胜"); if(grade2>grade1) printf("第二个人获胜"); } ①掷骰子游戏方法二.cpp #include } intb(intm,intn) { inty=0; if(m==n&&m==6) y=8; else y=7; if(m y=m; else y=n; returny; } voidmain() { inti=1,j,k,m,n,e,f,grade1=0,grade2=0; srand((unsigned)time(NULL)); while(i<=10) { j=rand()%6+1; k=rand()%6+1; e=a(j,k); grade1=grade1+a(j,k); printf("第一个人第%d成绩为%d\n",i,e); m=rand()%6+1; n=rand()%6+1; f=b(m,n); printf("第一个人第%d成绩为%d\n",i,f); grade2=grade2+b(m,n); i++; if(i>=6&&(grade1>=1.3*grade2||grade2>=1.3*grade1)) break; } printf("\n第一个人的总成绩为%d",grade1); printf("\n第二个人总成绩为%d\n\n",grade2); if(grade1>grade2) printf("第一个人获胜"); if(grade2>grade1) printf("第二个人获胜"); } }2.2射击游戏: ②射击游戏.cpp #include { inti,j,k,l,m; longintn; srand((unsigned)time(NULL));生成随机数产生器 k=rand()%80+1; for(i=0;i printf(""); printf("%c\n",'\1'); for(m=0;m<5;m++) { scanf("%d",&l); for(j=10;j>0;j--) { system("cls"); for(i=0;i<80;i++) { if(i==k)printf("%c",'\1'); elseprintf(""); } for(i=1;i printf("\n"); for(n=0;n<80;n++) { if(n==l)printf("*"); elseprintf(""); } for(n=0;n<100000;n++); } if(l==k) { printf("恭喜你获胜,赏金封侯! \n"); break; } if(m==4) printf("你竟然吃了败仗,当灭九族! \n"); } } 2.3计算存款本息之和: (1)③计算存款本息之和 (1).cpp #include { floatm,n,PI=0;定义m存款本金,n存款年限, printf("Pleaseinputtheprincipal: "); scanf("%f",&m); printf("Pleaseinputtheyears: "); scanf("%f",&n); if(n==1) PI=m*(1+0.0325*1); elseif(n==3) PI=m*(1+0.0425*3); elseif(m==5) PI=m*(1+0.0475*5); else printf("yearserror! ! ! \n"); printf("ThePIare: %f\n",PI); } (2)③计算存款本息之和 (2).cpp #include { floatm=n,sum1,sum2,sum3; inti; for(i=1;i<=30;i++) { n=1; sum1=m*(1+0.0325*1); m=sum1; } for(i=3;i<=30;i+=3) { n=3; sum2=m*(1+0.0425*3); m=sum2; } for(i=5;i<=30;i+=5) { n=5; sum3=m*(1+0.0475*5); n=sum3; } printf("Thesum1is: %f\n",sum1); printf("Thesum2is: %f\n",sum2); printf("Thesum3is: %f\n",sum3); if(sum1>sum2&&sum1>sum3) printf("一年滚存三十年的本息额最多: %f\n",sum1); elseif(sum2>sum1&&sum2>sum3) printf("二年滚存三十年的本息额最多: %f\n",sum2); else printf("三年滚存三十年的本息额最多: %f\n",sum3); } 2.4肇事逃逸: ④肇事逃逸.cpp #include { inti,j,k,l;i前两位数,j代表后两位数,k代表100以内任意整数 for(i=0;i<=9;i++) { for(j=0;j<=9;j++) { if(i! =j) { for(k=0;k<=100;k++) { l=1000*i+100*i+10*j+j; if(k*k==l) printf("肇事逃逸车辆的车牌号为: %d\n",l); } } } } 2.5汽车加油: ⑤礼炮.cpp #includ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 毕业 课程设计 报告
![提示](https://static.bdocx.com/images/bang_tan.gif)