11(3).通过结构体与指针实现简单的学生管理系统(存储,排序,输出)

本人坚持更新C语言和数据结构知识,可以收藏+关注随时了解😜😜😜


目录

上代码

实现思路

运行结果


我们这里实现最基本的学生管理系统,没有采用链式的存储,而是采用了顺序存储结构,使用到了结构体,指针,以及动态内存分配(动态内存分配在我先前的文章中有更新)。

上代码

#include <iostream>
#include <malloc.h>
#include <stdio.h>
using namespace std;
// void sort_student(struct *q, int len);
//定义结构体
struct Student
{
    char name[20]; //姓名
    float score;   //分数
};
//根据分数降序来排列学生成绩,采用的是选择排序
void sort_student(struct Student *q, int len)
{
    for (int i = 0; i < len - 1; i++)
    {
        for (int j = i + 1; j < len; j++)
        {
            if ((q + i)->score < (q + j)->score)
            {
                struct Student temp; //交换学生信息
                temp = *(q + i);
                *(q + i) = *(q + j);
                *(q + j) = temp;
            }
        }
    }
}
int main(int argc, char const *argv[])
{
    // cout << sizeof(struct Student) << endl;
    int len; //定义学生数量
    cout << "please input the number of students:" << endl;
    cin >> len;
    struct Student *p = (struct Student *)malloc(sizeof(struct Student) * len);
    //我们要定义动态定义一个数组来存储结构体变量们,所以p的类型得是struct Student,所需要的内存是(sizeof Student)*len;
    for (int i = 0; i < len; i++)
    {
        cout << "Please input N0." << i + 1 << "student information" << endl;
        cout << "Please input the name of student:" << endl; //输入学生姓名
        cin >> (p + i)->name;
        // scanf("%s",p[i].name) name是数组名,本身已经是数组首元素的地址
        cout << "Please input the score of student:" << endl;
        cin >> (p + i)->score;
    }
    sort_student(p, len); //按照分数降序排列学生的次序
    //输出学生信息
    cout << "--------------------The Student Score Information--------------------" << endl;
    for (int i = 0; i < len; i++)
    {
        cout << "name:" << (p + i)->name << "   score:" << (p + i)->score << endl;
    }
    cout << "---------------------------------------------------------------------" << endl;
    return 0;
}

 

实现思路

1.我们定义结构体struct Student;

2.确定学生个数,int len

3.根据学生的个数,动态分配内存

        struct Student *p = (struct Student *)malloc(sizeof(struct Student) * len);

4.使用for循环输入学生信息

5.编写排序函数

        void sort_student(struct Student *q, int len)

6.使用for循环输出排序后的学生信息

运行结果

 我们可以看到,输出的学生信息中,根据成绩排名输出学生信息

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱打羽毛球的程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值