1、应用技术学院课 程 设 计 报 告课程名称 C语言程序设计 课题名称: 心算抢答系统 专 业: 机械设计制造及其自动化 班 级: 0784班 学 号: 22 姓 名: 陈亮 指导教师: 王颖 2008年7月 4 日湖南工程学院课 程 设 计 任 务 书课程名称: C语言程序设计 课 题: 心算抢答系统 专业班级: 机械设计制造及自动化 学生姓名: 陈亮 学 号: 22 指导老师: 王颖 审 批: 任务书下达日期:2008 年6月29日任务完成日期:2008年7月4日C语言程序设计课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以
2、至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了四个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘(缺一不可)收齐
3、后交指导老师。一、目的全面熟悉、掌握C语言基本知识,掌握C程序设计中的顺序、分支、循环三种结构及数组、函数和C语言基本图形编程等方法,把编程和实际结合起来,增强对不同的问题运用和灵活选择合适的数据结构以及算法描述的本领,熟悉编制和调试程序的技巧,掌握分析结果的若干有效方法,进一步提高上机动手能力,培养使用计算机解决实际问题的能力,养成提供文档资料的习惯和规范编程的思想,为以后在专业课程中应用计算机系统解决计算、分析、实验和设计等学习环节打下较扎实的基础。二、基本情况课程类别:必修课课程学分:1学分课程学时:1周课程对象:机械设计0781、0782、0783、0784三、时间安排时间任务2008
4、-6-29指导老师给学生布置课程设计的任务及要求2008-3-10到2008-3-15学生根据设计任务及要求,对系统进行需求分析、概要设计和详细设计,并在此基础上编写程序代码学生提交系统程序清单初稿上机调试程序修改并完善程序并上机调试程序2008-7-3接受指导老师的验收2008-7-1到20087-4 书写课程设计报告 提交课程设计报告课程设计题目:学生心算抢答系统一.问题描述: 适用用于小学生数学心算抢答赛。比赛题型分为两种:“四则简单运算”和“四则混合运算”,计算机随机出题,选手抢答。要求进入每种题型比赛时,计算机均有提示,每队的记分窗口随分的情况而更新。 二.功能要求:1:显示如下画面
5、: 欢迎参加小学生心算抢答赛 按任意键开始比赛2.举办单位确定参赛的对数,每队分配一个记分窗口,底分均为100分。 3.比赛题型分为两种:“四则简单运算”(N道题)和“四则混合运算” (M道题),N,M由举办单位确定,计算机随机出题,现出:“四则简单运算”题,每出一道,选手抢答,做对一题加5分,做错一题减5分。后出“四则混合运算”,做对一题加10分,做错一题减10分。要求进入每种题型比赛时,计算机均有提示,每队的积分窗口随得分情况而更新。4.根据最后总分,由高到底宣布比赛名次,按任意键退出比赛系统。5.要求整个设计以人为本,用户界面友好。 三.算法提示1.用简单的程序设计方法2.一定的窗口设计
6、技巧3.简单的数据类型四、测试数据: 随机函数产生五、其他:对改系统有兴趣的同学可以在实现系统的基本功能后,完善系统的其他功能。如底分的设置,每种类型题目的加,减分的多少均可由举办方设定。课题要求一、 需求分析分析系统功能需求以及用户操作流程。二、 概要设计在需求分析的基础上,确定系统总体框架(系统功能结构图)。三、 详细设计定义数据储存结构,并设计实现系统功能的具体算法,画出各算法的工作流程图。四、 代码设计根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模块,子程序执行完后还可以返回到主菜单,
7、继续选择其他功能执行。源程序要求书写规范,结构清晰。重点函数的重点变量。重点功能部分均要求给出清晰的程序注释。五、 程序调试程序编译、连接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照此测试数据进行测试,然后分析测试结果。如果程序不能正常运行或结果不正确,则需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析和改正。如果程序能够基本正确地运行,可考虑增加若干基本的容错功能;另外尽量对现有的算法给出改进方案,并比较不同算法之间的优缺点五、设计报告及书写内容要求课程设计任务完成后,每位同学必须独立书写一份课程设计报告,注意:不得抄袭他人的报告(或给他人抄袭),一
8、旦发现,成绩为零分。课程设计报告的内容应包括以下五个部分:1) 需求分析:包括设计题目、设计要求以及系统功能需求分析;2) 概要设计:包括系统总体设计框架和系统功能模块图;3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;4) 主要源程序代码:包括存储结构设计说明,以及完整源程序清单;5) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);6) 总结:包括课程设计过程中的学习体会和收获、对c语言和本次课程设计的认识以及自己的建议等内容。7) 书写格式严格按所附要求书写。附1:l 课程设计报告
9、装订顺序:封面、任务书、目录、正文、评分、附件(A4大小的图纸及程序清单)。 l 正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。l 正文的内容:一、课题的主要功能;二、课题的功能模块的划分(要求画出模块图);三、主要功能的实现(至少要有一个主要模块的流程图);四、程序调试;五、总结;六、附件(所有程序的原代码,要求对程序写出必要的注释)。正文总字数要求在5000字以上(不含程序原代码)。 一、题目8二、内容8三、关键字:8【概要设计】8【详细设计】9五、函数细说91主函数 main()92四则简单运算函数simple()94高低分排名函数exchange
10、()10函数功能调用关系流程图11七:源程序函数清单13九、调试分析17十、心得体会18十一,参考资料19一、题目小学生心算抢答系统二、内容该系统是一个简单的小学生心算抢答系统。同时也减少了老师的工作量。整个系统除了主函数外,另外还有5个函数,实现三大功能:四则简单运算功能、四则混合运算功能、从高分到低分排序功能等。三、关键字:心算抢答系统总体设计方案的选定: 程序的功能: 要实现心算抢答需要通过运用函数、编译语句、数据类型来实现。由于是要随机出题,还要进行抢答功能,所以既要设定参赛队伍的结构体类型数组,还要进行随机数初始化。以及数据的排序设计。【概要设计】 程序的模块组成以及各个函数的功能:
11、 1)、 程序的模块组成: 主函数: void main() 四则简单运算函数:int simple() 四则混合运算函数: int mix() 高低分排名函数: void exchange() 交换函数:void swap()2)、 各个函数的主要功能: 主函数: int main() 四则简单运算函数:进行四则简单运算抢答 四则混合运算函数: 进行四则混合运算抢答 高低分排名函数: 抢答结束后排出名次 交换函数: 为排序函数服务【详细设计】 相关的数据类型 队伍信息结构数组 struct team char name; int score; tea3=A,100,B,100,C,100五、
12、函数细说整个系统除了主函数外,另外还有5个函数,实现三大功能:四则简单运算功能、四则混合运算功能、从高分到低分排序功能。1主函数 main()利用scanf()函数输入第一轮和第二轮抢答的次数。2四则简单运算函数simple()此函数通过随机数和加,减,乘,除,实现四则简单运算。算法:先初始化随机数发生器,得到两个随机数,在利用switch函数选择要进行的运算。N-S流程图如下:srand(unsigned)time(NULL)num1=rand()%100+1;,w+)stpy=rand()%4+1; switch(stpy)switch(stpy)printf(%d-%d”)num2=ra
13、nd()%100+1;j+,m+=301,m+)printf(%d+%d”)of(struct hk),M*H,fp)printf(%d*%d”)printf(%d/%d”)of(struct hk),M*H,fp)return(s)3.四则混合运算函数 mix()此函数通过随机数和加,减,乘,除,实现四则简单运算。算法:先初始化随机数发生器,得到三个随机数,在利用switch函数选择要进行的运算。N-S流程图如下:srand(unsigned)time(NULL)num1=rand()%100+1;,w+)num3=rand()%4+1; switch(stpy)switch(stpy)pr
14、intf(%d+%d)*(%d-%d)”)num2=rand()%100+1;j+,m+=301,m+)printf(%d*%d/%d”) hk),M*H,fp)printf(%d*%d-%d/%d”)printf(%d+%d-%d)*%d/%d”) hk),M*H,fp)return(t)4高低分排名函数exchange()此函数建立在四则简单函数和四则混合运算的基础之上,当运算结束时,会执行此函数。算法:通过比较和交换函数,实现高低分排序。N-S流程图如下:swap(int *x,int *y)if(*p1*p2) swap(p1,p2)if(*p1*p3) swap(p1,p3)if(*
15、p2*p3) swap(p2,p3)函数功能调用关系流程图如下:欢迎界面输入第一轮的次数输入第二轮的次数进入第一轮的抢答进入第二轮的抢答显示各队的得分得到最终总排名退出本系统simple( )srand( )switch( )mix( )return(s )return(t )exchange( )swap( )swap()exit()exchange()mix()simple()main()七:源程序函数清单:#include #include #include void main() int simple(); int mix(); /*声明简单运算,混合运算和交换函数*/ void ex
16、change(int *p1,int *p2,int *p3); struct team char name; int score; tea3=A,100,B,100,C,100; /*设置三个队伍与各自起始分数*/ int i,p,j,t,k,n,m; int a,b,c; int result1,answer1,result2,answer2; int *q1,*q2,*q3; char ch1,ch2; printf( *n); printf( $ $n); printf( $ $n); printf( $ 欢迎参加本次心算抢答! $n); /*欢迎界面*/ printf( $ $n);
17、 printf( $ $n); printf( *n); for(i=0;i10;i+) printf(n); printf(输入第一轮次数:); scanf(%d,&n); /*输入第一轮的次数*/ printf(n输入第二轮次数:); scanf(%d,&m); /*输入第二轮的次数*/ printf(n); printf( 按任意键开始 n); getch(); printf(开始!n); printf(第一轮n); printf(这是简单数字n); printf(请看问题n); for(p=0;pn;p+) result1=simple(); printf(请输入队伍名字A或B或C:)
18、; getchar(); scanf(%c,&ch1); /*按中文提示依此输入内容*/ printf(n输入答案); scanf(%d,&answer1); for(k=0;k3;k+) t=k; if(ch1=teak.name) if(result1=answer1) teat.score+=5; else printf(这个答案是错的n); printf(正确答案是 %dn,result1); teat.score-=5; for(i=0;i3;i+) printf(%c%dn,teai.name,teai.score); printf(这一轮结束n); printf(nnnnn);
19、printf(第二轮开始!n); printf(这是简单数字!n); printf(请看问题:n); for(j=0;jm;j+) result2=mix(); printf(请输入一个队名A或B或C:); getchar(); scanf(%c,&ch2); printf(n输入答案:); scanf(%d,&answer2); for(i=0;i3;i+) t=i; if(ch2=teai.name) if(result2=answer2) teat.score+=10; else printf(n这个答案是错的n); printf(正确答案是%dn,result2); teat.scor
20、e-=10; for(i=0;ib&bc) printf(%c %c %cn,A,B,C); if(ab&ca) printf(%c %c %c,C,A,B); if(ab&ac&cb) printf(%c %c %cn,A,C,B); if(ca&cb&ba) printf(%c %c %cn,C,B,A); if(ba&ca&bc) printf(%c %c %cn,B,C,A); if(ba&ac) printf(%c %c %cn,B,A,C); q1=&tea0.score; q2=&tea1.score; q3=&tea2.score; exchange(q1,q2,q3); pr
21、intf(%d %d %dn,tea0.score,tea1.score,tea2.score); simple() int s,num1,num2,stpy; srand(unsigned)time(NULL); num1=rand()%100+1; num2=rand()%100+1; stpy=rand()%4+1; switch(stpy) case 1:s=num1+num2; printf(%d+%d=?n,num1,num2);break; case 2:if(num1=num2) s=num1-num2; printf(%d-%d=?n,num1,num2);break; el
22、se /*简单运算部分*/ s=num2-num1; printf(%d-%d=?n,num2,num1);break; case 3:s=num1*num2; printf(%d*%d=?n,num1,num2);break; case 4:s=num1/num2; printf(%d/%d=?n,num1,num2);break; return(s); mix() int t,num1,num2,num3,stpy; srand(unsigned)time(NULL); num1=rand()%9+1; num2=rand()%9+1; num3=rand()%9+1; stpy=rand
23、()%4+1; switch(stpy) case 1:t=(num1+num2)*(num2-num3); printf(%d+%d)*(%d-%d)=?n,num1,num2,num2,num3); break; case 2:t=num1*num2/num3; /*混合运算部分*/ printf(%d*%d/%d=?n,num1,num2,num3); break; case 3:t=num1*num2-num1/num3; printf(%d*%d-%d/%d=?n,num1,num2,num1,num3); break; case 4:t=(num1+num2-num3)*num3/
24、num1; printf(%d+%d-%d)*%d/%d=?n,num1,num2,num3,num3,num1); break; return(t); void exchange(int *p1,int *p2,int *p3) void swap(int *x,int *y); if(*p1*p2) swap(p1,p2); /*按高低分排名*/ if(*p1*p3) swap(p1,p3); if(*p2*p3) swap(p2,p3); void swap(int *x,int *y) int t; t=*x; *x=*y; *y=t; 九、调试分析(1)先进入欢迎界面后,根据提示分别
25、输入第一轮的次数,和第二轮的次数。(2)当输入了次数后,先运行的是简单运算,先输入参赛队伍,再输入答案,如果答案正确则给相应的队伍加分,当错误时,则扣分。(3)当简单运算结束后,出现混合运算的提示,与简单运算的方法一样。(4)在抢答结束后应该会出现各队的得分,并自动对其进行排序。(5)注意要按要求输入数字和字母,否则会得到错误的信息。十、心得体会 在这次C语言程序设计课程中,我做的是“心算抢答系统”。通过近三天的上机操作和几天的努力,充分应用了所学的C语言的知识,终于粗略设计出并成功的运行起该系统。这说明我这次的课程设计是基本成功的,但更为重要的是我又进一步了解了C语言,加深了对C语言的认识,
26、将课本知识进行温习、整合、融会贯通之后应用到了实际的工作需要中。以实现理论与实践相结合。同时也增加了我对学习C语言的兴趣,激起了学习的热情。课程设计是培养我们综合运用所学知识、发现、提出、分析和解决实际问题,锻炼实践能力的重要环节,是对我们实际工作能力的具体训练和考察过程. 从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。在设计的过程中遇到的问题,可以说是困难重重,这毕竟是第一次涉及到这方面的知识,难免会遇到各种各样的问题和困难,但在老师和同学的指导和帮助下,克服了困难,比较好地完成
27、了此次的程序设计。在此,真心地感谢老师及同学的帮助! 与其临渊羡鱼,不如退而结网。这次课程设计给我最大的感触就是如果自己有了兴趣,就要动手去做,困难在你的勇气和毅力下是抬不起头的。从做这个系统开始无论遇到什么困难,我都没有一丝放弃的念头。出于对知识的渴望,出于对一切未知知识的求知欲,以及对新鲜知识的探索欲和好奇心,使我完成了这次C语言课程设计,不过这只是我学习路途中的一个驿站。古语曰:“学无止境!”由于学艺不精,在课程设计的过程碰过许多问题。其中,不乏一些简单的基础错误,如经常输入错误的字母,使程序无法正常运行,但通过这次课程设计的练习,相信在以后会有所减少。其中许多问题出现在一些函数的使用上
28、,因为对函数调用不够熟悉,往往会造成程序无法运行。如:按任意键可以插入getch(),主函数void main()的用法,C语言的一些函数的应用。然而这一切,通过老师与同学的指导与帮助,自己的查阅资料,都基本上解决了。更重要的是,这次课程设计虽然花了我不少时间,但正是这些时间,让我见识到了C语言的重要性。C语言是一项细致深入的工作,不仅要有严谨的思路,还要在实践中有耐心,要细心。在断断的一星期里,虽说是苦多于甜,但是却使我十分欣慰的。因为我学到很多很多的东西,同时不仅可以巩固以前所学过的知识,而且获得了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理
29、论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正掌握好所学知识,以便更好的为社会服务,从而提高自己的人生价值并实现自己的人生理想!总的来说,程序设计是一门实践性很强的课程,既要掌握概念,又要动手编程,还要上机调试运行。在实践过程中,不仅掌握了基础的理论知识,而且学到了程序设计的方法,同时还进行了程序设计的基本训练,为将来进一步学习打下了基础通过一周的C语言课程设计,我一点点的将课本的知识运用起来,制作了自己的小程序,感觉自己对C语言有了更深入的了解。在实践中,自己编程常会有很多地方不知道怎么做,于是经常用翻阅一些资料来巩固一些不太熟悉的东西。写出来的程序也会
30、有很多错误,在寻找错误中总结出了一些克服缺点的方法。深刻体会到程序设计中最花时间的一部分不是编写源程序,而是调试过程。只有经过调试程序,我们才能掌握正确的语法知识及把问题的解决方法用程序语言来表达。在设计程序的同时也增长了翻阅有关文献的能力,加强了实践能力及自学能力,培养了分析问题 、编程和动手能力,掌握了程序设计基本技能。通过这次课程设计我明白了一个道理:书本知识固然重要,但我们更要注重实践,学会将书本知识应用到实际的工作中去。在实践中发现错误,进行改进,才能达到学习的最终目的。十一,参考资料 C语言之家() C语言教室(http:/www.vcok.co应用技术学院课程设计评分表课程名称:
31、 项 目评 价设计方案的合理性与创造性设计与调试结果设计说明书的质量答辩陈述与回答问题情况课程设计周表现情况综合成绩 教师签名: 日 期: C语言课程设计任务书前 言C语言程序设计课程设计是对学生的一种全面综合训练,它包括问题分析,总体结构设计,用户界面设计,程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。通常,课程设计的课题比平时的习题复杂得多,也更接近实际。课程设计着眼于与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变“活”,使学生更好地深化理解和灵活掌握教学内容。为了达到上述目的,本课程设计安排了八个设计课题,训练重点在于基本的程序设计方法和分析问题的能力,而不强调面面俱到。学生可任选其中一题进行设计,设计完毕写出课程设计报告,用A4纸打印成册;并将课程设计报告与源程序存盘。学习委员将课程设计报告与磁盘(缺一不可)收齐后交指导老师。