C语言实验报告Word格式文档下载.docx
《C语言实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《C语言实验报告Word格式文档下载.docx(16页珍藏版)》请在冰豆网上搜索。
//实际元素个数
(9)定义函数voidSort_insert(STU*p,intn,char*major):
对某个专业得学生,按某门课程成绩由低到高进行直接插入排序。
并调用Output输出。
定义局部变量:
STUstu_class_subject [N];
//按某门课程成绩排序后得某个专业得学生信息;
intcount;
//实际元素个数
(10)定义函数void Save(STU *p,intn):
将学生信息存入文件。
四、程序清单(关键语句与变量加注释)
1.头文件,类型定义,函数声明
#include<
stdio、h>
#include <
stdlib、h>
#include<string、h>
#define N 10
structStudent{
charnum[15];
charname[15];
ﻩcharmajor[10];
intclassNo;
int score[3];
};
typedef struct Student STU;
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得同学)
int Max(STU*p,int scoreIndex);
//求所有学生、下标为scoreIndex得课程分数最高得学生序号(在数组中得下标),学生序号作为返回值
void Sort_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;
//专业名称
STU students[N];
ﻩSTU tem;
ﻩ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<
N;
i++)
Output(students+i);
//调用Output函数
ﻩﻩﻩﻩbreak;
ﻩ}
ﻩcase 2:
ﻩﻩ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(puter=c,
software=s,network=n)\n");
ﻩﻩﻩprintf("
\n请输入一个分数m(0<
m<300)\n");
ﻩﻩ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("
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;
ﻩﻩ}
case 7:
{
ﻩﻩﻩprintf("
\n请输入某一课程下标corse(0,1,2)\n"
ﻩﻩprintf("\n请输入专业名称majorname(puter=c,
software=s,network=n)\n"
ﻩscanf("%d"
corse);
ﻩgetchar();
ﻩﻩscanf("
%c"
majorname);
ﻩﻩﻩprintf("
\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"
void Input(STU *p,int n)
{
FILE *fp;
ﻩchar[15];
ﻩprintf("
\n请输入打开文件名:
gets();
ﻩfp=fopen(,"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;
char[15];
if((studentIndex<0)||(studentIndex>
N-1)){
ﻩprintf("
studentIndex error\n"
ﻩexit(0);
getchar();
printf("
\n请输入打开文件名:
\n");
gets();
fp=fopen(,"
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<
N;
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"
int Max(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)
int i,j,k;
ﻩfloatsum,ave[N],t;
STUtem;
ﻩfor(i=0;
i<N;
ﻩsum=0、0;
ﻩsum=sum+(p+i)->score[0]+(p+i)->
score[1]+(p+i)->
score[2];
ﻩave[i]=sum/3;
ﻩ
i<N-1;
i++){
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;
printf("
\n学号 姓名 专业 班级课程1 课程2
课程3\n"
for(i=0;
N;
i++)
ﻩOutput(p+i);
9、Sort_buble函数
#include"student、h"
voidSort_buble(STU*p,int n)
STUstu_class_ave[N],tem;
ﻩinti,j=0,count=0;
ﻩfloatsum,ave[N],t;
for(i=0;
i<N;
ﻩ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;
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;
ﻩﻩﻩ}
printf("\n学号 姓名 专业 班级 课程1课程2
课程3\n"
for(j=0;
j<
count;
j++)
ﻩOutput(stu_class_ave+j);
10、Sort_insert函数
#include "student、h"
void Sort_insert(STU* p,intn,char *major)
STUstu_class_subject[N];
inti=0,j=1,count=0;
ﻩfor(i=0;
i<N;
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]<
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];
ﻩprintf("
\n学号姓名 专业 班级课程1 课程2
课程3\n");
for(j=1;
=count;
ﻩOutput(stu_class_subject+j);
11、Save函数
#include"
student、h"
voidSave(STU*p,int n)
FILE*fp;
ﻩchar[15];
ﻩint i;
ﻩprintf("
\n请输入保存得文件名:
\n"
ﻩgets();
ﻩif((fp=fopen(,"wb"
))==NULL){
ﻩﻩprintf("cannotopenfile\n"
ﻩreturn;
ﻩ}
for(i=0;
n;
ﻩif(fwrite(p++,sizeof(STU),1,fp)!
=1)
ﻩprintf("
error\n"
五、程序测试(Input、Search、Max、Sort_buble、Sort_insert函数得调用及执行结果得截图)
1、Input函数
2、Search函数
3、Max函数
4、Sort_buble函数
5、Sort_insert函数