C语言学生信息管理:插入学生并保持升序排序

问题描述: 现有一个学生表,包含学号、姓名、性别、年龄等信息,已经按照学号从小到大排序。需要编写程序实现将一个新学生信息插入到学生表中,并保证表中学生信息仍然按照学号升序排列。

代码示例:

#include <stdio.h>

// 定义学生结构体
typedef struct Student {
    int sno; // 学号
    char name[10]; // 姓名
    char sex; // 性别
    int age; // 年龄
} Student;

// 定义表格结构体
typedef struct Table {
    Student students[100]; // 学生信息数组
    int num; // 当前表格中的人数
} Table;

// 插入学生信息并排序
void insertStudent(Table *table, Student newStudent) {
    int i = table->num; // 从最后一位开始比较
    // 找到插入位置
    while (i > 0 && newStudent.sno < table->students[i - 1].sno) {
        table->students[i] = table->students[i - 1]; // 向后移动元素
        i--;
    }
    table->students[i] = newStudent; // 插入新学生信息
    table->num++; // 更新表格人数
}

// 输出学生信息
void printStudents(Table *table) {
    for (int i = 0; i < table->num; i++) {
        printf("%d %s %c %d\n", table->students[i].sno, table->students[i].name, table->students[i].sex, table->students[i].age);
    }
}

int main() {
    Table table = {0}; // 初始化表格
    int n; // 已有学生人数

    // 输入已有学生信息
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d %s %c %d", &table.students[i].sno, table.students[i].name, &table.students[i].sex, &table.students[i].age);
    }
    table.num = n; // 更新表格人数

    // 输入要插入的学生信息
    Student newStudent;
    scanf("%d %s %c %d", &newStudent.sno, newStudent.name, &newStudent.sex, &newStudent.age);

    // 插入学生信息并排序
    insertStudent(&table, newStudent);

    // 输出排序后的学生信息
    printStudents(&table);

    return 0;
}

输入格式:

第一行一个整数 n,表示已有的学生数 接下来 n 行,每行表示一个学生的信息,格式为'学号 姓名 性别 年龄' 最后一行表示要插入的学生信息,格式为'学号 姓名 性别 年龄'

输出格式:

按学号升序排列,输出所有学生的信息,每行格式同输入格式

输入样例:

5
1001 张三 男 20
1002 李四 女 19
1003 王五 男 22
1004 赵六 女 21
1005 小明 男 18
1000 小红 女 17

输出样例:

1000 小红 女 17
1001 张三 男 20
1002 李四 女 19
1003 王五 男 22
1004 赵六 女 21
1005 小明 男 18

代码说明:

  1. 结构体定义: 使用 struct 定义 Student 结构体存储学生信息,以及 Table 结构体管理学生信息数组。
  2. 插入函数: insertStudent() 函数实现插入新学生信息并排序。
  3. 输出函数: printStudents() 函数输出所有学生信息。
  4. 主函数: 主函数负责读取输入数据,调用 insertStudent() 插入新学生,并调用 printStudents() 输出结果。

运行方法:

  1. 将代码保存为 student_manager.c 文件。
  2. 在命令行中使用 GCC 编译代码:gcc student_manager.c -o student_manager
  3. 运行程序:./student_manager

注意事项:

  • 本程序仅实现了简单的学生信息管理,实际应用中可能需要更复杂的功能。
  • 代码中的学生信息数组大小为 100,可以根据实际需求进行调整。
  • 代码中的排序算法为插入排序,其时间复杂度为 O(n^2),对于大量数据可能会效率较低。

总结:

本程序提供了一个简单的学生信息管理示例,使用 C 语言实现插入学生信息并保持学号升序排列。通过学习本程序,可以了解结构体、函数、数组等 C 语言基础知识,以及简单排序算法的实现。

希望本程序对您有所帮助!

C语言学生信息管理:插入学生并排序

原文地址: https://www.cveoy.top/t/topic/ojJH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录