parent
2e0ae29fdd
commit
174a2016e6
@ -0,0 +1,125 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define MAX_STUDENTS 100
|
||||
|
||||
typedef struct Student {
|
||||
int id;
|
||||
int class_num;
|
||||
char name[20];
|
||||
double score1;
|
||||
double score2;
|
||||
double score3;
|
||||
double total_score;
|
||||
} Student;
|
||||
|
||||
void calculateTotalScore(Student *students, int num) {
|
||||
int i;
|
||||
for (i = 0; i < num; i++) {
|
||||
students[i].total_score = students[i].score1 + students[i].score2 + students[i].score3;
|
||||
}
|
||||
}
|
||||
void swap(Student *a, Student *b) {
|
||||
Student temp = *a;
|
||||
*a = *b;
|
||||
*b = temp;
|
||||
}
|
||||
|
||||
void sortStudents(Student *students, int num) {
|
||||
int i,j;
|
||||
for ( i = 0; i < num - 1; i++) {
|
||||
for ( j = 0; j < num - i - 1; j++) {
|
||||
if (students[j].class_num > students[j + 1].class_num) {
|
||||
swap(&students[j], &students[j + 1]);
|
||||
} else if (students[j].class_num == students[j + 1].class_num &&
|
||||
students[j].total_score < students[j + 1].total_score) {
|
||||
swap(&students[j], &students[j + 1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void searchStudents(Student *students, int num, char *query_type, char *query_content, Student *result, int *result_num) {
|
||||
*result_num = 0;
|
||||
int i;
|
||||
if (query_type[0] == '1') {
|
||||
int start_class, end_class;
|
||||
sscanf(query_content, "%d-%d", &start_class, &end_class);
|
||||
for (i = 0; i < num; i++) {
|
||||
if (students[i].class_num >= start_class && students[i].class_num <= end_class) {
|
||||
result[*result_num] = students[i];
|
||||
(*result_num)++;
|
||||
}
|
||||
}
|
||||
} else if (query_type[0] == '2') {
|
||||
int start_id, end_id;
|
||||
sscanf(query_content, "%d-%d", &start_id, &end_id);
|
||||
for ( i = 0; i < num; i++) {
|
||||
if (students[i].id >= start_id && students[i].id <= end_id) {
|
||||
result[*result_num] = students[i];
|
||||
(*result_num)++;
|
||||
}
|
||||
}
|
||||
} else if (query_type[0] == '3') {
|
||||
char prefix[20];
|
||||
strcpy(prefix, query_content);
|
||||
for (i = 0; i < num; i++) {
|
||||
if (strncmp(students[i].name, prefix, strlen(prefix)) == 0) {
|
||||
result[*result_num] = students[i];
|
||||
(*result_num)++;
|
||||
}
|
||||
}
|
||||
} else if (query_type[0] == '4') {
|
||||
double min_score;
|
||||
sscanf(query_content, "%lf", &min_score);
|
||||
for ( i = 0; i < num; i++) {
|
||||
if (students[i].total_score >= min_score) {
|
||||
result[*result_num] = students[i];
|
||||
(*result_num)++;
|
||||
}
|
||||
}
|
||||
} else if (query_type[0] == '5') {
|
||||
int class_num;
|
||||
int start_id, end_id;
|
||||
sscanf(query_content, "%d.%d-%d", &class_num, &start_id, &end_id);
|
||||
for ( i = 0; i < num; i++) {
|
||||
if (students[i].class_num == class_num && students[i].id >= start_id && students[i].id <= end_id) {
|
||||
result[*result_num] = students[i];
|
||||
(*result_num)++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main() {
|
||||
Student students[MAX_STUDENTS] = {
|
||||
{10001, 11, "Zhang", 99.5, 88.5, 89.5, 0},
|
||||
{10002, 12, "Yang", 77.9, 56.5, 87.5, 0},
|
||||
{10003, 11, "Liang", 92.5, 99.0, 60.5, 0},
|
||||
{10004, 11, "Cai", 89.6, 56.9, 90.5, 0},
|
||||
{10005, 14, "Fu", 55.6, 67.9, 98.9, 0},
|
||||
{10006, 12, "Mao", 22.1, 45.9, 99.2, 0},
|
||||
{10007, 13, "Zhan", 35.6, 67.9, 88.0, 0}
|
||||
};
|
||||
int num_students = 7,i;
|
||||
|
||||
calculateTotalScore(students, num_students);
|
||||
|
||||
char query_type[10];
|
||||
char query_content[50];
|
||||
|
||||
scanf("%s %s", query_type, query_content);
|
||||
|
||||
Student result[MAX_STUDENTS];
|
||||
int result_num;
|
||||
searchStudents(students, num_students, query_type, query_content, result, &result_num);
|
||||
sortStudents(result, result_num);
|
||||
|
||||
for (i = 0; i < result_num; i++) {
|
||||
printf("%d %d %s %.1lf %.1lf %.1lf\n", result[i].id, result[i].class_num, result[i].name,
|
||||
result[i].score1, result[i].score2, result[i].score3);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in new issue