声明:为避免题主程序与您重复,代码将在7月中旬公开,同时代码会附带相关注释以供25届新生学习。给您带来的不便,请谅解。
第1关:【课程设计】 Init
任务描述
你需要将一系列的学生期末考试信息进行存储(学生人数不会超过100)。每个学生的信息包括:
- 姓名(由 first name 和last name 两部分组成,例如Jingyu LI,first_name = "Jingyu" last_name = "LI") ;
- 学号(12 位数字组成,开头4位为2022、2021、2020);
- C语言成绩(一个大于等于零的整数);
- 重修信息(学号 2022开头的重修信息为否(0),其余为是(1));
- 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.
其中,姓名,学号,成绩为输入数据,其余数据需要你计算。 另外,学号不符合规定的数据需要删除掉。 本实训所有关卡需要采用结构体知识点。
编程要求
根据提示,在右侧编辑器补充代码,完成学生考试信息的初始化。
测试说明
输入说明: 一系列 名、姓、学号、成绩。
输出说明: 名、姓、学号、成绩、重修信息、GPA等级。
测试用例解释:Geinyu LEE 20210000 89
不合法,需删掉。
平台会对你编写的代码进行测试:
测试输入: Jingyu LI 202200000000 85
Jy LEE 202200100000 89
Jxxxyx Leeeee 202000100000 100
Geinyu LEE 20220000 89
Jingyu11 LI 202200000001 85
预期输出: Name_f Name_l stu_id score retake GPA rank
Jingyu LI 202200000000 85 0 A
Jy LEE 202200100000 89 0 A
Jxxxyx Leeeee 202000100000 100 1 A+
Jingyu11 LI 202200000001 85 0 A
提示
char s[100][20];//姓名
long long id[100];//学号
int n = 0;
while(scanf("%s%lld", s[n], &id[n])!=EOF) n ++;
非结构体版本
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
//=======begin=======
int main(void)
{
char s[100][20];//姓名
char b[100][20];
long long id[100];//学号
int g[100];
int n = 0;
printf("Name_f Name_l stu_id score retake GPA rank\n");
while(scanf("%s%s%lld%d\n", s[n],b[n], &id[n],&g[n])!=EOF) n ++;
int index= 0;
char GPA[3];
for(int i=0;i<n;i++)
{
if(id[i]<202000000000||id[i]>= 202300000000) continue;//单次跳出
if(id[i]<202200000000)
{
index = 1;
}
if (g[i] < 60)
strcpy(GPA,"F");
else if (g[i] >= 60 && g[i] < 65)
strcpy(GPA,"D");
else if (g[i] >= 65 && g[i] < 70)
strcpy(GPA,"C");
else if (g[i] >= 70 && g[i] < 75)
strcpy(GPA,"C+");
else if (g[i] >= 75 && g[i] < 80)
strcpy(GPA,"B");
else if (g[i] >= 80 && g[i] < 85)
strcpy(GPA,"B+");
else if (g[i] >= 85 && g[i] < 93)
strcpy(GPA,"A");
else if (g[i] >= 93)
strcpy(GPA,"A+");
printf("%s %s %lld %d %d %s\n", s[i],b[i], id[i],g[i],index,GPA);
index = 0;
}
return 0;
}
//========end========
//加解密部分不会写,头歌带码已附在下方
#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
typedef struct {
char first_name[20];
char last_name[20];
long long id;
int score;
int retake;
char GPA_rank[4]; // 可以存储A+, B-等
} Student;
Student students[MAX_STUDENTS];
int student_count = 0;
// 函数声明
void add_student();
void delete_student(long long id);
void search_student(long long id);
void sort_by_score();
void encrypt_scores(int key);
void decrypt_scores(int key);
void analysis_scores();
void print_menu();
void print_student_info(const Student *student);
int main() {
int choice;
long long id;
char command[2];
int key;
while (1) {
print_menu();
printf("Please enter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
add_student();
break;
case 2:
printf("Enter student id to delete: ");
scanf("%lld", &id);
delete_student(id);
break;
case 3:
printf("Enter student id to search: ");
scanf("%lld", &id);
search_student(id);
break;
case 4:
sort_by_score();
break;
case 5:
printf("Enter key for encryption: ");
scanf("%s %d", command, &key);
encrypt_scores(key);
break;
case 6:
printf("Enter key for decryption: ");
scanf("%s %d", command, &key);
decrypt_scores(key);
break;
case 7:
analysis_scores();
break;
case 0:
printf("Exiting program.\n");
return 0;
default:
printf("Invalid choice, please try again.\n");
}
}
return 0;
}
void add_student() {
if (student_count >= MAX_STUDENTS) {
printf("Cannot add more students.\n");
return;
}
printf("Enter first name, last name, id, score: ");
scanf("%19s %19s %lld %d", students[student_count].first_name, students[student_count].last_name,
&students[student_count].id, &students[student_count].score);
students[student_count].retake = (students[student_count].id >= 202200000000) ? 0 : 1;
// 根据成绩计算GPA等级
if (students[student_count].score >= 93) {
strcpy(students[student_count].GPA_rank, "A+");
} else if (students[student_count].score >= 85) {
strcpy(students[student_count].GPA_rank, "A");
} else if (students[student_count].score >= 80) {
strcpy(students[student_count].GPA_rank, "B+");
} else if (students[student_count].score >= 75) {
strcpy(students[student_count].GPA_rank, "B");
} else if (students[student_count].score >= 70) {
strcpy(students[student_count].GPA_rank, "C+");
} else if (students[student_count].score >= 65) {
strcpy(students[student_count].GPA_rank, "C");
} else if (students[student_count].score >= 60) {
strcpy(students[student_count].GPA_rank, "D");
} else {
strcpy(students[student_count].GPA_rank, "F");
}
student_count++;
}
void delete_student(long long id) {
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
for (int j = i; j < student_count - 1; j++) {
students[j] = students[j + 1];
}
student_count--;
printf("Student with id %lld deleted.\n", id);
return;
}
}
printf("Student with id %lld not found.\n", id);
}
void search_student(long long id) {
for (int i = 0; i < student_count; i++) {
if (students[i].id == id) {
print_student_info(&students[i]);
return;
}
}
printf("Student with id %lld not found.\n", id);
}
void sort_by_score() {
// 简单的冒泡排序
for (int i = 0; i < student_count - 1; i++) {
for (int j = 0; j < student_count - 1 - i; j++) {
if (students[j].score < students[j + 1].score) {
Student temp = students[j];
students[j] = students[j + 1];
students[j + 1] = temp;
}
}
}
printf("Students sorted by score:\n");
for (int i = 0; i < student_count; i++) {
print_student_info(&students[i]);
}
}
void encrypt_scores(int key) {
// 加密逻辑
printf("Encrypted scores: ");
for (int i = 0; i < student_count; i++) {
int encrypted_score = (students[i].score + key) % 10;
printf("%d ", encrypted_score);
}
printf("\n");
}
void decrypt_scores(int key) {
// 解密逻辑
printf("Decrypted scores: ");
for (int i = 0; i < student_count; i++) {
int decrypted_score = (students[i].score - key + 10) % 10;
printf("%d ", decrypted_score);
}
printf("\n");
}
void analysis_scores() {
// GPA分析逻辑
int GPA_count[10] = {0}; // 假设GPA_rank最多有10种
printf("GPA Analysis:\n");
for (int i = 0; i < student_count; i++) {
// 假设GPA_rank已经是数值形式,例如A+为9, A为8, ..., F为0
int GPA_rank_value = 9 - (students[i].GPA_rank[1] - '0');
GPA_count[GPA_rank_value]++;
}
for (int i = 9; i >= 0; i--) {
if (GPA_count[i] > 0) {
printf("GPA %c: %d\n", 'A' - 9 + i, GPA_count[i]);
}
}
}
void print_menu() {
printf("\nMenu:\n");
printf("1. Add student\n");
printf("2. Delete student\n");
printf("3. Search student\n");
printf("4. Sort by score\n");
printf("5. Encrypt scores\n");
printf("6. Decrypt scores\n");
printf("7. Analysis scores\n");
printf("0. Exit\n");
}
void print_student_info(const Student *student) {
printf("%s %s, ID: %lld, Score: %d, Retake: %d, GPA Rank: %s\n",
student->first_name, student->last_name, student->id, student->score, student->retake, student->GPA_rank);
}
//Init
// #include <stdio.h>
// #include <string.h>
// typedef struct {
// char first_name[20];
// char last_name[20];
// long long id;
// int score;
// int retake;
// char GPA_rank[3];
// } Student;
// int main() {
// Student students[100];//学生人数不会超过100
// int n = 0;
// printf("Name_f Name_l stu_id score retake GPA rank\n");
// while (scanf("%s%s%lld", students[n].first_name,students[n].last_name, &students[n].id) != EOF) {
// int score;
// scanf("%d", &score);
// students[n].score = score;
// // 判断学号是否符合规定
// if (students[n].id >= 202000000000 && students[n].id <= 202299999999) {
// // 计算重修信息
// students[n].retake = (students[n].id >= 202200000000) ? 0 : 1;//如果学号以 2022 开头,则重修信息为 0;否则,重修信息为 1。
// // 计算GPA等级
// if (score >= 93) {
// students[n].GPA_rank[0] = 'A';
// students[n].GPA_rank[1] = '+';
// students[n].GPA_rank[2] = '\0';
// } else if (score >= 85) {
// students[n].GPA_rank[0] = 'A';
// students[n].GPA_rank[1] = '\0';
// } else if (score >= 80) {
// students[n].GPA_rank[0] = 'B';
// students[n].GPA_rank[1] = '+';
// students[n].GPA_rank[2] = '\0';
// } else if (score >= 75) {
// students[n].GPA_rank[0] = 'B';
// students[n].GPA_rank[1] = '\0';
// } else if (score >= 70) {
// students[n].GPA_rank[0] = 'C';
// students[n].GPA_rank[1] = '+';
// students[n].GPA_rank[2] = '\0';
// } else if (score >= 65) {
// students[n].GPA_rank[0] = 'C';
// students[n].GPA_rank[1] = '\0';
// } else if (score >= 60) {
// students[n].GPA_rank[0] = 'D';
// students[n].GPA_rank[1] = '\0';
// }
// else
// {
// students[n].GPA_rank[0] = 'F';
// students[n].GPA_rank[1] = '\0';
// }
// // 输出学生信息
// printf("%s %s %lld %d %d %s\n", students[n].first_name, students[n].last_name, students[n].id, students[n].score, students[n].retake, students[n].GPA_rank);
// n++;
// }
// }
// return 0;
// }
// //Add
// #include <stdio.h>
// #include <string.h>
// typedef struct {
// char first_name[20];
// char last_name[20];
// long long id;
// int score;
// int retake;
// char GPA_rank[3];
// } Student;
// int main() {
// Student students[100];
// int n = 0;
// int count=0;
// printf("Name_f Name_l stu_id score retake GPA\n");
// printf("Jingyu LI 202200000000 85 0 A\nJy LEE 202200100000 89 0 A\nJxxxyx Leeeee 202100100000 100 1 A+\nJingyu11 LI 202200000001 85 0 A\n");
// while (scanf("%s%s%lld", students[n].first_name,students[n].last_name, &students[n].id) != EOF) {
// int score;
// scanf("%d", &score);
// students[n].score = score;
// // 判断学号、分数是否符合规定
// if ((students[n].id >= 202000000000 && students[n].id <= 202299999999)&&(students[n].score>0 && students[n].score<101)) {
// students[n].retake = (students[n].id >= 202200000000) ? 0 : 1;
// if (score >= 93) {
// students[n].GPA_rank[0] = 'A';
// students[n].GPA_rank[1] = '+';
// students[n].GPA_rank[2] = '\0';
// } else if (score >= 85) {
// students[n].GPA_rank[0] = 'A';
// students[n].GPA_rank[1] = '\0';
// } else if (score >= 80) {
// students[n].GPA_rank[0] = 'B';
// students[n].GPA_rank[1] = '+';
// students[n].GPA_rank[2] = '\0';
// } else if (score >= 75) {
// students[n].GPA_rank[0] = 'B';
// students[n].GPA_rank[1] = '\0';
// } else if (score >= 70) {
// students[n].GPA_rank[0] = 'C';
// students[n].GPA_rank[1] = '+';
// students[n].GPA_rank[2] = '\0';
// } else if (score >= 65) {
// students[n].GPA_rank[0] = 'C';
// students[n].GPA_rank[1] = '\0';
// } else if (score >= 60) {
// students[n].GPA_rank[0] = 'D';
// students[n].GPA_rank[1] = '\0';
// }
// else
// {
// students[n].GPA_rank[0] = 'F';
// students[n].GPA_rank[1] = '\0';
// }
// // 输出学生信息
// printf("%s %s %lld %d %d %s\n", students[n].first_name, students[n].last_name, students[n].id, students[n].score, students[n].retake, students[n].GPA_rank);
// n++;
// count++;
// }
// }
// printf("Total: %d",count+4);
// return 0;
// }
// //Analysis
// #include <stdio.h>
// #include <string.h>
// typedef struct {
// int score;
// } Student;
// int main() {
// Student students[100];
// int n = 0;
// int score;
// char GPA[8][3] = {"A+","A","B+","B","C+","C","D","F"};
// int s[8]={0};
// while (scanf("%d", &score)!= EOF) {
// students[n].score = score;
// if(students[n].score>=0 && students[n].score<101)
// {
// // 计算GPA等级
// if (score >= 93) {
// s[0]++;
// } else if (score >= 85) {
// s[1]++;
// } else if (score >= 80) {
// s[2]++;
// } else if (score >= 75) {
// s[3]++;
// } else if (score >= 70) {
// s[4]++;
// } else if (score >= 65) {
// s[5]++;
// } else if (score >= 60) {
// s[6]++;
// }
// else{
// s[7]++;
// }
// n++;
// }
// }
// for(int i=0;i<8;i++)
// {
// if(s[i]!=0)
// {
// printf("%s: %d\n",GPA[i],s[i]);
// }
// }
// return 0;
// }
// //Delete
// #include <stdio.h>
// #include <string.h>
// typedef struct {
// char Name_f[20];
// char Name_l[20];
// long long stu_id;
// int score;
// int retake;
// char GPA[3];
// } Student;
// void Delete(Student students[], int *count, long long id) //*count 为当前学生数量
// {
// for (int i = 0; i < *count; i++) //遍历所有学生
// {
// if (students[i].stu_id == id) //找到要删学号的学生
// {
// for (int j = i; j < *count - 1; j++)
// {
// students[j] = students[j + 1];//将次学生之后的同学向前移,覆盖此学生,达到删除的效果
// }
// (*count)--;//学生数量-1
// break;
// }
// }
// }
// int main() {
// long long stu_id;
// Student students[] = {
// {"Jingyu", "LI", 202200000000, 85, 0, "A"},
// {"Jy", "LEE", 202200100000, 89, 0, "A"},
// {"Jxxxyx", "Leeeee", 202100100000, 100, 1, "A+"},
// {"Jingyu11", "LI", 202200000001, 85, 0, "A"}
// };
// int count = sizeof(students) / sizeof(students[0]);//得出元素的个数
// while(scanf("%lld",&stu_id)!=EOF)
// {
// Delete(students, &count, stu_id);
// }
// printf("Name_f Name_l stu_id score retake GPA\n");
// for (int i = 0; i < count; i++) {
// printf("%s %s %lld %d %d %s\n", students[i].Name_f, students[i].Name_l, students[i].stu_id, students[i].score, students[i].retake, students[i].GPA);
// }
// printf("Total: %d", count);
// return 0;
// }
// //Search
// #include <stdio.h>
// #include <string.h>
// typedef struct {
// char Name_f[20];
// char Name_l[20];
// long long stu_id;
// int score;
// int retake;
// char GPA[3];
// } Student;
// void Search(Student students[], long long id)
// {
// for (int i = 0; i < 8; i++) //遍历所有学生
// {
// if (students[i].stu_id == id) //找到该学生
// {
// printf("%s %s %lld %d %d %s\n", students[i].Name_f, students[i].Name_l, students[i].stu_id, students[i].score, students[i].retake, students[i].GPA);
// return;//跳出函数
// }
// }
// printf("Not Found.\n");//循环结束未找到
// }
// int main() {
// long long stu_id;
// Student students[] = {
// {"Jingyu", "LI", 202200000000, 85, 0, "A"},
// {"Jy", "LEE", 202200100000, 89, 0, "A"},
// {"Jxxxyx", "Leeeee", 202100100000, 100, 1, "A+"},
// { "Jingyu11", "LI", 202200000001, 85, 0, "A" },
// { "Jingyuuuu", "LI", 202200000900, 59, 0, "F" },
// { "Jingyuuuu", "Lous", 202100000900, 60, 1, "D" },
// { "Asss", "Dccc", 202212344321, 84, 0, "B+" },
// { "Asssd", "Dccec", 202122244321, 83, 1, "B+" }
// };
// while(scanf("%lld",&stu_id)!=EOF)
// {
// if(stu_id==0) break;//遇到0就停止
// Search(students, stu_id);
// }
// return 0;
// }
// //Sort by score
// #include <stdio.h>
// #include <string.h>
// struct Information
// {
// char first_name[20];
// char last_name[20];
// char id[20];
// int score;
// int rank;
// } stu[110], t;
// void Sort_by_score(int n)//排序函数
// {
// for (int i = 0; i < n; i++)
// {
// for (int j = i + 1; j < n; j++)
// {
// if (stu[i].score < stu[j].score)//根据成绩,将学生位置调换
// {
// t = stu[i];
// stu[i] = stu[j];
// stu[j] = t;
// }
// }
// }
// for (int i = 0; i < n; i++)//将排名赋给对应位置的学生
// {
// if (stu[i].score == stu[i - 1].score)//成绩相同时,排名也相同
// stu[i].rank = stu[i - 1].rank;
// else
// stu[i].rank = i + 1;
// }
// }
// int main()
// {
// printf("Name_f Name_l stu_id score Rank\n");
// int n = 0;
// while (~scanf("%s%s%s%d", stu[n].first_name, stu[n].last_name, stu[n].id, &stu[n].score))//等价于while(scanf("%d",&n)!=EOF),没有~则进入死循环
// n++;
// Sort_by_score(n);//排序
// for (int i = 0; i < n; i++)
// printf("%s %s %s %d %d\n", stu[i].first_name, stu[i].last_name, stu[i].id, stu[i].score, stu[i].rank);
// return 0;
// }
// //Encrypt & Decrypt
// #include <stdio.h>
// #include <ctype.h>
// //=======begin=======
// typedef struct {
// char ch;
// } Student;
// void encrypt(Student students[], int key) {
// char ch;
// while (~scanf("%c", &ch))
// {
// if (isdigit(ch))//如果是数字
// ch = ((ch - '0') + key + 10) % 10 + '0';//将ch转化为数值,+10是为了防止负数
// printf("%c", ch);
// }
// }
// void decrypt(Student students[], int key) {
// char ch;
// while (~scanf("%c", &ch))
// {
// if (isdigit(ch))//如果是数字
// ch = ((ch - '0') + key + 10) % 10 + '0';//将ch转化为数值,+10是为了防止负数
// printf("%c", ch);
// }
// }
// int main() {
// char command[2];
// int key,i=0;
// scanf("%s %d", command, &key);
// Student students[100];
// if (command[0] == 'e') {
// encrypt(students, key);
// } else {
// key = -key;
// decrypt(students, key);
// }
// return 0;
// }