#include <stdio.h>
#include <malloc.h>
void IntStudent(struct Student * p,int len);
void sort(struct Student *p,int len);
void prArr(struct Student *p,int len);
struct Student{
int age;
char name[20];
int sorce;
};
int main(void){
int n;
printf("请输入你要存储的学生人数:\n");
scanf("%d",&n);
//将结构体看成int型更好理解
struct Student *p = (struct Student*)malloc(sizeof(struct Student)*n);
IntStudent(p,n);
sort(p,n);
prArr(p,n);
return 0;
}
void IntStudent(struct Student * p,int len){
for(int i=0;i<len;i++){
printf("请输入第%d个学生的数据\n",(i+1));
printf("age=");
scanf("%d",&p[i].age);
printf("name=");
scanf("%s",p[i].name);
printf("sorce=");
scanf("\n%d",&p[i].sorce);
}
}
void sort(struct Student *p,int len)
{
int i,j;
struct Student t;
for(int i=0;i<len-1;i++){
for(int j=0;j<len-1-i;j++){
if(p[j].sorce<p[j+1].sorce){
//易错,是换两个结构体整体的位置。
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
}
void prArr(struct Student *p,int len){
printf("这%d名同学按照成绩从高到低排位是:\n",len);
for(int i=0;i<len;i++){
printf("第%d名是%s\n",i+1,p[i].name);
}
}
运行结果: