《通信工程C语言课程设计报告(共21页).doc》由会员分享,可在线阅读,更多相关《通信工程C语言课程设计报告(共21页).doc(19页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上通信工程C语言强化训练实验报告学 号:姓 名:李 惠提交日期:2010-6-27成 绩:评 语:教师签字:东北大学秦皇岛分校计算机工程系动态建立学生成绩管理程序1、 强化训练目的a) C语言基本知识的巩固和综合运用。基本数据类型、基本控制结构、数组、指针、函数、结构体和共用体。b) C语言高级编程。链表基本操作、文件的基本操作、图形和声音制作。c) 程序的结构化设计。d) 编辑、设置、编译、调试、执行。e) C语言结合实际问题的综合设计。2、 设计题目功能(1)、可以在计算机上输入n个学生的学号、姓名、m门课程的成绩并存档,并能够打印(显示)出学生信息;(2)、能够自
2、动计算出每个学生的总分和平均分,能按总分由大到小统计出总名次并打印;(3)、可以自动找出成绩在全班平均分及平均分之上的学生名单和某门课不及格的学生名单并打印。3、 设计题目要求从键盘输入一个班n(未知)个学生的学号、姓名、m(未知)门课的成绩,分别统计下列内容: 1统计每个学生的总分和平均分; 2按总分由大到小排出名次; 3打印出成绩在全班平均分及平均分之上的学生名单; 4打印出某门课不及格的学生名单4、 程序流程图传统程序流程图如下:算法函数流程图: (1) (2) (3) (4) (5) (6)主函数流程图:a b c d e f开始menu_select()=?3450126system
3、(pause);exit(0); 结束无条件 主函数流程图dcInput(stud,n)j进行输入aDisplay(stud,n)进行输出ball(stud,n)求总分aver(stud, n)求平均分all(stud,n)求总分sort(stud, n)排序输出:“每个学生的总分和平均分:”输出:“按总分由大到小排名:”输出每个学生的总分和平均分输出按总分由大到小排名输出:“下面进行学生信息输入”输出:“所有学生信息如下”主函数流程图5、主要代码#include /*调用头文件,引用库函数*/ #include #include #include #define M 15 /*宏定义*/#d
4、efine N 80int m; /*用于记录科目数 */*/typedef struct /*定义结构体数组*/ char num10; /*学生学号*/ char name20; /*学生姓名姓名*/ int scoreM; /*单科成绩*/int all_score;/*总分*/int aver_score; /*平均分*/Student; Student studN; /*结构体数组变量*/ /*/int menu_select() /*菜单函数*/ char c; do system(cls); /*运行前清屏*/ printf(tt*学生成绩管理系统*n); /*菜单选择*/ pr
5、intf(tt 1. 输入学生信息n); printf(tt 2. 打印(显示)学生信息n); printf(tt 3. 统计每个学生的总分和平均分并打印(显示)n); printf(tt 4. 按总分由大到小排出名次并打印(显示)n); printf(tt 5. 打印(显示)出成绩在全班平均分及平均分之上的学生名单n); printf(tt 6.打印(显示)出某门课不及格的学生名单n); printf(tt 0. 退出系统n); printf(tt*n); printf(tt 请从 0到6 选择操作); c=getchar(); /*读入选择*/ while(c9); return(c-0)
6、; /*返回选择*/ /*/int Input(Student stud,int n) /*输入若干个学生数据*/ int i=0,j; char sign,x16; /*x10为清除多余的数据所用*/ while(sign!=n&sign!=N) /*判断*/ printf(tt 该学生学号:); /*交互输入*/ scanf(ttt%s,studn+i.num); printf(tt 该学生姓名:); scanf(ttt%s,studn+i.name);char c=y; for(j=1;j=M;j+) if(c!=n&c!=N)printf(tt 该学生的第%d科成绩(若输入完成,直接输
7、入-1结束):,j);m=j; scanf(tt %d,&studn+i.scorej-1); if(studn+i.scorej-1=-1) break; gets(x); /*清除多余的输入*/printf(tt 还要输入其他学生数据吗?(Y/N); scanf(tt %c,&sign); /*输入判断*/i+; return(n+i); /*/void Display(Student stud,int n) /*显示所有学生的信息*/ int i; printf(tt -n); /*格式头*/ printf(tt 学号 姓名 成绩 1 2 3 .n); printf(tt -n); fo
8、r(i=1;in+1;i+) /*循环输入*/ printf(tt %-15s%-16s ,studi-1.num,studi-1.name); int j=1;do printf(%d ,studi-1.scorej-1);j+;while(studi-1.scorej-1!=-1);printf(n); printf(tt ); system(pause); /*/void all(Student stud,int n) /*统计每个学生的总分*/ int i; for(i=1;in+1;i+)studi-1.all_score=0;int j=0;while(studi-1.scorej
9、!=-1)studi-1.all_score+=studi-1.scorej;j+; /*/int all_aver(Student stud, int n) /*全班平均分*/int a=0,b=0;all(stud,n);for(int i=1;in+1;i+)a+=studi-1.all_score; b=a/n; return b;/*/void aver(Student stud,int n)/*每个学生的平均分*/int i;all( stud, n);for(i=1;in+1;i+) studi-1.aver_score=studi-1.all_score/m;/*/void s
10、ort(Student stud, int n) /*按总分排序*/int i,j,*p,*q,s;char t20;for(i=0;in-1;i+) /*冒泡法排序*/for(j=0;jn-1-i;j+)if(studj.all_scorestudj+1.all_score) strcpy(t,studj+1.num); strcpy(studj+1.num,studj.num); strcpy(studj.num,t); strcpy(t,studj+1.name); strcpy(studj+1.name,studj.name); strcpy(studj.name,t); p=&stu
11、dj+1.all_score; q=&studj.all_score; s=*p; *p=*q; *q=s; p=&studj+1.aver_score; q=&studj.aver_score; s=*p; *p=*q; *q=s; for(int k=1;km+1;k+) s=studj+1.scorek-1;studj+1.scorek-1=studj.scorek-1; studj.scorek-1=s; /*/void high(Student stud, int n) /*输出总分在全班平均分及平均分之上的学生名单*/int i;all(stud,n); printf(tt -n)
12、; /*格式头*/ printf(tt 学号 姓名 总分 全班平均分n); printf(tt -n); for(i=1;i=all_aver(stud, n)printf(ttt%-16s%-15s%d %dn, studi-1.num,studi-1.name,studi-1.all_score,all_aver(stud, n); if(i1&i%10=0) /*每十个暂停*/ printf(tt -n); /*格式*/ printf(tt ); system(pause); printf(tt -n); printf(tt ); system(pause); /*/void unpas
13、s(Student stud,int n)/*输出某门课程不及格学生名单*/int j,i;printf(tt 你要查看哪一科不及格的学生名单?ntt 请输入课程号);scanf(%d,&j);printf(tt 不及格学生名单:n);printf(tt -n); /*格式头*/ printf(tt 学号 姓名 课程号 分数n); printf(tt -n); for(i=1;in+1;i+) if(studi-1.scorej-160) printf(tt %-16s %-15s %d %dn,studi-1.num,studi-1.name,j,studi-1.scorej-1); pri
14、ntf(tt );system(pause); /*/void main() /*主函数*/int n=0; for( ; ; ) int i;switch(menu_select() /*选择判断*/ case 1: printf(tt 下面进行学生信息输入:n); /*输入若干条记录*/ n=Input(stud,n); break; case 2: printf(tt 所有学生信息如下:n); /*显示所有记录*/ Display(stud,n); break; case 3: printf(tt 每个学生的总分和平均分:n); all(stud,n); /*求每个学生的总分*/aver
15、(stud, n);/*求每个学生的平均分*/ printf(tt -n); /*格式头*/ printf(tt 学号 姓名 总分 平均分n); printf(tt -n); for( i=1;in+1;i+) /*循环输入*/ printf(tt %-10s%-20s %d %dn,studi-1.num,studi-1.name,studi-1.all_score,studi-1.aver_score);printf(tt ) ;system(pause); break; case 4: printf(tt 按总分由大到小排名:n);all(stud,n); sort(stud, n);p
16、rintf(tt -n); /*格式头*/ printf(tt 学号 姓名 总分n); printf(tt -n); for( i=1;in+1;i+) /*循环输入*/ printf(tt %s %s %dn,studi-1.num,studi-1.name,studi-1.all_score); printf(tt );system(pause); break; case 5: printf(tt 成绩在平均分及平均分之上的学生:n); high(stud, n); break; case 6: unpass(stud, n); break; case 0: printf(tt 谢谢使用!
17、n); /*结束程序*/ printf(tt ); system(pause);exit(0); 运行结果截屏如下:菜单选项一:输入学生信息:菜单选项二:打印学生信息菜单选项三:统计每个学生的总分和平均分并打印菜单选项四:按总分由大到小排出名次并打印菜单选项五:打印出成绩在全班平均分及平均分之上的学生名单菜单选项六:打印出某门不及格学生名单菜单选项0:退出系统6、强化训练心得体会 通过这紧张一周的C语言课程设计的制作,我收获不小,不仅捡回了遗忘多半的C语言知识,而且通过对题目的分析、代码的编写和报告的制作发现并解决了很多问题,查阅了很多资料,请教很多高手、学长学姐,还跟队友们一起探讨、交流、争
18、论、合作,相信我们这个团队每个成员的团队精神和合作能力都得到了很大的提高。 由于我们是上学期学习C语言的,并且课程结束的比较仓促,所以在课程设计的过程中,一开始感觉一头雾水,遇到了很多问题,许多课本上的知识不够灵活地掌握,所以进行了反复的修改和调试,一次次实验,查资料,补充,另寻方法,才一步步讲程序补充完整。在此过程中,加深了对数组,函数,循环体,条件判断的理解病能够熟练运用;并且能够熟练使用变量,字符串;还练习了冒泡排序法等,我们每个人的C语言知识都得到了很大的巩固,能力上也提高了一个台阶。虽然此次课程设计得以顺利完成,但是还是有很多不足之处,对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不太熟悉,修改的时候遇到了很大的困难,很多地方编的有些啰嗦。 希望老师可以帮我们指出和修改,谢谢! 专心-专注-专业