c语言程序设计报告.docx
- 文档编号:3281270
- 上传时间:2023-05-05
- 格式:DOCX
- 页数:18
- 大小:195.07KB
c语言程序设计报告.docx
《c语言程序设计报告.docx》由会员分享,可在线阅读,更多相关《c语言程序设计报告.docx(18页珍藏版)》请在冰点文库上搜索。
c语言程序设计报告
C语言课程设计
专业年级:
10级****三班
学号:
1001********
姓名:
***
指导教师:
***
****/**/**
目录
一.设计内容及设计要求…………..1
二.设计思路………………………..1
三.程序设计流程图………………..2
四.源程序(含注释)…………….9
五.设计及调试中所遇问题,和解决方法…………………………..19
六.体会及收获…………………..20
一.设计内容,设计要求
1,由键盘输入20个学生a~t的某门课程的学习成绩60~99分。
(也可自己定义)
2,将分数由高到低排序(用直接排序法和冒泡法),并显示学生学号、姓名和对应的分数。
3,用线性搜索法检索某个学生的成绩(输入姓名,显示学号和成绩)
4,对分搜索法检索某个学生的成绩(输入学号,显示成绩)
二.设计思路
建立结构体类型(structstudent),此结构体中包括num(学号)、name(名字)、score(成绩)。
在输入数据时只需要输入学号、姓名和成绩,在每个调用函数中输出结果。
在主函数中先用逻辑语句完成了一个引入界面
按任意键即可开始进入菜单函数。
在主函数还有个菜单函数,再用switch语句实现函数调用,主要调用函数是输入信息函数,直接排序函数和冒泡法排序函数,直接搜索法函数和对分(学号的对分)搜索法函数。
下面图就是主菜单:
再就在每个调用函数中实现各自功能。
由与20人过多,在此程序中宏定义的人数为4人。
此函数可以在输入信息后跳入任何一个调用函数中实现要求的功能。
将在下面流程图中更加具体说明个函数的使用。
三.程序设计流程图
先是主函数的流程图,在分别是输入信息,对分搜索法(提前的原因主要是说明可以从第一步直接跳到第五步),直接排序法,冒泡排序法,最后是直接查找法。
(中间将穿插截屏说明)
(1)程序总体框图
这是这次函数的主要设计框架,再将分别一一介绍。
(2)输入学生信息
截屏如下:
(3)对分搜索法
截屏如下:
(3)直接排序法
查询结果截屏如下:
(由于考虑的学号和名次冲突,没有排序学号)
(4)冒泡排序法
输出结果截屏如下:
(5)直接搜索发
查询结果截屏如下:
以上就是所有流程图,可能很粗糙,尽情原谅。
为了使图形看起来都不一样,采用不同构造。
四.源程序(含注释)
#include
#include
#include
#include
#defineN4/*定义班级人数*/
structstudent/*建立结构体类型*/
{
charname[50];
intscore,num;
}stu1,stu2,stu3,student[N];/*定义结构体变量stu1,stu2,stu3,用作交换时的临时变量*/
intmenu()
{
intc;
do
{printf("\n〓〓〓〓〓〓〓〓〓〓☆主菜单☆〓〓〓〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓★★★★★★★★★★★★★★★★★〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓〓〓★☆1.输入学生个人信息☆★〓〓〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓〓〓★☆2.直接排序法排列成绩☆★〓〓〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓〓〓★☆3.冒泡排序法排列成绩☆★〓〓〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓〓〓★☆4.直接法查找信息☆★〓〓〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓〓〓★☆5.对分法查找信息☆★〓〓〓〓〓〓〓〓〓\n");
printf("\n〓〓〓〓〓〓〓〓〓★☆6.退出系统☆★〓〓〓〓〓〓〓〓〓\n");
printf("\n\n\n\n\n\n请选择操作方式:
");
scanf("%d",&c);
}while(c<1||c>5);
returnc;
}
/*********************************输入学生个人信息*******************************************/
voidinput(structstudent)
{
inti=0;
printf("请输入学生信息:
\n");/*输入学生信息*/
{
for(i=0;i {printf("学号: "); scanf("%5d",&student[i].num); printf("姓名: "); scanf("%10s",&student[i].name); printf("成绩: "); scanf("%5d",&student[i].score); } system("pause"); } /******************************直接排列学生成绩*********************************************/ voidscore1(structstudent)/*定义直接排序法函数*/ { inti,j,k,max; for(i=0;i { k=i+1; max=i; for(j=k;j if(student[j].score>student[max].score) max=j; stu1=student[i]; student[i]=student[max]; student[max]=stu1; } printf("排序后的结果: \n"); for(i=0;i { printf("名次: %d,姓名: %s,成绩: %d\n",i+1,student[i].name,student[i].score);/*输出信息*/ } } /*****************************冒泡排列法学生成绩*********************************************/ voidscore2(structstudent)/*定义冒泡法排序函数*/ { inti,j; for(i=0;i for(j=i+1;j { if(student[i].score { stu1=student[i]; student[i]=student[j]; student[j]=stu1; } } printf("排序后的结果: \n"); for(i=0;i { printf("名次: %d,姓名: %s,成绩: %d\n",i+1,student[i].name,student[i].score);/*输出信息*/ } } /***********************************直接查找法***************************************************/ voidsearch1(structstudent) { inti; charc; charName[50]; do{ printf("请输入您想要查询的姓名以便查找该学生的成绩: \n");/*输入查找信息*/ scanf("%10s",Name); for(i=0;i { if(strcmp(Name,student[i].name)==0)break; } if(i { printf("查询结果为: \n"); printf("姓名: %10s,成绩: %5d\n",student[i].name,student[i].score)/*输出信息*/ } else printf("没有找到该学生的信息,不妨再次查询\n"); printf("是否继续查询: 'y'or'Y': ");/*是否继续查询*/ getchar(); c=getchar(); }while(c=='y'||c=='Y'); system("pause"); } /****************************************对分查找法**********************************************/ voidsearch2(structstudent) { inti,j,k,m,x,l; structstudenttemp; charc; do { printf("请输入你的学号: ");/*输入查找信息*/ scanf("%d",&l); printf("***************************************************\n"); for(i=0;i { k=i; for(j=i+1;j if(student[j].num k=j; temp=student[k]; student[k]=student[i]; student[i]=temp; } x=0,m=N-1; while(x<=m) { i=(m+x)/2; if(student[i].num==l) { printf("学号姓名分数\n"); printf("%d%8s%6d\n",student[i].num,student[i].name,student[i].score);/*输出信息*/ break; } if(student[i].num if(student[i].num>l)m=i-1; } printf("***************************************************\n"); printf("继续查询'y'放弃查询'n': \n");/*是否继续查询*/ getchar(); getchar(); c=getchar(); } while(c=='y'); } /******************************************主函数************************************************/ voidmain() { {intselect;inti=0; boolquit=false; printf("\n﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌\n"); for(i=0;i<3;i++) printf("\n◎\t\t\t\t\t\t\t\t\t◎"); printf("\n\n华中科技大学文华学院\n\n"); printf("\n★★★★【欢迎进入学生成绩管理系统】★★★★\n"); for(i=0;i<3;i++) printf("\n◎\t\t\t\t\t\t\t\t\t◎"); printf("\n﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌﹌\n"); printf("按任意键开始……"); getch(); while(! quit) while (1) { select=menu(); switch(select) { case1: input(student[N]);/*调用输入函数*/ break; case2: score1(student[N]);/*调用直接排序函数*/ break; case3: score2(student[N]);/*调用冒泡排序函数*/ break; case4: search1(student[N]);/*调用直接搜索法函数*/ break; case5: search2(student[N]);/*调用学号折半搜索法函数*/ break; case6: printf("谢谢使用\n"); exit(0);/*退出程序*/ } } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 报告