小学生心算系统——c语言程序设计.doc_第1页
小学生心算系统——c语言程序设计.doc_第2页
小学生心算系统——c语言程序设计.doc_第3页
小学生心算系统——c语言程序设计.doc_第4页
小学生心算系统——c语言程序设计.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

应用技术学院课 程 设 计 报 告课程名称 C语言程序设计 课题名称 小学生心算CAI系统 专 业 机械设计制造及其自动化 班 级 1183班 学 号 30 姓 名 李焜 指导教师 王颖 2012年6月22日湖南工程学院课 程 设 计 任 务 书课程名称 C程序设计 课 题 小学生心算CAI系统 专业班级 机械设计制造及其自动化1183班 学生姓名 李焜 学 号 30 指导老师 王颖 审 批 任务书下达日期 2012年6月8日任务完成日期 2012年6月22日一、设计内容与设计要求1、设计内容一、问题描述:本系统可以用来进行单独的的加、减、乘、除心算练习,也可综合心算的速度与正确率进行测试。当用户在进行简单的四则运算时运算速度和正确率都较高时,可以进入四则混合运算,借此来进一步提高自己的心算能力。二、功能描述:1、 用户可以通过两种方法来选择功能,既可以按相应的数字键进入相应的心算练习,也可以按光标键来选择功能项。2、 计算机自动出题,用户进入每项练习时,屏幕上会显示用户所做的相应的题数,如果不想继续可以随时退出。3、 设计的系统完全适合用户,比如除法时考虑到小学生的水平问题,只允许出现整除情况。4、 用户输入的答案不对时,提示错误,用户输入的结果如果连续两次不对,计算机会自动给出正确答案,供用户参考。5、 界面设计友好。三、算法提示:1、 用简单的程序设计方法2、 一定的窗口设计技巧3、 简单的数据类型四、测试数据:计算机随机产生五、其它:对该系统有兴趣的同学可以在实现系统基本功能后,完善系统的其它功能。 六分组及安排所选题目根据学生学号确定,学号模4加1,即(学号%4+1)。如你的学号为17,则所选题目号为:17%4+1(题目2)。七成绩评定程序设计方案是否合理;程序设计是否正确;调试结果;设计说明书的质量高低;答辩时回答问题情况;课程设计周表现情况;总评成绩记入“课程设计成绩评分表”。2设计要求:1)设计正确,方案合理。2)界面友好,使用方便。3)程序精炼,结构清晰。4)设计报告5000字以上,含程序设计说明,用户使用说明,源程序清单及程序框图。5)上机演示。二、进度安排星期一 下午机房上机,熟悉这次课程设计的目的和课程设计的要求,通过图书馆或因特网查找与小学生心算CAI系统课题相关的资料,明确了解一些要用到的文件和调用函数等,然后再把整个程序设计的总体框架、流程图等构思出来,并进行书面程序设计。 星期三 下午机房上机,在计算机上编辑源程序。调试程序,在改正错误的同时不断完善程序,使源代码满足课程设计的要求和实现课程设计的基本功能。不断改正错误后,要保证程序能成功编译成目标文件,链接成功成为可执行文件,这样才能算已经完成了本课题的基本功能。之后,开始撰写课程设计报告。星期四 下午进一步完善程序并运行演示,完成课程设计答辩,完成并打印课程设计报告。 目录一、课题的目的和意义(6)二、课程设计包含知识点(6)三、课题的主要功能及设计思路(6)1、 功能介绍 (7)2、 设计的思路(主要用到的函数)(7)3、 总体设计(模块结构图)(8)4、 功能的实现(9)5、 调试分析(8)四、用户使用说明书(3)五、总结及心得体会(3)六、参考文献(4)七、附录(源程序清单)(5) 一、 课题的目的和意义C 语言程序设计是一门实践性很强的课程。 C程序课程设计是学习C语言程序设计的非常重要的实践环节,通过本课程设计使学生进一步巩固课堂所学,全面熟悉、掌握C语言程序设计的基本方法和技巧,进一步提高编写程序、阅读分析程序及上机操作、调试程序的能力,让学生加深理解书本上所学的知识,提高动手操作的能力以及分析问题和解决问题的能力。二、课程设计包含知识点: 1、掌握并熟练运用C语言的基本数据类型与各种表达式,程序的流程控制语句。 2、掌握数组的基本概念。熟练掌握一维数组和二维数组的使用,掌握字符数组与字符串的关系以及字符串的简单处理,会分析、编写利用数组进行数据存储和处理的简单程序。 3、熟练掌握指针、地址、指针类型、void指针类型、空指针等概念,熟练掌握指针变量的定义和初始化、指针的间接访问、指针的加减运算和指针表达式,掌握指针与数组、函数、字符串、自由空间等的联系,了解引用变量、值传送、引用传送的概念,掌握引用参数的使用。 4、掌握函数的定义,函数的返回值,函数的调用,函数的形式参数和实际参数之间的关系;掌握变量的作用域与生存期,了解虽说捧着自己的成果很高兴,但成果背后总是付出很大的努力。一个多礼拜中,我们有过山穷水尽的困惑;有过柳暗花明的惊喜;有过唇枪舌剑的辩论;有过相互鼓励的安慰。一个多礼拜的时间我们经历了很多,也收获了很多。与其说它是体力与脑力的作业,不如说它是合作精神和毅力的考验。经过这次课程设计,我不仅学到了很多知识和技能,更重要的是我们函数的作用域。 5、掌握结构的概念,结构类型的定义,结构变量的定义和初始化,结构成员的表示,结构的赋值含义,结构与指针、函数的关系。三、课题的主要功能和设计的思路 1、功能介绍:本系统可以用来进行单独的的加、减、乘、除心算练习,也可进行混合运算,当用户在进行简单的四则运算时正确率都较高时且做了五道题(80%),可以进入四则混合运算,借此来进一步提高自己的心算能力。(1)用户可以通过两种方法来选择功能,既按光标键来选择功能项。(2)计算机自动出题,用户进入每项练可以按相应的数字键进入相应的心算练习,也可以习时,屏幕上会显示用户所做的相应的题数,如果不想继续可以随时退出。(3)设计的系统完全适合用户,比如除法时考虑到小学生的水平问题,只允许出现整除情况。(4)用户输入的答案不对时,重新提示刚刚的题,重做一遍,用户输入的结果如果连续两次不对,计算机会自动给出正确答案,供用户参考。(5)界面设计友好。2设计的思路(主要用到的函数) 1、main()主函数 程序采用模块化设计,主函数是程序的入口,其他各模块据独立,均由主函数控制调用。该功能的实现是通过循环控制执行一个开关语句,通过该语句得到一个返回值,再判断该值,运行调用下一个函数,同时也设置一断点,为一定条件是执行exit()避免死循环。 2、menu()和menu2()以及menu3()menu()是直接利用输出函数printf输出字符串,从而在屏幕上显示一菜单,并提示输入选项,再将值返回给主函数,主函数在调用相应的函数。menu2()显示一些窗口和计算最后得了多少分。menu3()则是为了使界面友好而添加的。3、chuTi()出单独的加、减、乘、除运算,利用选择结构控制开关,并且能返回值给主函数,是本程序的主要函数之一。 4、chuTi2()出复杂的四则混合运算。并且要求达到一定要求事由主函数控制进入。返值给主函数,是本程序的主要函数之一。 5、rand()随机选整数 选取随机的整数,例如rand()%100就是随机出1到100之间的整数。使出来的题随机。6、Zhishu()判断是否为质数考虑到小学生水平有限,只能出现整除,当被除数是质数时,能整除的只有1和其本身,因此此时应重新选取一个整数数。于是由此实现,是质数返值1,不为质数时返值0.7、tiao()和kong()换行和空格为了设计方便,之后要换行或空格可直接由他们实现。8、srand()函数是随机数发生器的初始化函数,使产生的数更加随机,避免出现相同的题,因此再一次出题时,不会与上一道题相同。3总体设计(模块结构图): 菜单(选择) 退出 混合 除法 乘法 减法 加法 注:当用户的正确率达到80以上,并且做了五题以上后会自动调用混合运算。 4.功能的实现 通过主函数控制,进入窗口函数,输入key值,由此进入循环,循环中调用ChuTi()函数出简单独立的加、减、乘、除运算,在此函数中,各个运算单独完成,由rand()函数随机抽取数据出题,除法运算时,再条用zhishu()函数判断是否为质数,是则重新选取。不想做时到菜单输入零,便可结束。循环结束时达到了一定题数,返回值给主函数,正确率大于80%时,由主函数调用ChuTi2()函数,此时进行混合四则运算。此时再分16种情况,系统再次调用判断质数函数zhishu()和随机取数函数rand(),出题。结束后又返值给主函数,进入meun2()计算最后得分。主函数N-S流程图:定义i=1,静态变量p1=0,p2=0,作为正确题数记录For(i=1;i4“Error” i=i-1;重新输入调用函数ChuTi()答对p1+;P13You need to do again!You have passed this stage!For(i=1;i=5;i+)+)调用函数ChuTi2(),答对p2+;+)调用函数Meum2(),读取p1,p2计算所得分数+)调用函数Meum3(),显示结尾窗口+)YNYNChuTi()函数中加法的流程图开始调用,取key值存入op中。定义i=0,1、加法运算调用rand()函数随机取数,然后随机出题。i2YN输入值resres=answerNRight!p1+;返值给主函数Y错误,重做i+提示错误给出正确值0、退出2、减法运算4、除法运算3、乘法运算注:其余四种运算流程图与其类似5调试分析:(1)测试数据:a)进入菜单后,系统会提示选择1,2,3,4,0进行下一步操作,包括加法、减法、乘法、除法、退出操作。(只列出加法调试)主窗口图: 当选择加法运算答对时,提示right,并自动跳到主界面:两次答错时,系统给答案:答对五道题且正确在80%以上,跳入混合四则运算:再答五道题时,显示结果给出分数,并且显示最后窗口:加法数据调试成功!(2)程序调试中出现的问题以及解决的方法:1、刚开始没有按照老师所教的按模块化设计,只用了一个主函数,导致程序结构紊乱,特别是在检查错误时发了大量的时间,这让我感受到设计程序不能想当然而是要按部就班的执行设计程序的具体步骤。2、刚开始时,在设计随机产生数字的函数时,不知道要怎么用random()函数,后来在网上查到,用rand()也可以,并且更实用。3、在自定义函数时,出现了两个函数同名导致程序调试是错误。4、在调试程序的过程中,输入没有按输出的格式,导致程序不能正常运行,对于这种老师经常强调的错误我们应该不能再犯,我们应该谨记老师在课堂上需要注意的事项并且在操作要落实。5、用户界面不够人性化,经过对菜单的修改及对操作执行后系统询问的完善使该系统更人性化。四、用户使用说明书用户一旦进入程序就会弹出菜单,菜单显示:1、加法运算2、减法运算3、乘法运算4、除法运算0、退出 please input your choice:(选择)此时用户输入一个选择,程序将自动将用户的选择与所对应的函数进行匹配。如果用户选择的是“1”,则自动进入加法,如果不想做加法了,则按“0”,退出程序,按其他的数字则接着做。若不退出系统,当做了五题且准确率达到80,则自动进入混合运算,做完10道题后将结束本系统,并告诉用户得分。五、总结及心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,当今计算机应用在生活中可以说得是无处不在。虽然现在出现了面向对象的程序设计方法和开发工具,但它仍是我们学习程序设计的首选语言,用它来训练和提高编程技术,以及开发应用程序。因此,作为二十一世纪的大学来说掌握c语言是十分重要的。现在课程设计结束了,回想这段日子我每天就为了想怎么设计出合理的程序而忙碌,我感到欣慰,毕竟,自己完成了。刚开始的时候,由于没有下手的点,自己画的流程图虽然表面上合理,但以我现在的水平,许多知识点我不清楚,无法编出来。后来在网上搜索了几个类似的程序,掌握了一些函数的用法,于是我根据老师的提示,采取一个一个模块来编写,这样就简单多了。不过事情也不是想象中的那么简单,比如课程设计里有个程序要求用户两次答错后提示答案,在我设计的模块中不是很好实现,于是我想了好久,估计连睡觉也在想。终于再一次做题中我发现了一种方法,于是我利用if语句和for语句嵌套实现了,虽然还是不很合理,不过还是能够解决问题的。在这次c语言课程设计中,我学到了好多东西,深深地体会到只要有付出,就会有收获的道理。也巩固了自己的所学的知识,为我计算机二级做了准备,以前的许多知识点也在这里得到了补充,当然我也明白到自己学到的东西只能算c语言的一点皮毛,我以后有空会多看些有关C语言的书籍,补充自己的不足。同时,在这次课程设计中,我也明白到团队的作用,每个人都编写自己的模块,然后再放到一起来分析,这样就需要每一个组员的配合。如果还有机会,我会愿意再次参加。最后,谢谢老师在C语言学习及课程设计中对我的指导。 六、参考文献1 c语言课程设计案例精编 中国水利水电出版社 主编 郭翠英2 谭浩强。C语言程序设计(第三版)。清华大学出版社,2005年出版3C语言程序设计教程 主编 蒋清明 黄晓宇 湖南科学技术出版社 六、附录源程序清单#include #include #include #include static int p1=0,p2=0;void kong(int size) int i; for(i=0;isize;i+) printf( );void tiao(int size) int i; for(i=0;i=80) printf( WELL DONE!); else if(mark=60) printf( YOU CAN DO MORE BETTER!); else printf(YOU NEED MORE PRACTICE!);void menu3() tiao(2); kong(12); printf(THANKS FOR USING MY PRODUCE); tiao(8); kong(12); printf(MADE BY Zhao Sheng; 2009.12.25);int isZhishu(int key) int i; if(key=1|key=2) return 1; for(i=2;ikey;i+) if(key%i=0)return 0; return 1;void chuTi(int op) int i,t=-1; int num1,num2,res,answer; srand(time(NULL); switch(op) case 1: num1=rand()%100; num2=rand()%100; answer=num1+num2; for(i=0;inum1) num2=rand()%100; answer=num1-num2; for(i=0;i2;i+) printf(%d - %d = ,num1,num2); scanf(%d,&res); kong(22); if(res=answer) t=1; p1+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 3: num1=rand()%35; num2=rand()%35; answer=num1*num2; for(i=0;i2;i+) printf(%d * %d = ,num1,num2); scanf(%d,&res); kong(22); if(res=answer) t=1; p1+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 4: num1=rand()%100; while(isZhishu(num1)=1|num113) num1=rand()%100; num2=rand()%100; while(num1%num2!=0|num2=1) num2=rand()%100; answer=num1/num2; for(i=0;i2;i+) printf(%d / %d = ,num1,num2); scanf(%d,&res); kong(22); if(res=answer) t=1; p1+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 0: exit(0); break; default: break; void chuTi2() int i,t=-1; int num1,num2,num3,res,answer,done; char op1,op2; srand(time(NULL); num1=rand()%100; num2=rand()%100; num3=rand()%100; op1=rand()%4;op2=rand()%4; if(op2=3) switch(op1) case 1: while(isZhishu(num2)=1|num213) num2=rand()%100; while(num2%num3!=0|num3=1) num3=rand()%100; res=num2/num3; while(num1res) num1=rand()%100; answer=num1-res; for(i=0;i2;i+) printf(%d - %d / %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 2: res=num1*num2; if(isZhishu(res)=1) num3=res; else while(res%num3!=0|num3=1) num3=rand()%100; answer=res/num3; for(i=0;i2;i+) printf(%d * %d / %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 3: while(isZhishu(num1)=1|num113) num1=rand()%100; while(num1%num2!=0|num2=1) num2=rand()%100; res=num2/num3; if(isZhishu(res)=1) num3=res; else while(res%num3!=0|num3=1) num3=rand()%100; answer=res/num3; for(i=0;i2;i+) printf(%d / %d / %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+;printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 0: while(isZhishu(num2)=1|num213) num2=rand()%100; while(num2%num3!=0|num3=1) num3=rand()%100; res=num2/num3; answer=res+num1; for(i=0;i=100) num2=rand()%100; num3=rand()%100; res=num2*num3; while(num1res) num1=rand()%100; answer=num1-res; for(i=0;i2;i+) printf(%d - %d * %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 2: answer=num1*num2*num3; for(i=0;i2;i+) printf(%d * %d * %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 3: while(isZhishu(num1)=1|num113) num1=rand()%100; while(num1%num2!=0|num2=1) num2=rand()%100; answer=num1/num2*num3; for(i=0;i2;i+) printf(%d / %d * %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 0: answer=num2*num3+num1; for(i=0;i2;i+) printf(%d + %d * %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+;printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; else if(op2=1) switch(op1) case 1: while(num2num1) num1=rand()%100; res=num1-num2; while(resnum3) num3=rand()%100; answer=res-num3; for(i=0;i2;i+) printf(%d - %d - %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+;printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 2: res=num1*num2; while(resnum3) num3=rand()%100; answer=res-num3; for(i=0;i2;i+) printf(%d * %d - %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wrong! should be: %d,answer); break; case 3: while(isZhishu(num1)=1|num113) num1=rand()%100; while(num1%num2!=0|num2=1) num2=rand()%100; res=num1/num2; while(resnum3) num3=rand()%100; answer=res-num3; for(i=0;i2;i+) printf(%d / %d - %d =,num1,num2,num3); scanf(%d,&done); kong(22); if(done=answer) t=1; p2+; printf(right!); break; if(t=-1) printf(wr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论