收藏 分销(赏)

C语言实验报告.doc

上传人:a199****6536 文档编号:1362691 上传时间:2024-04-24 格式:DOC 页数:21 大小:152KB 下载积分:10 金币
下载 相关 举报
C语言实验报告.doc_第1页
第1页 / 共21页
C语言实验报告.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
《C语言程序设计实训1》报告 设   计 题 目: 基于数组得学生信息管理系统                                                学   院  名  称:   信息科学技术学院    专        业:  计算机科学与技术           班    级:               姓  名: 学 号 指  导  教  师:                 提  交   日  期:      2014年12月22日   一、实验内容 编写并调试程序,实现学校各专业班级学生信息得管理。10个学生得信息存储在文件studentInit、dat中。在头文件student、h中定义学生信息得结构体类型,包括:学号、姓名、专业、班级、3门成绩;与符号常量N(学生数)。(同一班级得学生可以属于不同得专业,同一专业得学生可以属于不同得班级) #define N 10 struct Student{ char num[15];//学号 char name[15];//姓名 char major[10];//专业(puter,software,network) int classNo;//班级(1-2) int score[3];//3门课得成绩(0-2) }; typedef struct Student STU; 二、实验要求 (1) main函数:以菜单形式将各项功能提供给用户,根据用户得选择,调用相应得函数。 STU student[N]; //保存输入得N名学生信息 (2) 定义函数void Input(STU *p, int n):从文件sutdentInit中输入n个学生得信息。 (3) 定义函数void Output(STU *p):将p所指得某个学生信息表格化屏幕输出。 (4) 定义函数STU Fetch(int studentIndex):从文件中随机读取第studentIndex个(0<= studentIndex <=N-1)学生得信息。 (5) 定义函数void Search(STU *p, int classNo, char s, int scoreSum);:实现班级与成绩得综合查找(如1班,总分>240得同学)。 (6) 定义函数int Max(STU *p, int scoreIndex):求所有学生、下标为scoreIndex得课程分数最高得学生序号(在数组中得下标),学生序号作为返回值。 (7) 定义函数void Sort_select(STU *p): 对所有学生,按平均成绩由低到高进行简单选择排序。 (8) 定义函数void Sort_buble(STU *p, int n);  对某个班级得学生,按平均成绩由高到低进行起泡排序。并调用Output输出。 定义局部变量: STU stu_class_ave[N]; //按平均成绩排序后得某个班级得学生信息; int count; //实际元素个数 (9) 定义函数void Sort_insert(STU *p, int n, char *major):对某个专业得学生,按某门课程成绩由低到高进行直接插入排序。并调用Output输出。 定义局部变量: STU stu_class_ subject [N]; //按某门课程成绩排序后得某个专业得学生信息; int count; //实际元素个数 (10) 定义函数void Save(STU *p,int n) :将学生信息存入文件。 四、程序清单(关键语句与变量加注释) 1.头文件,类型定义,函数声明 #include <stdio、h> #include <stdlib、h> #include <string、h> #define N 10 struct Student{ char num[15]; char name[15]; ﻩchar major[10]; int classNo; int score[3]; }; typedef struct Student STU; void Input(STU * p,int n);//从文件sutdentInit中输入n个学生得信息 void Output(STU * p);//将p所指得某个学生信息表格化屏幕输出 STU Fetch(int studentIndex);//从文件中随机读取第studentIndex个(0<= studentIndex <=N-1)学生得信息 void Search(STU * p,int classNo,char s,int scoresum);//实现班级与成绩得综合查找(如1班,总分>240得同学) int Max(STU * p,int scoreIndex);//求所有学生、下标为scoreIndex得课程分数最高得学生序号(在数组中得下标),学生序号作为返回值 void Sort_select(STU * p);//对所有学生,按平均成绩由低到高进行简单选择排序 void Sort_buble(STU * p,int n);//对某个班级得学生,按平均成绩由高到低进行起泡排序 void Sort_insert(STU * p,int n,char * major);//对某个专业得学生,按某门课程成绩由低到高进行直接插入排序 void Save(STU * p,int n);//将学生信息存入文件 2、主函数 #include "student、h" void main() { int i,n,id,num,m,sub,corse;//n,第几个结构体;id,菜单序号;num,班级号;sub,学生下标;corse,课程下标 ﻩchar majorname;//专业名称 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){ ﻩﻩcase 1: ﻩﻩ { ﻩ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; ﻩ } ﻩ case 3: ﻩﻩ { ﻩ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; ﻩ} ﻩcase 4: { ﻩ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; } ﻩcase 5: ﻩ ﻩ{ ﻩﻩﻩﻩprintf("\n下面就是对所有学生得平均成绩简单选择排序后得顺序:\n"); ﻩ ﻩSort_select(students);//调用Sort_select函数 ﻩﻩbreak; ﻩﻩ } ﻩﻩcase 6: ﻩ ﻩ{ ﻩ 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下面就是对某一专业学生得某一课程直接插 入排序后得顺序:\n"); ﻩﻩ ﻩSort_insert(students,corse,&majorname);//调用Sort_insert函数 ﻩﻩﻩ break; ﻩ} ﻩ case 8: ﻩﻩ { ﻩ ﻩ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请输入打开文件名:\n"); gets(); ﻩfp=fopen(,"r"); ﻩfread(p,sizeof(STU),n,fp); ﻩfclose(fp); } 4、Output函数 #include "student、h" void Output(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" STU Fetch(int studentIndex) { ﻩSTU tem; ﻩ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); return tem; } 6、Search函数 #include "student、h" void Search(STU * p,int classNo,char s,int scoreSum) { ﻩint i; ﻩ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,int scoreIndex) { ﻩint i=0,max,result; ﻩmax=(p+i)->score[scoreIndex]; result=i; for(i=1;i<N;i++){ ﻩﻩif((p+i)->score[scoreIndex]>max){ ﻩ ﻩmax=(p+i)->score[scoreIndex]; ﻩﻩﻩresult=i; ﻩ} } ﻩreturn result; } 8、 Sort_select函数 #include "student、h" void Sort_select(STU * p) { int i,j,k; ﻩfloat sum,ave[N],t; STU tem; ﻩfor(i=0;i<N;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<N-1;i++){ k=i; ﻩfor(j=k+1;j<N;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;i<N;i++) ﻩ Output(p+i); } 9、 Sort_buble函数 #include "student、h" void Sort_buble(STU * p,int n) { STU stu_class_ave[N],tem; ﻩint i,j=0,count=0; ﻩfloat sum,ave[N],t; for(i=0;i<N;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<count-1;i++) ﻩ for(j=0;j<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,int n,char * major) { STU stu_class_subject[N]; int i=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;j<=count;j++) ﻩ Output(stu_class_subject+j); } 11、 Save函数 #include "student、h" void Save(STU * p,int n) { FILE * fp; ﻩchar [15]; ﻩint i; ﻩprintf("\n请输入保存得文件名:\n"); ﻩgets(); ﻩif((fp=fopen(,"wb"))==NULL){ ﻩﻩprintf("cannot open file\n"); ﻩ return; ﻩ} for(i=0;i<n;i++){ ﻩ 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函数
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 开发语言

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服