1、c语言程序设计报告 C语言课程设计 专业年级:10级*三班学号:1001*姓名:*指导教师:* */*/* 目录一设计内容及设计要求.1二设计思路.1三. 程序设计流程图.2四源程序(含注释).9五设计及调试中所遇问题,和解决方法.19 六体会及收获.20 一 设计内容,设计要求1,由键盘输入20个学生at的某门课程的学习成绩6099分。(也可自己定义)2,将分数由高到低排序(用直接排序法和冒泡法),并显示学生学号、姓名和对应的分数。 3,用线性搜索法检索某个学生的成绩(输入姓名,显示学号和成绩)4,对分搜索法检索某个学生的成绩(输入学号,显示成绩)二. 设计思路建立结构体类型(struct
2、student),此结构体中包括num(学号)、name(名字)、score(成绩)。在输入数据时只需要输入学号、姓名和成绩,在每个调用函数中输出结果。在主函数中先用逻辑语句完成了一个引入界面按任意键即可开始进入菜单函数。在主函数还有个菜单函数,再用switch语句实现函数调用,主要调用函数是输入信息函数,直接排序函数和冒泡法排序函数,直接搜索法函数和对分(学号的对分)搜索法函数。下面图就是主菜单: 再就在每个调用函数中实现各自功能。由与20人过多,在此程序中宏定义的人数为4人。此函数可以在输入信息后跳入任何一个调用函数中实现要求的功能。将在下面流程图中更加具体说明个函数的使用。 三. 程序设
3、计流程图 先是主函数的流程图,在分别是输入信息,对分搜索法(提前的原因主要是说明可以从第一步直接跳到第五步),直接排序法,冒泡排序法,最后是直接查找法。(中间将穿插截屏说明 )(1)程序总体框图 这是这次函数的主要设计框架,再将分别一一介绍。 (2)输入学生信息 截屏如下:(3)对分搜索法 截屏如下:(3)直接排序法查询结果截屏如下:(由于考虑的学号和名次冲突,没有排序学号)(4)冒泡排序法 输出结果截屏如下:(5)直接搜索发查询结果截屏如下:以上就是所有流程图,可能很粗糙,尽情原谅。为了使图形看起来都不一样,采用不同构造。四源程序(含注释)#include#include#include#i
4、nclude /用getch();#define N 4 /*定义班级人数*/struct student /*建立结构体类型*/ char name50; int score,num; stu1,stu2,stu3, studentN; /*定义结构体变量stu1,stu2,stu3,用作交换时的临时变量*/int menu() int c; do printf(n 主菜单 n); printf(n n); printf(n 1.输入学生个人信息 n); printf(n 2.直接排序法排列成绩 n); printf(n 3.冒泡排序法排列成绩 n); printf(n 4.直接法查找信息
5、n); printf(n 5.对分法查找信息 n); printf(n 6.退出系统 n); printf(nnnnnn请选择操作方式:); scanf(%d,&c); while(c5); return c; /*输入学生个人信息*/void input(struct student) int i=0; printf(请输入学生信息:n); /*输入学生信息*/for(i=0;iN;i+) printf(学号:); scanf(%5d,&studenti.num); printf(姓名:); scanf(%10s,&studenti.name); printf(成绩:); scanf(%5d
6、,&studenti.score); system(pause); /*直接排列学生成绩*/void score1(struct student) /*定义直接排序法函数*/ int i,j,k,max; for( i=0;iN-1;i+) k=i+1; max=i; for(j=k;jstudentmax.score) max=j; stu1=studenti; studenti=studentmax; studentmax=stu1; printf(排序后的结果:n); for( i=0;iN;i+) printf(名次:%d , 姓名:%s,成绩:%dn,i+1,studenti.nam
7、e,studenti.score); /*输出信息*/ /*冒泡排列法学生成绩*/void score2 (struct student) /*定义冒泡法排序函数*/ int i,j; for( i=0;iN-1;i+) for( j=i+1;jN;j+) if(studenti.scorestudentj.score) stu1=studenti; studenti=studentj; studentj=stu1; printf(排序后的结果:n); for( i=0;iN;i+) printf(名次:%d ,姓名:%s,成绩:%dn,i+1,studenti.name,studenti.s
8、core); /*输出信息*/ /*直接查找法*/ void search1(struct student) int i; char c; char Name50; do printf(请输入您想要查询的姓名以便查找该学生的成绩:n); /*输入查找信息*/ scanf(%10s,Name); for(i=0;iN;i+) if(strcmp(Name,studenti.name)=0) break; if(iN) printf(查询结果为:n); printf(姓名:%10s,成绩: %5dn,studenti.name,studenti.score) /*输出信息*/ else print
9、f(没有找到该学生的信息,不妨再次查询n); printf(是否继续查询:yorY:); /*是否继续查询*/ getchar(); c=getchar(); while(c=y|c=Y); system(pause);/*对分查找法*/void search2(struct student) int i,j,k,m,x,l; struct student temp; char c; doprintf(请输入你的学号:); /*输入查找信息*/scanf(%d,&l); printf(*n);for(i=0;iN-1;i+)k=i; for(j=i+1;jN;j+) if(studentj.n
10、umstudentk.num) k=j; temp=studentk; studentk=studenti; studenti=temp;x=0,m=N-1;while(x=m)i=(m+x)/2;if(studenti.num=l) printf(学号 姓名 分数 n); printf(%d %8s %6d n,studenti.num,studenti.name,studenti.score); /*输出信息*/ break;if(studenti.numl)m=i-1;printf(*n);printf(继续查询y放弃查询n:n); /*是否继续查询*/ getchar(); getch
11、ar();c=getchar();while(c=y); /*主函数*/void main() int select; int i=0; bool quit=false; printf(nn); for(i=0;i3;i+) printf(n ttttttttt ); printf(nn 华中科技大学文华学院 nn ); printf(n 【 欢迎进入学生成绩管理系统 】 n); for(i=0;i3;i+) printf(n ttttttttt ); printf(nn); printf(按任意键开始); getch(); while(!quit) while(1) select=menu(); switch(select) case 1:input(studentN); /*调用输入函数*/ break; case 2:score1(studentN); /*调用直接排序函数*/ break; case 3:score2(studentN); /*调用冒泡排序函数*/ break; case 4:search1(studentN); /*调用直接搜索法函数*/ break; case 5:search2(studentN); /*调用学号折半搜索法函数*/ break; case 6:printf(谢谢使用n); exit(0); /*退出程序*/
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1