Bootstrap

嵌入式开发C语言学习day08-华清作业7.10

学习笔记:

作业:

1.完成学生管理系统

1> 使用菜单完成

2> 有学生的信息录入功能:输入学生个数,并将学生的姓名、分数录入

3> 查看学生信息:输出所有学生姓名以及对应的分数

4> 求出学习最好的学生信息:求最大值

5> 按姓名将所有学生进行升序排序

6> 按成绩将所有学生进行升序排序

#include <stdio.h>
#include <string.h>
#define MAX_STUDENTS 100
void menu();
void input();
void view();
void best();
void sortByName();
void sortByScore();
int main()
{
    char names[MAX_STUDENTS][20];
    int scores[MAX_STUDENTS];
    int numStudents;
    int key;

    menu();
    scanf("%d", &key);

    while (key != 0)
    {
        switch (key)
        {
        case 1:
            printf("请输入学生的个数: ");
            scanf("%d", &numStudents);
            input(names, scores, numStudents);
            break;
        case 2:
            view(names, scores, numStudents);
            break;
        case 3:
            best(names, scores, numStudents);
            break;
        case 4:
            sortByName(names, scores, numStudents);
            break;
        case 5:
            sortByScore(names, scores, numStudents);
            break;
        default:
            printf("无效的选择,请重新输入。\n");
        }

        menu();
        scanf("%d", &key);
    }

    return 0;
}
// 菜单
void menu()
{
    printf("\t\t======学生管理系统======\n");
    printf("\t\t1. 录入学生信息\n");
    printf("\t\t2. 查看学生信息\n");
    printf("\t\t3. 找出成绩最好的学生\n");
    printf("\t\t4. 按姓名升序排序\n");
    printf("\t\t5. 按成绩升序排序\n");
    PDF("\t\t0. 退出\n");
    printf(">>请输入所要执行的操作: ");
}
// 录入学生信息
void input(char names[][20], int scores[], int numStudents)
{
    for (int i = 0; i < numStudents; i++)
    {
        printf("请输入第%d个学生的姓名:", i + 1);
        scanf("%s", names[i]);
        printf("请输入第%d个学生的分数:", i + 1);
        scanf("%d", &scores[i]);
        
    }
}
// 查看学生信息
void view(char names[][20], int scores[], int numStudents)
{
    for (int i = 0; i < numStudents; i++)
    {
        printf("姓名: %s\t分数: %d\n", names[i], scores[i]);
    }
}
// 找出成绩最好的学生信息
void best(char names[][20], int scores[], int numStudents)
{
    int maxScore = scores[0];
    int bestStudentIndex = 0;

    for (int i = 1; i < numStudents; i++)
    {
        if (scores[i] > maxScore)
        {
            maxScore = scores[i];
            bestStudentIndex = i;
        }
    }

    printf("成绩最好的学生: 姓名: %s\t分数: %d\n", names[bestStudentIndex], maxScore);
}
// 按姓名升序排序
void sortByName(char names[][20], int scores[], int numStudents)
{
    for (int i = 0; i < numStudents - 1; i++)
    {
        for (int j = 0; j < numStudents - i - 1; j++)
        {
            if (strcmp(names[j], names[j + 1]) > 0)
            {
                char tempName[20];
                strcpy(tempName, names[j]);
                strcpy(names[j], names[j + 1]);
                strcpy(names[j + 1], tempName);

                int tempScore = scores[j];
                scores[j] = scores[j + 1];
                scores[j + 1] = tempScore;
            }
        }
    }
}
// 按成绩升序排序
void sortByScore(char names[][20], int scores[], int numStudents)
{
    for (int i = 0; i < numStudents - 1; i++)
    {
        for (int j = 0; j < numStudents - i - 1; j++)
        {
            if (scores[j] > scores[j + 1])
            {
                char tempName[20];
                strcpy(tempName, names[j]);
                strcpy(names[j], names[j + 1]);
                strcpy(names[j + 1], tempName);

                int tempScore = scores[j];
                scores[j] = scores[j + 1];
                scores[j + 1] = tempScore;
            }
        }
    }
}

总结:

        注意函数有无参数和有无返回值,注意向函数内传递数组时的使用方法:zch(arr,数组的首地址,数组的尾地址);传递两个数组时候zch(arr1,arr2,数组首地址,数组尾地址);

;