在此基础上,增加下列功能函数
1、学生信息查询功能,根据学生的准考证号查询学生成绩信息
2、学生信息插入功能,在结构体数组的指定位置插入学生信息
3、学生信息删除功能,根据准考证号来删除满足条件的学生的信息
4、学生信息修改功能,根据准考证号来修改指定学生的成绩信息
【代码】
#include#define N 10000 struct student { char id[10]; char name[9]; float score[4]; float total; }; typedef struct student stuStru; int input(stuStru s[]) { int n = -1,i; printf("请按下列格式输入学生信息(行首输入q结束输入):n"); printf("------------------------------------------------------------------------------n"); printf("准考证号t姓名t语文t数学t英语t综合n"); do { n++; scanf_s("%s", s[n].id); if (s[n].id[0] == 'q') break; scanf_s("%s", s[n].name); for (i = 0; i < 4; i++) scanf_s("%f", &s[n].score[i]); } while (1); return n; } void sum(stuStru *s, int n) { int i, j; stuStru* p = s; while (p < s + n) { p->total = 0; for (j = 0; j < 4; j++) p->total += p->score[j]; p++; } } void selectSort(stuStru s[], int n) { int i, j, k, maxindex; stuStru temp; for (i = 0; i < n - 1; i++) { maxindex = i; for (j = i + 1; j < n; j++) if (s[j].total > s[maxindex].total) maxindex = j; if (i != maxindex) { temp = s[i]; s[i] = s[maxindex]; s[maxindex] = temp; } } } void print(stuStru* s, int n) { int i, j; if (n > 0) { printf("%-12s%-12s", "准考证号", "姓名"); printf("%-8s%-8s%-8s%-8s%-8sn", "语文", "数学", "英语", "综合", "总分"); printf("------------------------------------------------------------------------------------------n"); for (i = 0; i < n; i++, s++) { printf("%-12s", s->id); printf("%-12s", s->name); for (j = 0; j < 4; j++) printf("%-8.2f", s->score[j]); printf("%-8.2fn", s->total); } } } void search(stuStru s[],int n,char id[]) { int i,j; for (i=0;i printf("%-12s%-12s", "准考证号", "姓名"); printf("%-8s%-8s%-8s%-8s%-8sn", "语文", "数学", "英语", "综合", "总分"); printf("------------------------------------------------------------------------------------------n"); printf("%-12s", s[i].id); printf("%-12s", s[i].name); for (j = 0; j < 4; j++) printf("%-8.2f", s[i].score[j]); printf("%-8.2fn", s[i].total); } } int insert(stuStru s[],int n,int pos,stuStru x) { int i; if (pos>=0&&pos<=n-1) { for (i=n-1;i>=pos;i--) s[i+1]=s[i]; s[pos]=x; n++; } return n; } int dele(stuStru s[],int n,char id[]) { int i,j,pos; for (i=0;i if (strcmp(s[i].id,id)==0) { pos=i; for (j=pos+1;j int i,j; for (i=0;i if (strcmp(s[i].id,id)==0) { printf("%-12s%-12s", "准考证号", "姓名"); printf("%-8s%-8s%-8s%-8s%-8sn", "语文", "数学", "英语", "综合", "总分"); printf("------------------------------------------------------------------------------------------n"); scanf_s("%s", s[i].id); scanf_s("%s", s[i].name); for (j= 0; j < 4; j++) scanf_s("%f", &s[i].score[j]); } } } int main() { stuStru s[N]; int n,pos; char id[10]; stuStru zhan={"110100106","占梦钦",{94,134,126,197}}; n = input(s); printf("请输入您想要插入的位置下标:n"); scanf("%d",&pos); n=insert(s,n,pos,zhan); print(s,n); sum(s, n); selectSort(s, n); print(s, n); printf("请输入您要查询的学生的准考证号:n"); scanf("%s",id); search(s,n,id); printf("请输入您要删除的学生的准考证号:n"); scanf("%s",id); n=dele(s,n,id); print(s,n); printf("请输入您要修改信息的学生的准考证号:n"); scanf("%s",id); modify(s,n,id); sum(s, n); selectSort(s, n); print(s,n); printf("结束使用!n"); return 0; }
【解释】
结构体数组的插入、删除、查找方式和普通数组算法类似,注意参数传递。



