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//用getch();
#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;jif(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;ifor(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;jif(student[j].numk=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].numif(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);/*退出程序*/
}
}
}
}