《最新BE100716刘婷惠-C语言课程设计报告.doc》由会员分享,可在线阅读,更多相关《最新BE100716刘婷惠-C语言课程设计报告.doc(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateBE100716刘婷惠-C语言课程设计报告BE100716刘婷惠-C语言课程设计报告课程设计报告 课程名称: 高级语言程序设计课程设计 姓 名: 刘婷惠 班级学号: BE100716 指导教师: 吉顺如 完成日期: 2012.6.15 目录1 课程设计目的与要求11.1课程设计目的11.2课程设计的基本内容和要求12 问题描述22.1成绩处理22.2加法考试题22.3
2、学生成绩统计32.4百钱百鸡32.5统计整数32 .6加密还原43 系统使用的主要函数54 详细设计64.1 程序总体结构图64.2 程序流程图75.1 系统主界面125.2成绩处理界面125.3 加法考试题界面125.4 学生成绩统计界面135.5 百钱百鸡界面135.6 统计整数界面135.7 加密还原界面146 程序设计调试情况分析157 课程设计小结16参考文献17附录 系统源程序17-1 课程设计目的与要求1.1课程设计目的C语言程序设计是本科工科类各专业的重要基础课,主要学习程序设计的基本概念和方法,通过本门课程学习,使学生掌握C语言的基本原理,熟练掌握程序设计的基础知识、基本概念
3、;掌握程序设计的思想和编程技巧。高级语言程序设计课程设计是在学生已经具备了使用C语言编写简单的应用程序的能力,为使学生对C语言有更全面的理解,进一步提高运用C语言编程解决实际问题的能力,通过提出算法、指定输入输出来设计一个系统解决方案。1.2课程设计的基本内容和要求参加课程设计的学生,应当认真完成课程设计的全部内容。最终提交课程设计成果来证明其独立完成各种实际任务的能力。从而反映出理解和运用本课程知识的水平和能力。具体如下:1代码编写规范,形成良好的编程习惯;2程序须有一定的健壮性和必要的提示信息,考虑问题的多种可能和边界数据。3提交系统程序源代码、课程设计报告(电子稿和装订的打印稿)。课程设
4、计报告内容包括以下几个方面:l 程序的总体设计和算法分析。l 程序流程图、函数说明l 源程序代码清单l 测试数据和测试过程记录l 遇到的问题及解决方法分析l 课程设计小结4. 程序运行方式,构建一个简易菜单,用户通过输入数值选择所需运行的子程序,当一个子程序运行结束后回到菜单界面,直至用户输入0后退出程序。2 问题描述2.1成绩处理功能说明:编写程序,实现以下成绩处理功能(输出格式参见示例):1)输入n和n个成绩(成绩为浮点数类型,数组名记为a,假设1n50);2)计算并输出成绩的累加和(记为sum)与平均成绩(记为啊ave),将ave的成绩归为A档,将ave的成绩归为B档;3)分别统计A、B
5、两档的人数,计算在总人数中的比率; 4)求出A档学生的最低分和B档学生的最高分,它们与平均成绩的差值;分析:根据题意,输入n个成绩,并对成绩进行处理统计。利用if语句判断输入成绩是否高于平均分,并对其进行分档,并用for语句使程序循环进行。同时定义sum,ave求和及平均分,输出结果。2.2加法考试题给小学生出加法考试题,编写一个程序,给学生出一道加法运算题,然后判断学生输入的答案对错与否,按下列要求以循序渐进的方式编程。程序1 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,程序结束。程序2 通过输
6、入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则显示“Not correct! Try again!”,直到做对为止。程序3 通过输入两个加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则提示重做,显示“Not correct! Try again!”,最多给三次机会,如果三次仍未做对,则显示“Not correct! You have tried three times! Test over!”,程序结束。程序4 连续做10道题,通过计算机随机产生两个110之间的加数给学生出一道加法运算题,如果输入答案正确,则显示“Right!”,否则
7、显示“Not correct!”,不给机会重做,10道题做完后,按每题10分统计总得分,然后打印出总分和做错的题数。 分析:根据题意,输入两个加数,并输入你认为正确的答案,计算机进行判断对错。程序中使用了if语句进行判断是否为正确答案,利用while循环语句进行重复做题。2.3学生成绩统计从键盘输入一个班(全班最多不超过30人)学生某门课的成绩,当输入成绩为负值时,输入结束,分别实现下列功能:1)统计不及格人数并打印不及格学生名单;2)统计成绩在全班平均分及平均分之上的学生人数,并打印这些学生的名单;3)统计各分数段的学生人数及所占的百分比。提示:可考虑用两个一维数组实现学生成绩和学生信息的存
8、储。 分析:根据题意,先将学生的姓名及成绩输入,并分别保存在数组a和b中,若分数在60分以下,统计后打印出人数和名单;将全班同学的成绩累加除以全班人数,求出平均分,若在平均分以下,统计后打印出人数和名单;结合循环和数组,统计分数段的学生人数,除以全班人数即为所占的百分。程序使用了if语句进行判断,同时使用for语句实现循环功能。2.4百钱百鸡中国古代数学家张丘建在他的算经中提出了一个著名的“百钱百鸡”问题:鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问翁、母、雏各几何分析: 根据题意,共100钱要买100只鸡,设公鸡、母鸡、小鸡个数分别为i、j、k。显然i取值在0-20之间,j
9、取值在0-33之间。因此,可得到方程:5*i+3*j+1/3*k=100,i+j+k=100。在分析确定方程中未知数变化范围的前提下,可采用枚举法来实现,即将可能出现的情况一一罗列测试,验证方程什么情况下成立,从而得到相应的解。构成for循环语句。2.5统计整数输入一个字符串,内有数字字符和非数字字符如123a345bcd567,将其中连续的数字作为一个整数,依次存放到整型数组a中,例如,123放在a0,345放在a1中,567放在a2中,统计共有多少个整数,并输出这些整数。分析:根据题意,将字符串中的连续数字作为一个整数,一次存放到整形数组a中。利用for循环语句使程序可以循环进行,if语句
10、判断该字符是否是09之间,即判断是否是数字,并输出结果。2 .6加密还原利用指针作函数参数,设计一函数对字母进行简单加密,把当前的字母变成后面第3个字母,如最后三个字母x、y、z变成字母a、b、c。再设计一函数把加密字符还原。分析:根据题意,编写一个程序实现如下功能:调用一个名为gm的函数,该函数实现简单的加密。加密方法如下:先定义一张字母加密对照表:原字母 a b c 加密后字母 d e f将需要加密的一行文字输入加密程序,程序根据加密表中的对应关系,可以简单地将输入的文字加密输出,再解密,输出原函数。 运行示例:输入函数:e f g 输出加密函数:h i j输出原函数:e f g3 系统使
11、用的主要函数表3.1系统使用的主要函数序号文件名函数名函数功能说明1成绩处理.hcjcl()输入n个人成绩,按要求对成绩进行整理统计2加法考试题.hjfkst()判断学生加法考试题计算结果正确与否3学生成绩统计.hxscjtj()输入学生成绩,对学生成绩进行统计4百钱百鸡.hbqbj()百钱买百鸡,经计算输出各种买法5统计整数.htjzs()输入字符串,将连续数字放入a中并输出6加密还原.hjmhy()对输入的字母按照规则进行加密再还原4 详细设计4.1 程序总体结构图根据设计出如下“C课程设计课题演示系统”的主控模块。在主控模块中,只要在主函数main()前加入包含各子系统文件组成的头文件,
12、我们就能方便的调用各子系统的函数了。C语言课题演示系统主控模块加法考试题模块学生成绩统计模块百钱百鸡模块退出加密还原模块整数统计模块成绩处理模块图4.1 主控模块子模块1:加法考试题模块程序1模块程序3模块程序2模块程序4模块图4.2 子模块1子模块2:统计整数模块输入字符串连续数字存放到整形数组a 中输出整数及其个数图4.3 子模块24.2 程序流程图开始int choice;char ch;ch=yNch=y|ch=Y? Y输入菜单1 2 3 4 5 6 0printf:”菜单选择错误!请重新输入!”退出ch=njmhy()tjzs()bqbj()xscjtj()jfkst()cjcl()
13、breakbreakbreakbreakbreakbreakbreak输出结果结束图4.4 主控模块流程图Int bN,j,i,ui+bi=0printf(不及格同学为n)开始YNj=0jibj60printf(%s ,aj)j+NNYYu=0u=averNNYY 结束return0K2=k/iu+bu=90&bu=60&bu=70&bu=80&bu90p+NYNY 图4.5 学生成绩统计流程图int i,j,k开始i=1,j=1Ni=20YNj=33 Yk=100-i-jN5*i+3*j+k*1/3=100 Yprintf(“i=%d,j=%d,k=%d,i,j,k)j+i+结束图4.6 百
14、钱百鸡流程图charch1000.*p=ch开始int a50.*q=a,num=o,iNYYYi+,q+printf(“%d”,*q)i=0&*p=9N结束图4.7 统计整数流程图5 功能测试5.1 系统主界面用户通过输入数值选择所需运行的子程序,当一个子程序运行结束后回到菜单界面,从1-6,一次类推,直至用户输入0后退出程序,如图5.1所示。图5.1 主菜单5.2成绩处理界面输入n个人的成绩,计算和及平均分,按平均分分成A、B两档,分别统计两档的最高最低分,计算两档人数及占总人数比率,如图5.2所示。图5.2 成绩处理界面5.3 加法考试题界面选择4个程序中的一个进行加法运算,由系统判断对
15、错,如图5.3所示。图5.3 加法考试题界面5.4 学生成绩统计界面输入学生姓名及成绩,统计平均分及之上的同学名单和人数,统计不及格人数,及格同学统计每个分数段的人数比率,如图5.4所示。图5.4 学生成绩统计界面5.5 百钱百鸡界面通过计算得到百钱买百鸡的各种买法,输出结果,如图5.5所示。图5.5 百钱百鸡界面5.6 统计整数界面对输入的字符串进行整数统计,将其中连续整数放入a中,输出,如图5.6所示。图5.6 统计整数界面5.7 加密还原界面输入字母,对所输入的字母按照规则加密,再还原,输出加密和还原的结果,如图5.7所示。图5.7 加密还原界面6 程序设计调试情况分析程序的设计和调试相
16、辅相承,首先在程序设计过程中就遇到了一些困难,很多以前学过的只是有遗忘,还需重新整理复习。并且还有一些新的知识需要弄懂,例如模块6程序中用到了指针,模块2中如何将4个小程序连在一起。在调试的过程中经过了多次反复试验和修改,才最终执行成功。每次调试过程总会或多或少出现各种错误和问题,有时是因疏忽出现的程序输入过程中的错误,如会遗漏“、等,或是将“(”错写为“”等等。通过仔细检查得以纠正。还有时会出现语句运用的错误,自己看书和向老师同学询问后解决。有的时候程序没有错误但是依然不会正确的执行,例如不能模块2不能随机出现10以内的数字,不能正确输出结果,不能循环练习,模块1中也有类似问题出现,是一些程
17、序编写的错误,和对一些关键地方的疏忽,在经过和同学的讨论分析后把问题解决。7 课程设计小结为期两周的C语言课程设计已经接近尾声,两周的时间虽然很辛苦很忙碌,但是也学到了很多东西,有很多收获,同时也对C语言编程也有了更深的了解,对C语言编程掌握的更加熟练,对所学的知识能够更加灵活的利用。在整个课程设计的过程中,从开始的分析题目,编写程序代码,到后来的调试,有很顺利的时候,也有遇到困难和问题的地方。例如会出现不能够输入随机10以内的数字,运算不能循环等等问题。同时也有遇到以前没有接触过的新问题,例如模块6程序中用到了指针,模块2中如何将4个小程序连在一起等,同时以前对所学的知识并没有完全理解,不能
18、灵活运用,这些都为课程设计带来了难度。不过在通过两周的努力,自己看书,和同学讨论研究,向老师请教之后把问题基本都已经弄清解决,使程序顺利完成。通过为期两周的课程设计让我明白了,要学好C语言这门课程,单单只靠书本上的一点知识是不行的,还要多读一些相关方面的书籍来丰富自己,掌握更多的知识,同时需要和实践相结合,多加练习,多动脑,尽量把所学知识综合运用起来。同时编程的过程一定要细心谨慎,一点点微小的错误会导致整个程序的无法运行。在和同学讨论研究的过程中也加强了我们的合作能力,大家互帮互助,共同进步。两周的时间让我对C语言有了更多的了解,也有了更多的兴趣,以后应该多多加强练习,来强化所学知识,更加熟练
19、的运用所学的知识。参考文献1 夏耘,吉顺如. 大学程序设计(C)实践手册. 上海:复旦大学出版社,20082 谭浩强. C程序设计(第3版). 北京:清华大学出版社,2007附录 系统源程序1.主控模块源程序:#include#include#include#include#include成绩处理.h#include加法考试题.h#include学生成绩统计.h#include百钱百鸡.h#include统计整数.h#include加密还原.hvoid main()int choice;char ch;ch=y;while(ch=y|ch=Y) printf(n); printf(ntt c
20、课程设计课题 演示系统 ); printf(ntt 主 菜 单 ); printf(ntt ); printf(ntt 1-成绩处理 ); printf(ntt 2-加法考试题 ); printf(ntt 3-学生成绩统计 ); printf(ntt 4-百钱百鸡 ); printf(ntt 5-统计整数 ); printf(ntt 6-加密还原 ); printf(ntt 0-退出 ); printf(ntt ); printf(ntt ); printf(ntt 请选择菜单号(0-6): ); scanf(%d,&choice); getchar(); switch(choice) cas
21、e 1:cjcl();break; case 2:jfkst();break; case 3:xscjtj();break; case 4:bqbj();break; case 5:tjzs();break; case 6:jmhy();break; case 0:ch=n;break; default:printf(菜单选择错误,请重新输入!); 2.成绩处理.h#include #include void insert_sort(float *x, int n);void cjcl(void)int i=0,j=0,n=0;float sum=0;float ave=0;float *a=
22、(float *)malloc(n*sizeof(float);float *p=a;printf(how many people? n=);scanf(%d,&n);/-endprintf(input n scoresn);for (i=0;in;i+,p+)printf(NO.%d:,i+1);scanf(%f,p);sum+=*p;ave=sum/n;insert_sort(a,n);p=a;for (i=0;i=ave)break;/-endprintf(-all informations below-n);printf(sum: %fn,sum);printf(ave: %fn,av
23、e);printf(numbers of level A people: %dtA rate: %f%n,n-i,100*(float)(n-i)/(n-0.000001);printf(numbers of level B people: %dtB rate: %f%n,i,100*(float)(i/(n-0.000001);printf(lowest scores: %ftdistance from ave: %fn,a0,a0-ave);printf(highest scores: %ftdistance from ave: %fn,an-1,an-1-ave);free(a);voi
24、d insert_sort(float *x, int n)int i, j;float t;for (i=1; i=0 & t*(x+j); j-) *(x+j+1) = *(x+j);*(x+j+1) = t; printf(结束按任意键回到菜单:);getch();3加法考试题.h#includevoid fun1(float m,float n,float p);void fun2(float m,float n,float p);void fun3(float m,float n,float p);void fun4(float a,float b,float i);jfkst()
25、int i;float a,b,c;printf(请输入算法序号:);scanf(%d,&i);printf(请输入两个加数:);scanf(%f %f,&a,&b);printf(请输入你认为正确的答案:);scanf(%f,&c);switch(i)case 1:fun1(a,b,c);break;case 2:fun2(a,b,c);break;case 3:fun3(a,b,c);break;case 4:fun4(a,b,c);break;void fun1(float m,float n,float p)float s;s=m+n;if(s=p)4学生成绩统计.h#include#
26、include#define N 30void xscjtj() int bN,j,i,u;float sum=0,aver,k2,m2,w2,e2,p2,q2,k=0,m=0,w=0,e=0,p=0,q=0;char aN30;printf(*学生成绩统计*n);i=-1;do i+;printf(姓名:);scanf(%s,&ai);printf(成绩:);scanf(%d,&bi);sum=sum+bi;while (bi=0);printf(不及格同学为n);aver=sum/i;for(j=0;ji;j+) if (bj60)printf(%s ,aj); k+;printf(n不及
27、格人数:%.0fn,k);printf(平均分以上的人为:n);for(u=0;u=aver) printf(%s ,au); m+; if(bu=60&bu70) w+;5.百钱百鸡.h#includevoid bqbj()int i,j,k;for(i=1;i=20;i+)for(j=1;j=33;j+) k=100-i-j; if(5*i+3*j+k*1/3=100) printf(i=%d,j=%d,k=%dn,i,j,k);printf(结束按任意键回到菜单:);getch();6.统计整数.h#include #include void tjzs() char ch1000,*p=
28、ch; int a50,*q=a,num=0,i; gets(ch); for( ; *p!=0; p+) if(*p=0 & *p=0 & *p=9) *q=(*q)*10+(*(p+)-0); num+=1; q+=1; for(i=0,q=a; inum; i+,q+) printf(%d ,*q); printf(n一共输入了%d个整数。n,num); printf(结束按任意键回到菜单:);getch(); 7.加密还原.h#includevoid code(char*ch) char*p=ch; while(*p!=0) if(*p=a&*p=A&*pZ&*pz)*p=*p-26; +p; void decode(char*ch) char*p=ch; while(*p!=0) if(*p=a&*p=A&*pZ&*pz)*p=*p+26; +p; void jmhy()char line50; printf(输入源码:n); gets(line); code(line); printf (密码是:n); puts(line); decode(line); printf(解密码得:n); puts(line);printf(结束按任意键回到菜单:);getch();