C语言:头歌课程设计(未完结,慎入)

声明:为避免题主程序与您重复,代码将在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 ):
     
      
    1. A+: 100-93;
    2. A: 92-85;
    3. B+: 84-80;
    4. B: 79-75;
    5. C+:74-70;
    6. C: 69-65;
    7. D: 64-60;
    8. 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

提示

 
  1. char s[100][20];//姓名
  2. long long id[100];//学号
  3. int n = 0;
  4. 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;
// }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czy,出发!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值