#include #include struct student { char num[10]; float Math; float Physic; float English; float sum; float ave; int clas; int inserted;//sign whether the student is inserted char name[10]; int mod;//sign whether the student is modified }; void outputstudent4(struct student *t)// output num,class,name,and grade of all subject { printf("%s %d %s %.1f %.1f %.1f\n",t->num,t->clas,t->name,t->Math,t->Physic,t->English); } void orderstudent2(struct student *t,int n)//order with class { for(int i=0;iclas>(t+j)->clas) { struct student m; m=*(t+i); *(t+i)=*(t+j); *(t+j)=m; } } } for(int i=0;iclas==(t+j)->clas&&(t+i)->sum<(t+j)->sum) { struct student m; m=*(t+i); *(t+i)=*(t+j); *(t+j)=m; } } } } void findstudent(struct student *t) { char c[30]; fgets(c,sizeof(c),stdin); if(c[0]=='1') { int beginclass=0; int i=1; while(c[i]!='-') { if(c[i]>='0'&&c[i]<='9') { beginclass*=10; beginclass+=c[i]-'0'; } i++; } int finalclass=0; int j=i+1; while(c[j]>='0'&&c[j]<='9') { finalclass*=10; finalclass+=c[j]-'0'; j++; } for(int i=0;i<7;i++) { if((t+i)->clas>=beginclass&&(t+i)->clas<=finalclass) outputstudent4((t+i)); } } if(c[0]=='2') { char beginnum[10]={'\0'}; int i=1,x=0; while(c[i]!='-') { if(c[i]>='0'&&c[i]<='9') { beginnum[x]=c[i]; x++; } i++; } char finalnum[10]={'\0'}; int j=i+1,y=0; while(c[j]>='0'&&c[j]<='9') { finalnum[y]=c[j]; y++; j++; } for(int m=0;m<7;m++) { if(strcmp((t+m)->num,beginnum)>=0&&strcmp((t+m)->num,finalnum)<=0) outputstudent4((t+m)); } } if(c[0]=='3') { char f[10]={'\0'}; int i=1,x=0; while(c[i]!='*') { if(c[i]!=' ') { f[x]=c[i]; x++; } i++; } for(int j=0;j<7;j++) { if(strncmp((t+j)->name,f,x)==0) outputstudent4((t+j)); } } if(c[0]=='4') { float s=0; int i=1; while(c[i]!='.') { if(c[i]>='0'&&c[i]<='9') { s=s*10; s+=c[i]-'0'; } i++; } int j=i+1,n=10; while(c[j]>='0'&&c[j]<='9') { s+=(1.0*(c[j]-'0'))/(1.0*n); n=n*10; j++; } for(int x=0;x<7;x++) { if((t+x)->sum>=s) outputstudent4((t+x)); } } if(c[0]=='5') { int beginclass=0; int m=1; while(c[m]!='.') { if(c[m]>='0'&&c[m]<='9') { beginclass*=10; beginclass+=c[m]-'0'; } m++; } char beginnum[10]={'\0'}; int i=m+1,x=0; while(c[i]!='-') { if(c[i]>='0'&&c[i]<='9') { beginnum[x]=c[i]; x++; } i++; } char finalnum[10]={'\0'}; int j=i+1,y=0; while(c[j]>='0'&&c[j]<='9') { finalnum[y]=c[j]; y++; j++; } for(int e=0;e<7;e++) { if((t+e)->clas==beginclass&&(strcmp((t+e)->num,beginnum)>=0&&strcmp((t+e)->num,finalnum)<=0)) outputstudent4((t+e)); } } } int main() { struct student s[10]; strcpy(s[0].num,"10001"); strcpy(s[0].name,"Zhang"); s[0].clas=11; s[0].Math=99.5; s[0].Physic=88.5; s[0].English=89.5; s[0].sum=s[0].Math+s[0].Physic+s[0].English; s[0].inserted=0; strcpy(s[1].num,"10002"); strcpy(s[1].name,"Yang"); s[1].clas=12; s[1].Math=77.9; s[1].Physic=56.5; s[1].English=87.5; s[1].sum=s[1].Math+s[1].Physic+s[1].English; s[1].inserted=0; strcpy(s[2].num,"10003"); strcpy(s[2].name,"Liang"); s[2].clas=11; s[2].Math=92.5; s[2].Physic=99.0; s[2].English=60.5; s[2].sum=s[2].Math+s[2].Physic+s[2].English; s[2].inserted=0; strcpy(s[3].num,"10004"); strcpy(s[3].name,"Cai"); s[3].clas=11; s[3].Math=89.6; s[3].Physic=56.9; s[3].English=90.5; s[3].sum=s[3].Math+s[3].Physic+s[3].English; s[3].inserted=0; strcpy(s[4].num,"10005"); strcpy(s[4].name,"Fu"); s[4].clas=14; s[4].Math=55.6; s[4].Physic=67.9; s[4].English=98.9; s[4].sum=s[4].Math+s[4].Physic+s[4].English; s[4].inserted=0; strcpy(s[5].num,"10006"); strcpy(s[5].name,"Mao"); s[5].clas=12; s[5].Math=22.1; s[5].Physic=45.9; s[5].English=99.2; s[5].sum=s[5].Math+s[5].Physic+s[5].English; s[5].inserted=0; strcpy(s[6].num,"10007"); strcpy(s[6].name,"Zhan"); s[6].clas=13; s[6].Math=35.6; s[6].Physic=67.9; s[6].English=88.0; s[6].sum=s[6].Math+s[6].Physic+s[6].English; s[6].inserted=0; orderstudent2(&s[0],7); findstudent(&s[0]); return 0; }