已创建了一个包含学生学号、身高、性别的学生身高信息表并输出到屏幕,学生信息从文件读取。 编写一个函数 void reverse(Seqlist *lp); 功能是对已建立的学生身

时间:2025-05-06 22:24:27
#include <> #include <> #define MAX 50 typedef struct { int xh; /*学号*/ float sg; /*身高*/ int sex; /*性别,0为男生,1为女生*/ } datatype; typedef struct{ datatype data[MAX]; /*存放顺序表元素的数组*/ int last; /*表示data中实际存放元素个数*/ }Seqlist; void initList(Seqlist *lp);/*置一个空表*/ void createList(Seqlist *lp);/*建一个学生顺序表*/ void sort_xh(Seqlist *lp);/*按学号排序*/ void pntList(Seqlist *lp);/*输出学生表*/ void save(Seqlist *lp,char strname[]);/*保存学生顺序表到指定文件*/ void reverse(Seqlist *lp);//倒置 double avg(Seqlist *lp,int sex);//默认性别的平均值 void deleX(Seqlist *lp,int sex);//删掉特定性别的信息 int main() { Seqlist L; initList(&L); createList(&L); int n,m; printf("请输入序号:\普通输出\n2.按学号正序输出\n3.倒置输出\n4.求某性别的平均身高\n5.删除某性别\n\n"); scanf("%d",&n); if(n==1){ printf("--普通输出--\n"); pntList(&L); } else if(n==2){ printf("--按学号正序输出--\n"); sort_xh(&L);/*先按学号排序*/ pntList(&L); } else if(n==3){ printf("--倒置输出--\n"); reverse(&L);//倒置 pntList(&L); } else if(n==4){ printf("--求某性别的平均身高--\n"); printf("请输入性别:0.男生 1.女生\n"); scanf("%d",&m); printf("平均身高为:%.2f",avg(&L,m)); } else if(n==5){ printf("--删除某性别的信息--\n"); printf("请输入性别:0.男生 1.女生\n"); scanf("%d",&m); deleX(&L,m); pntList(&L); } return 0; } /*置一个空表*/ void initList(Seqlist *lp) { lp->last=0; } /*建一个学生顺序表*/ void createList(Seqlist *lp) { FILE *fp; int xh; float sg; int sex; if((fp=fopen("D:\\","r"))==NULL) //文件位置改为自己保存的位置哦! { printf("can not open read file !\n"); exit(1); /*返回OS,该函数定义在中*/ } while(!feof(fp)) { fscanf(fp,"%d%f%d",&xh,&sg,&sex); lp->data[lp->last].xh=xh; lp->data[lp->last].sg=sg; lp->data[lp->last].sex=sex; lp->last++; } fclose(fp); } /*按学号排序*/ void sort_xh(Seqlist *lp) { int i,j,k; datatype st; for(i=0;i<lp->last-1;i++) {k=i; for(j=i+1;j<lp->last;j++) if(lp->data[j].xh<lp->data[k].xh ) k=j; if(k!=i) {st=lp->data[k]; lp->data[k]=lp->data[i]; lp->data[i]=st;} } } void reverse(Seqlist *lp){ int tmp=0; datatype st; for(tmp=0;tmp<lp->last/2;tmp++){ st = lp->data[lp->last-tmp-1]; lp->data[lp->last-tmp-1] = lp->data[tmp]; lp->data[tmp] = st; } } /*输出学生顺序表*/ void pntList(Seqlist *lp) { int i; for(i=0;i<lp->last ;i++) printf("%2d: %.2f %d\n",lp->data [i].xh,lp->data [i].sg,lp->data[i].sex); } /*保存学生顺序表到指定文件*/ void save(Seqlist *lp,char strname[]) { FILE *fp; int i; if((fp=fopen(strname,"w"))==NULL) { printf("can not open write file !\n"); exit(1); /*返回OS*/ } for(i=0;i<lp->last ;i++) { fprintf(fp,"%2d %5.2f %2d\n",lp->data[i].xh,lp->data[i].sg,lp->data[i].sex); } fclose(fp); } double avg(Seqlist *lp,int sex) { int i,tmp=0; double total=0; for(i=0;i<lp->last;i++){ if(lp->data[i].sex==sex){//匹配性别 total+=lp->data[i].sg; tmp++; } } double result = total/tmp; return result+0.005;//保留两位小数时的进位操作 } void deleX(Seqlist *lp, int sex){ int tmp = 0; for(int i=0;i<lp->last;i++){ if(lp->data[i].sex!=sex){//删除匹配性别的学生 lp->data[tmp++] = lp->data[i]; } } lp->last=tmp; }