You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.5 KiB
100 lines
2.5 KiB
5 days ago
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <string.h>
|
||
|
#define MAX_STUDENTS 100
|
||
|
typedef struct {
|
||
|
int ID;
|
||
|
char name[30];
|
||
|
int classnumber;
|
||
|
float score1,score2,score3;
|
||
|
}student;
|
||
|
|
||
|
int find(int ID,const char *name,student students[],int count){
|
||
|
int i;
|
||
|
for(i=0;i<count;i++){
|
||
|
if(students[i].ID==ID){
|
||
|
return i;
|
||
|
}
|
||
|
}
|
||
|
return -1;
|
||
|
}
|
||
|
void modifystudent(student students[],int index,float newscore1,float newscore2,float newscore3){
|
||
|
students[index].score1=newscore1;
|
||
|
students[index].score2=newscore2;
|
||
|
students[index].score3=newscore3;
|
||
|
}
|
||
|
|
||
|
|
||
|
int compare(const void*a,const void *b){
|
||
|
student s1=*(student*)a;
|
||
|
student s2=*(student*)b;
|
||
|
if(s1.classnumber!=s2.classnumber){
|
||
|
return s1.classnumber-s2.classnumber;
|
||
|
}
|
||
|
float total1=s1.score1+s1.score2+s1.score3;
|
||
|
float total2=s2.score1+s2.score2+s2.score3;
|
||
|
return total2-total1;
|
||
|
}
|
||
|
void print(student students[],int n,int modifiedindex){
|
||
|
int classn=-1;
|
||
|
|
||
|
int j;
|
||
|
for(j=0;j<n;j++){
|
||
|
if(students[j].classnumber!=classn){
|
||
|
classn=students[j].classnumber;
|
||
|
|
||
|
printf("%d %d %s %.1f %.1f %.1f",students[j].classnumber,students[j].ID,students[j].name,students[j].score1,students[j].score2,students[j].score3);
|
||
|
if(j==modifiedindex){
|
||
|
printf(" modified\n");
|
||
|
}
|
||
|
}else{
|
||
|
printf(" %d %s %.1f %.1f %.1f\n",students[j].ID,students[j].name,students[j].score1,students[j].score2,students[j].score3);
|
||
|
}
|
||
|
|
||
|
|
||
|
}
|
||
|
}
|
||
|
int main(){
|
||
|
student students[MAX_STUDENTS];
|
||
|
int n = 3;
|
||
|
students[0].ID= 10001;
|
||
|
students[0].classnumber = 11;
|
||
|
strcpy(students[0].name, "Zhang");
|
||
|
students[0].score1 = 99.5;
|
||
|
students[0].score2 = 88.5;
|
||
|
students[0].score3 = 89.5;
|
||
|
|
||
|
students[1].ID= 10002;
|
||
|
students[1].classnumber = 12;
|
||
|
strcpy(students[1].name, "Yang");
|
||
|
students[1].score1 = 77.9;
|
||
|
students[1].score2 = 56.5;
|
||
|
students[1].score3 = 87.5;
|
||
|
|
||
|
students[2].ID= 10003;
|
||
|
students[2].classnumber= 11;
|
||
|
strcpy(students[2].name, "Liang");
|
||
|
students[2].score1 = 92.5;
|
||
|
students[2].score2 = 99.0;
|
||
|
students[2].score3 = 60.5;
|
||
|
qsort(students,n,sizeof(student),compare);
|
||
|
student newstudent;
|
||
|
scanf("%d %d %s %f %f %f",&newstudent.ID,&newstudent.classnumber,&newstudent.name,&newstudent.score1,&newstudent.score2,&newstudent.score3);
|
||
|
int index=find(newstudent.ID,NULL,students,n);
|
||
|
int modifiedindex=-1;
|
||
|
if(index!=-1){
|
||
|
modifystudent(students,index,newstudent.score1,newstudent.score2,newstudent.score3);
|
||
|
modifiedindex=index;
|
||
|
}
|
||
|
|
||
|
print(students,n, modifiedindex);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|