C语言实验报告Word版.docx
- 文档编号:7478899
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:16
- 大小:157.96KB
C语言实验报告Word版.docx
《C语言实验报告Word版.docx》由会员分享,可在线阅读,更多相关《C语言实验报告Word版.docx(16页珍藏版)》请在冰点文库上搜索。
C语言实验报告Word版
《C语言程序设计实训1》报告
设计题目:
基于数组的学生信息管理系统
学院名称:
信息科学技术学院
专业:
计算机科学与技术
班级:
姓名:
学号
指导教师:
提交日期:
2014年12月22日
一、实验内容
编写并调试程序,实现学校各专业班级学生信息的管理。
10个学生的信息存储在文件studentInit.dat中。
在头文件student.h中定义学生信息的结构体类型,包括:
学号、姓名、专业、班级、3门成绩;和符号常量N(学生数)。
(同一班级的学生可以属于不同的专业,同一专业的学生可以属于不同的班级)
#defineN10
structStudent{
charnum[15];//学号
charname[15];//姓名
charmajor[10];//专业(computer,software,network)
intclassNo;//班级(1-2)
intscore[3];//3门课的成绩(0-2)
};
typedefstructStudentSTU;
二、实验要求
(1)main函数:
以菜单形式将各项功能提供给用户,根据用户的选择,调用相应的函数。
STUstudent[N];//保存输入的N名学生信息
(2)定义函数voidInput(STU*p,intn):
从文件sutdentInit中输入n个学生的信息。
(3)定义函数voidOutput(STU*p):
将p所指的某个学生信息表格化屏幕输出。
(4)定义函数STUFetch(intstudentIndex):
从文件中随机读取第studentIndex个(0<=studentIndex<=N-1)学生的信息。
(5)定义函数voidSearch(STU*p,intclassNo,chars,intscoreSum);:
实现班级和成绩的综合查找(如1班,总分>240的同学)。
(6)定义函数intMax(STU*p,intscoreIndex):
求所有学生、下标为scoreIndex的课程分数最高的学生序号(在数组中的下标),学生序号作为返回值。
(7)定义函数voidSort_select(STU*p):
对所有学生,按平均成绩由低到高进行简单选择排序。
(8)定义函数voidSort_buble(STU*p,intn);对某个班级的学生,按平均成绩由高到低进行起泡排序。
并调用Output输出。
定义局部变量:
STUstu_class_ave[N];//按平均成绩排序后的某个班级的学生信息;
intcount;//实际元素个数
(9)定义函数voidSort_insert(STU*p,intn,char*major):
对某个专业的学生,按某门课程成绩由低到高进行直接插入排序。
并调用Output输出。
定义局部变量:
STUstu_class_subject[N];//按某门课程成绩排序后的某个专业的学生信息;
intcount;//实际元素个数
(10)定义函数voidSave(STU*p,intn):
将学生信息存入文件。
四、程序清单(关键语句和变量加注释)
1.头文件,类型定义,函数声明
#include
#include
#include
#defineN10
structStudent{
charnum[15];
charname[15];
charmajor[10];
intclassNo;
intscore[3];
};
typedefstructStudentSTU;
voidInput(STU*p,intn);//从文件sutdentInit中输入n个学生的信息
voidOutput(STU*p);//将p所指的某个学生信息表格化屏幕输出
STUFetch(intstudentIndex);//从文件中随机读取第studentIndex个(0<=studentIndex<=N-1)学生的信息
voidSearch(STU*p,intclassNo,chars,intscoresum);//实现班级和成绩的综合查找(如1班,总分>240的同学)
intMax(STU*p,intscoreIndex);//求所有学生、下标为scoreIndex的课程分数最高的学生序号(在数组中的下标),学生序号作为返回值
voidSort_select(STU*p);//对所有学生,按平均成绩由低到高进行简单选择排序
voidSort_buble(STU*p,intn);//对某个班级的学生,按平均成绩由高到低进行起泡排序
voidSort_insert(STU*p,intn,char*major);//对某个专业的学生,按某门课程成绩由低到高进行直接插入排序
voidSave(STU*p,intn);//将学生信息存入文件
2.主函数
#include"student.h"
voidmain()
{
inti,n,id,num,m,sub,corse;//n,第几个结构体;id,菜单序号;num,班级号;sub,学生下标;corse,课程下标
charmajorname;//专业名称
STUstudents[N];
STUtem;
while
(1){
printf("\n请输入功能编号,运行相应功能\n");
printf("\n1.您将从文件中读取10个人的信\n");
printf("\n2.您将从文件中随机读取第n(0<=n<=9)个学生的信
息\n")
printf("\n3.您将根据某一班级某一专业总分超过多少进行查
找\n");
printf("\n4.您将求某一课程分数最高的学生序号的下标\n");
printf("\n5.您将对平均成绩由低到高进行简单选择排序法\n
");
printf("\n6.您将对某一个班的平均成绩由低到高进行起泡排
序法\n");
printf("\n7.您将对某门专业的学生的某门课程成绩由低到高
进行直接插入排序法\n");
printf("\n8.您将把学生信息存入文件\n");
scanf("%d",&id);
getchar();
switch(id){
case1:
{
printf("\n从文件中读取信息\n");
Input(students,sizeof(students)/sizeof(STU));//调用Input函数,sizeof(students)/sizeof(STU)表示要读取几个学生的信息
printf("\n学号姓名专业班级课程1
课程2课程3\n");
for(i=0;i Output(students+i);//调用Output函数 break; } case2: { printf("\n请输入您想从文件中读取第几个结构体信 息(<%d)\n",N); scanf("%d",&n); tem=Fetch(n);//Fetch printf("\n下面是第%d个结构体的信息\n",n); printf("\n学号姓名专业班级课程1 课程2课程3\n"); Output(&tem);//调用Output函数 break; } case3: { printf("\n请输入班级号num(1或2)\n"); printf("\n请输入专业名称majorname(computer=c, software=s,network=n)\n"); printf("\n请输入一个分数m(0 scanf("%d",&num); getchar(); scanf("%c",&majorname); getchar(); scanf("%d",&m); Search(students,num,majorname,m);//调用Search函数 break; } case4: { printf("\n请输入某一课程下标corse(0,1,2)\n"); scanf("%d",&corse); sub=Max(students,corse);//调用Max函数,返回值给sub printf("\n下面是课程%d最高分学生的信息\n",corse); printf("\n学号姓名专业班级课程0 课程1课程2\n"); Output(students+sub);//调用Output函数 break; } case5: { printf("\n下面是对所有学生的平均成绩简单选择排序后的顺序: \n"); Sort_select(students);//调用Sort_select函数 break; } case6: { printf("\n请输入一个班级号num(1或2)\n"); scanf("%d",&num); printf("\n下面是对某个班级起泡排序后顺序: \n"); Sort_buble(students,num);//调用Sort_buble函数 break; } case7: { printf("\n请输入某一课程下标corse(0,1,2)\n"); printf("\n请输入专业名称majorname(computer=c, software=s,network=n)\n"); scanf("%d",&corse); getchar(); scanf("%c",&majorname); printf("\n下面是对某一专业学生的某一课程直接插 入排序后的顺序: \n"); Sort_insert(students,corse,&majorname);//调用Sort_insert函数 break; } case8: { Save(students,sizeof(students)/sizeof(STU));//调用Save函数,sizeof(students)/sizeof(STU)表示要保存几个学生的信息 break; } default: { break; } if((id<1)||(id>8)) break; } } } 3.Input函数 #include"student.h" voidInput(STU*p,intn) { FILE*fp; charfilename[15]; printf("\n请输入打开文件名: \n"); gets(filename); fp=fopen(filename,"r"); fread(p,sizeof(STU),n,fp); fclose(fp); } 4.Output函数 #include"student.h" voidOutput(STU*p) { printf("\n%-5s%-10s%-8s%6d%6d%7d%7d\n",p->num,p->name,p->major,p->classNo,p->score[0],p->score[1],p->score[2]); } 5.Fetch函数 #include"student.h" STUFetch(intstudentIndex) { STUtem; FILE*fp; charfilename[15]; if((studentIndex<0)||(studentIndex>N-1)){ printf("studentIndexerror\n"); exit(0); } getchar(); printf("\n请输入打开文件名: \n"); gets(filename); fp=fopen(filename,"r"); fseek(fp,(long)(studentIndex*sizeof(STU)),SEEK_SET); fread(&tem,sizeof(STU),1,fp); fclose(fp); returntem; } 6.Search函数 #include"student.h" voidSearch(STU*p,intclassNo,chars,intscoreSum) { inti; for(i=0;i if((p+i)->classNo==classNo) if((p+i)->major[0]==s) if(((p+i)->score[0]+(p+i)->score[1]+(p+i)-> score[2])>scoreSum){ printf("\n下面是班级%d专业%c超过%d分的学生 信息\n",classNo,s,scoreSum); printf("\n学号姓名专业班级 课程1课程2课程3\n"); Output(p+i); } } } 7.Max函数 #include"student.h" intMax(STU*p,intscoreIndex) { inti=0,max,result; max=(p+i)->score[scoreIndex]; result=i; for(i=1;i if((p+i)->score[scoreIndex]>max){ max=(p+i)->score[scoreIndex]; result=i; } } returnresult; } 8.Sort_select函数 #include"student.h" voidSort_select(STU*p) { inti,j,k; floatsum,ave[N],t; STUtem; for(i=0;i sum=0.0; sum=sum+(p+i)->score[0]+(p+i)->score[1]+(p+i)->score[2]; ave[i]=sum/3; } for(i=0;i k=i; for(j=k+1;j if(ave[j] k=j; } t=ave[k]; ave[k]=ave[i]; ave[i]=t; tem=*(p+k); *(p+k)=*(p+i); *(p+i)=tem; } printf("\n学号姓名专业班级课程1课程2 课程3\n"); for(i=0;i Output(p+i); } 9.Sort_buble函数 #include"student.h" voidSort_buble(STU*p,intn) { STUstu_class_ave[N],tem; inti,j=0,count=0; floatsum,ave[N],t; for(i=0;i if((p+i)->classNo==n){ count++; stu_class_ave[j]=*(p+i); j++; sum=0.0; sum=sum+(p+i)->score[0]+(p+i)->score[1]+ (p+i)->score[2]; ave[i]=sum/3; } for(i=0;i for(j=0;j if(ave[j]>ave[j+1]){ t=ave[j]; ave[j]=ave[j+1]; ave[j+1]=t; tem=stu_class_ave[j]; stu_class_ave[j]=stu_class_ave[j+1]; stu_class_ave[j+1]=tem; } printf("\n学号姓名专业班级课程1课程2 课程3\n"); for(j=0;j Output(stu_class_ave+j); } 10.Sort_insert函数 #include"student.h" voidSort_insert(STU*p,intn,char*major) { STUstu_class_subject[N]; inti=0,j=1,count=0; for(i=0;i if(*major==(p+i)->major[0]){ count++; stu_class_subject[j]=*(p+i); j++; } for(i=2;i<=count;i++){ stu_class_subject[0]=stu_class_subject[i]; for(j=i-1;stu_class_subject[0].score[n] [j].score[n];j--) stu_class_subject[j+1]=stu_class_subject[j]; stu_class_subject[j+1]=stu_class_subject[0]; } printf("\n学号姓名专业班级课程1课程2 课程3\n"); for(j=1;j<=count;j++) Output(stu_class_subject+j); } 11.Save函数 #include"student.h" voidSave(STU*p,intn) { FILE*fp; charfilename[15]; inti; printf("\n请输入保存的文件名: \n"); gets(filename); if((fp=fopen(filename,"wb"))==NULL){ printf("cannotopenfile\n"); return; } for(i=0;i if(fwrite(p++,sizeof(STU),1,fp)! =1) printf("filewriteerror\n"); } 五、程序测试(Input、Search、Max、Sort_buble、Sort_insert函数的调用及执行结果的截图) 1.Input函数 2.Search函数 3.Max函数 4.Sort_buble函数 5.Sort_insert函数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 实验 报告 Word