学生成绩管理系统_结构体、指针、存储、排序、动态内存分配

#include<stdio.h>
#include<malloc.h>


//定义结构体
struct Student
{
int age ;
float score;
char name[100];
};


int main(void)
{
//函数的声明
void LeaveStudent(struct Student * p_1,int len_1);
void sort(struct Student * p_2,int len_2);
void OutputStudent(struct Student * p_3,int len_3);

//定义变量以及动态内存分配定义
int sum;
struct Student * p_sum; 
p_sum = (struct Student *)malloc(sum * sizeof(struct Student));


printf("请用户输入学生的个数:\n");
printf("sum= ");
scanf("%d",&sum);
printf("\n");

LeaveStudent(p_sum,sum);
sort(p_sum,sum);
OutputStudent(p_sum,sum);


return 0;
}


//接受保存数据的函数
void LeaveStudent(struct Student * p_1,int len_1)
{
int i = 0;


for(i=0; i<len_1; ++i)
{
printf("请依次输入第%d个学生的成绩信息:\n",i +1);
printf("age = ");
scanf("%d",&p_1[i].age);
printf("name = ");
scanf("%s",p_1[i].name);//这里代表数组名,所以不用取地址符号
printf("score = ");
scanf("%f",&p_1[i].score);
}
}


//按照分数的降序进行排序
void sort(struct Student * p_2,int len_2)
{
int i,j;
struct Student   t;


for(i=0; i<len_2-1; ++i)
{
for(j=0; j<len_2-1-i; ++j)
{
if(p_2[j].score < p_2[j+1].score)  // >表示升序,<表示降序
{
t = p_2[j];
p_2[j] = p_2[j+1];
p_2[j+1] = t;
}
}
}
}


//输出结果函数
void OutputStudent(struct Student * p_3,int len_3)
{
printf("成绩排序后结果为:\n");
int i;
for(i=0; i<len_3; ++i)
{
printf("依次输出第%d个学生的成绩信息:\n",i +1);
printf("age = ");
printf("%d \n",p_3[i].age);
printf("name = ");
printf("%s \n",p_3[i].name);//这里代表数组名,所以不用取地址符号
printf("score = ");
printf("%f \n",p_3[i].score);
printf("\n");
}
}

猜你喜欢

转载自blog.csdn.net/img_Guo/article/details/77220337