C语言实验报告Word版Word文档下载推荐.docx
《C语言实验报告Word版Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《C语言实验报告Word版Word文档下载推荐.docx(16页珍藏版)》请在冰豆网上搜索。
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):
对某个专业的学生,按某门课程成绩由低到高进行直接插入排序。
STUstu_class_subject[N];
//按某门课程成绩排序后的某个专业的学生信息;
(10)定义函数voidSave(STU*p,intn):
将学生信息存入文件。
四、程序清单(关键语句和变量加注释)
1.头文件,类型定义,函数声明
#include<
stdio.h>
stdlib.h>
string.h>
voidInput(STU*p,intn);
//从文件sutdentInit中输入n个学生的信息
voidOutput(STU*p);
//将p所指的某个学生信息表格化屏幕输出
STUFetch(intstudentIndex);
//从文件中随机读取第studentIndex个(0<
=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"
);
\n1.您将从文件中读取10个人的信\n"
printf("
\n2.您将从文件中随机读取第n(0<
=n<
=9)个学生的信
息\n"
)
\n3.您将根据某一班级某一专业总分超过多少进行查
找\n"
\n4.您将求某一课程分数最高的学生序号的下标\n"
\n5.您将对平均成绩由低到高进行简单选择排序法\n
"
\n6.您将对某一个班的平均成绩由低到高进行起泡排
序法\n"
\n7.您将对某门专业的学生的某门课程成绩由低到高
进行直接插入排序法\n"
\n8.您将把学生信息存入文件\n"
scanf("
%d"
&
id);
getchar();
switch(id){
case1:
{
printf("
\n从文件中读取信息\n"
Input(students,sizeof(students)/sizeof(STU));
//调用Input函数,sizeof(students)/sizeof(STU)表示要读取几个学生的信息
\n学号姓名专业班级课程1
课程2课程3\n"
for(i=0;
i<
N;
i++)
Output(students+i);
//调用Output函数
break;
}
case2:
\n请输入您想从文件中读取第几个结构体信
息(<
%d)\n"
N);
scanf("
n);
tem=Fetch(n);
//Fetch
\n下面是第%d个结构体的信息\n"
n);
Output(&
tem);
case3:
\n请输入班级号num(1或2)\n"
\n请输入专业名称majorname(computer=c,
software=s,network=n)\n"
\n请输入一个分数m(0<
m<
300)\n"
num);
getchar();
%c"
majorname);
m);
Search(students,num,majorname,m);
//调用Search函数
case4:
\n请输入某一课程下标corse(0,1,2)\n"
corse);
sub=Max(students,corse);
//调用Max函数,返回值给sub
\n下面是课程%d最高分学生的信息\n"
corse);
\n学号姓名专业班级课程0
课程1课程2\n"
Output(students+sub);
case5:
\n下面是对所有学生的平均成绩简单选择排序后的顺序:
\n"
Sort_select(students);
//调用Sort_select函数
case6:
\n请输入一个班级号num(1或2)\n"
\n下面是对某个班级起泡排序后顺序:
Sort_buble(students,num);
//调用Sort_buble函数
case7:
\n下面是对某一专业学生的某一课程直接插
入排序后的顺序:
Sort_insert(students,corse,&
//调用Sort_insert函数
case8:
Save(students,sizeof(students)/sizeof(STU));
//调用Save函数,sizeof(students)/sizeof(STU)表示要保存几个学生的信息
default:
if((id<
1)||(id>
8))
break;
}
}
}
3.Input函数
voidInput(STU*p,intn)
FILE*fp;
charfilename[15];
printf("
\n请输入打开文件名:
gets(filename);
fp=fopen(filename,"
r"
fread(p,sizeof(STU),n,fp);
fclose(fp);
4.Output函数
voidOutput(STU*p)
\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函数
STUFetch(intstudentIndex)
if((studentIndex<
0)||(studentIndex>
N-1)){
studentIndexerror\n"
exit(0);
getchar();
fseek(fp,(long)(studentIndex*sizeof(STU)),SEEK_SET);
fread(&
tem,sizeof(STU),1,fp);
returntem;
6.Search函数
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);
\n学号姓名专业班级
课程1课程2课程3\n"
Output(p+i);
}
7.Max函数
intMax(STU*p,intscoreIndex)
inti=0,max,result;
max=(p+i)->
score[scoreIndex];
result=i;
for(i=1;
score[scoreIndex]>
max){
max=(p+i)->
result=i;
returnresult;
8.Sort_select函数
voidSort_select(STU*p)
inti,j,k;
floatsum,ave[N],t;
sum=0.0;
sum=sum+(p+i)->
score[2];
ave[i]=sum/3;
N-1;
k=i;
for(j=k+1;
j<
j++){
if(ave[j]<
ave[k])
k=j;
t=ave[k];
ave[k]=ave[i];
ave[i]=t;
tem=*(p+k);
*(p+k)=*(p+i);
*(p+i)=tem;
\n学号姓名专业班级课程1课程2
课程3\n"
Output(p+i);
9.Sort_buble函数
voidSort_buble(STU*p,intn)
STUstu_class_ave[N],tem;
inti,j=0,count=0;
classNo==n){
count++;
stu_class_ave[j]=*(p+i);
j++;
sum=0.0;
sum=sum+(p+i)->
score[1]+
(p+i)->
count-1;
for(j=0;
count-i-1;
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;
for(j=0;
count;
Output(stu_class_ave+j);
10.Sort_insert函数
voidSort_insert(STU*p,intn,char*major)
STUstu_class_subject[N];
inti=0,j=1,count=0;
if(*major==(p+i)->
major[0]){
stu_class_subject[j]=*(p+i);
for(i=2;
=count;
stu_class_subject[0]=stu_class_subject[i];
for(j=i-1;
stu_class_subject[0].score[n]<
stu_class_subject
[j].score[n];
j--)
stu_class_subject[j+1]=stu_class_subject[j];
stu_class_subject[j+1]=stu_class_subject[0];
for(j=1;
Output(stu_class_subject+j);
11.Save函数
voidSave(STU*p,intn)
\n请输入保存的文件名:
if((fp=fopen(filename,"
wb"
))==NULL){
cannotopenfile\n"
return;
n;
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函数