|
|
|
|
#define _CRT_SECURE_NO_WARNINGS 1
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
#include <stdlib.h>
|
|
|
|
|
#include <string.h>
|
|
|
|
|
#define MAX_STUDENTS 100
|
|
|
|
|
typedef struct {
|
|
|
|
|
int id;
|
|
|
|
|
int classs;
|
|
|
|
|
float scores[3];
|
|
|
|
|
float total_score;
|
|
|
|
|
int isnew;
|
|
|
|
|
} Student;
|
|
|
|
|
Student initial_students[] = {
|
|
|
|
|
{10001, 11, {99.5, 88.5, 89.5}, 277.5, 0},
|
|
|
|
|
{10002, 12, {77.9, 56.5, 87.5}, 221.9, 0},
|
|
|
|
|
{10003, 11, {92.5, 99.0, 60.5}, 252.0, 0}
|
|
|
|
|
};
|
|
|
|
|
Student* students;
|
|
|
|
|
int num_students = 3;
|
|
|
|
|
int compare(const void* a, const void* b) {
|
|
|
|
|
Student* student_a = (Student*)a;
|
|
|
|
|
Student* student_b = (Student*)b;
|
|
|
|
|
if (student_a->classs != student_b->classs) {
|
|
|
|
|
return student_a->classs - student_b->classs;
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
return student_b->total_score - student_a->total_score;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int check_id_exists(int id) {
|
|
|
|
|
int i;for ( i = 0; i < num_students; i++) {
|
|
|
|
|
if (students[i].id == id) {
|
|
|
|
|
return 1;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
void insert_student(Student new_student) {
|
|
|
|
|
new_student.isnew = 1;
|
|
|
|
|
num_students++;
|
|
|
|
|
students = (Student*)realloc(students, num_students * sizeof(Student));
|
|
|
|
|
students[num_students - 1] = new_student;
|
|
|
|
|
qsort(students, num_students, sizeof(Student), compare);
|
|
|
|
|
}
|
|
|
|
|
void print_students() {
|
|
|
|
|
int i;for ( i = 0; i < num_students; i++) {
|
|
|
|
|
printf("%d %d %.1f %.1f %.1f", students[i].id, students[i].classs, students[i].scores[0], students[i].scores[1], students[i].scores[2]);
|
|
|
|
|
if (students[i].isnew) {
|
|
|
|
|
printf(" inserted");
|
|
|
|
|
}
|
|
|
|
|
printf("\n");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
int main() {
|
|
|
|
|
students = (Student*)malloc(MAX_STUDENTS * sizeof(Student));
|
|
|
|
|
memcpy(students, initial_students, num_students * sizeof(Student));
|
|
|
|
|
Student new_student;
|
|
|
|
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ѧ<EFBFBD><EFBFBD> <20>༶ <20>ɼ<EFBFBD>1 <20>ɼ<EFBFBD>2 <20>ɼ<EFBFBD>3<EFBFBD><33><EFBFBD><EFBFBD>\n");
|
|
|
|
|
scanf("%d %d %f %f %f", &new_student.id, &new_student.classs, &new_student.scores[0], &new_student.scores[1], &new_student.scores[2]);
|
|
|
|
|
new_student.total_score = new_student.scores[0] + new_student.scores[1] + new_student.scores[2];
|
|
|
|
|
if (check_id_exists(new_student.id)) {
|
|
|
|
|
printf("ѧ<EFBFBD><EFBFBD> %d <20>Ѵ<EFBFBD><D1B4>ڣ<EFBFBD><DAA3><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD>£<EFBFBD>\n", new_student.id);
|
|
|
|
|
int i;for ( i = 0; i < num_students; i++) {
|
|
|
|
|
if (students[i].id == new_student.id) {
|
|
|
|
|
printf("%d %d %.1f %.1f %.1f\n", students[i].id, students[i].classs, students[i].scores[0], students[i].scores[1], students[i].scores[2]);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
insert_student(new_student);
|
|
|
|
|
print_students();
|
|
|
|
|
}
|
|
|
|
|
free(students);
|
|
|
|
|
return 0;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|