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.

79 lines
2.6 KiB

#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;
}