这个代码我打了一个多小时,学了几天,试着打打,自我感觉还行。明天接着代码之旅
里面用到了我最经学的几个关键字和动态内存分配,我尽可能把我会的都放进去了,毕竟目的不是结果,是过程。
/*2017年7月20日22:06:52
写一个简单的学生输入成绩后的排序输出
需要输入学生姓名,学号,和成绩以及学生人数
*/
#include<stdio.h>
//#include<string.h>
#include<malloc.h>
struct students //定义结构体
{
int id;
float score;
char name[20];
};
typedef struct students STU;
void import(STU *parr,int len) //输入
{
int i;
for (i=0;i<len;i++)
{
printf("请输入第%d个学生的信息:\n",i+1);
printf("学号:");
scanf("%d",&parr[i].id);
printf("姓名:");
scanf("%s",parr[i].name);
printf("成绩:");
scanf("%f",&parr[i].score);
}
printf("\n\n");
}
void export(STU *parr,int len) //输出
{
int i;
for (i=0;i<len;i++)
{
printf("第%d名的成绩是:\n",i+1);
printf("学号:%d\n",parr[i].id);
printf("姓名:%s\n",parr[i].name);
printf("学号:%.1f\n\n",parr[i].score);
}
}
void sort(STU *parr,int len) //排序
{
int i,j;
STU tmp;
for (i=0;i<len-1;i++)
{
for (j=0;j<len-i-1;j++)
{
if(parr[j].score<parr[j+1].score) //冒泡排序
{ //交换整体
tmp = parr[j];
parr[j] = parr[j+1];
parr[j+1] = tmp;
}
}
}
}
int main()
{
int len ;
STU *parr;
printf("请输入学生的个数:\n");
printf("len = ");
scanf("%d",&len);
parr = (STU *)malloc(len*sizeof(STU));
if (parr != NULL)
{
import(parr,len);
sort(parr,len);
export(parr,len);
}
else
printf("错误:输入的学生过多,无法储存");
return 0;
}
//程序整体分三步
//存储
//操作
//输出