你需要将一系列的学生期末考试信息进行存储(学生人数不会超过100)。每个学生的信息包括:
姓名(由 first name 和last name 两部分组成,例如Jingyu LI,first_name = "Jingyu" last_name = "LI") ;
学号(12 位数字组成,开头4位为2022、2021、2020);
C语言成绩(一个大于等于零的整数);
重修信息(学号 2022.........为否,其余为是);
GPA等级(A+, A, B+, B, C+, C, D, F )。
A+: 100-93;
A: 92-85;
B+: 84-80;
B: 79-75;
C+:74-70;
C: 69-65;
D: 64-60;
F: <60.
其中,姓名,学号,成绩为输入数据,其余数据需要你计算。
另外,学号不符合规定的数据需要删除掉。
#include <stdio.h>
#include <stdbool.h>
char GPA(int score) {//判断GPA多少
if (score >= 93 && score <= 100) {
printf("A+\n");
} else if (score >= 85 && score <= 92) {
printf("A\n");
} else if (score >= 80 && score <= 84) {
printf("B+\n");
} else if (score >= 75 && score <= 79) {
printf("B\n");
} else if (score >= 70 && score <= 74) {
printf("C+\n");
} else if (score >= 65 && score <= 69) {
printf("C\n");
} else if (score >= 60 && score <= 64) {
printf("D\n");
} else {
printf("F\n");
}
}
bool is_id(char id[]) {//判断是否为学号
if (id[0] == '2' && id[1] == '0' && id[2] == '2') {//前三位是否为202
if (id[3] == '0' || id[3] == '1' || id[3] == '2') {
for (int i = 4; i < 12; i++) {//是否十二位输完
if (id[i] < '0' || id[i] > '9') {
return false;
}
}
return true;
}
}
return false;
}
bool is_chongxiu(char id[]) {//判断重修
if (id[3] == '2') {
return false;
} else {
return true;
}
}
int main() {
char first_name[20], last_name[20], id[13];
int score;
printf("Name_f Name_l stu_id score retake GPA rank\n");
while (scanf("%s %s %s %d", first_name, last_name, id, &score) == 4) {//一次输入一个人的四个信息
if (!is_id(id)) {//如果学号形式不正确继续输入下一部分信息
continue;
}
printf("%s %s %s %d ", first_name, last_name, id, score);
if (is_chongxiu(id)) {
printf("1 ");
} else {
printf("0 ");
}
GPA(score);
}
return 0;
}