#include <stdio.h>
#include <malloc.h>
#include <stdbool.h>//引入bool类型
struct Student {
int age;
float score;
char name[100];
};
//弄一个排序,按成绩从大到小存储
void bubbleSort(struct Student *array, int length) {
bool flag = false;//优化
for(int i = 0; i < length - 1; i++) {//最多只需遍历length-1次就可以将其排序好
for(int j = 0; j < length - 1 - i; j++) {
struct Student * temp;//定义一个临时变量用于交换
temp = (struct Student *)malloc(sizeof(struct Student));//为临时变量分配存储空间,因为不是基本类型,并不会为其分配存储空间
if(array[j].score < array[j+1].score){
flag = true;
*temp = array[j];
array[j] = array[j+1];
array[j+1] = *temp;
}
}
//没执行if条件判断,说明数组已经排序好,无需多排
if(!flag){
break;
} else {
flag = false;
}
}
}
int main(void) {
int len;//学生的个数,也就是数组的长度
struct Student * array;
//动态构造一维数组
printf("请输入学生的个数:\n");
printf("len = ");
scanf("%d",&len);
array = (struct Student *)malloc(len * sizeof(struct Student));
for (int i = 0; i < len; i++) {
printf("请输入第%d个学生的信息:\n", i+1);
printf("age = ");
scanf("%d",&array[i].age);
printf("name = ");
scanf("%s",array[i].name);//数组名所代表的就是该数组最开始的一个元素的地址
printf("score = ");
scanf("%f",&array[i].score);
}
//调用该函数
bubbleSort(array, len);
//输出
for(int i = 0; i < len; i++) {
printf("第%d个学生的信息为:\n",i+1);
printf("名字为:%s\n",array[i].name);
printf("年龄为:%d\n",array[i].age);
printf("分数为:%f\n",array[i].score);
}
}
输出:
请输入学生的个数:
len = 4
请输入第1个学生的信息:
age = 21
name = rong
score = 145
请输入第2个学生的信息:
age = 20
name = ting
score = 150
请输入第3个学生的信息:
age = 20
name = ni
score = 130
请输入第4个学生的信息:
age = 21
name = shi
score = 150
第1个学生的信息为:
名字为:ting
年龄为:20
分数为:150.000000
第2个学生的信息为:
名字为:shi
年龄为:21
分数为:150.000000
第3个学生的信息为:
名字为:rong
年龄为:21
分数为:145.000000
第4个学生的信息为:
名字为:ni
年龄为:20
分数为:130.000000
--------------------------------
Process exited after 65.57 seconds with return value 0
请按任意键继续. . .