本人坚持更新C语言和数据结构知识,可以收藏+关注随时了解
目录
上代码
实现思路
运行结果
我们这里实现最基本的学生管理系统,没有采用链式的存储,而是采用了顺序存储结构,使用到了结构体,指针,以及动态内存分配(动态内存分配在我先前的文章中有更新)。
#include
#include
#include
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循环输出排序后的学生信息
我们可以看到,输出的学生信息中,根据成绩排名输出学生信息