需求:动态创建一个数组,数组元素使用结构体,实现,可以手动输入信息,将手动输入的信息进行一个排序,并把信息输出。
# include <stdio.h>
# include <malloc.h>
//定义一个存放学生信息的结构体
struct student
{
char name[100];
int age;
float score;
};
//输入函数,用于输入学生信息
void InputInfo(struct student * member,int len)
{
int i;
for(i = 0; i < len; ++i)
{
printf("请输入第%d个学生的信息\n",i+1);
//line 20
printf("name=");
scanf("%s",member[i].name);
printf("age=");
scanf("%d", &member[i].age);
printf("score=");
scanf("%f", &member[i].score);
printf("\n\n");
}
}
//输出函数,讲学生的信息输出
void OutputInfo(struct student * member,int len)
{
int i;
for(i=0; i < len; ++i)
{
printf("%s \n",member[i].name);
/*
这里不能写member[i]->name,member[i]就代表了这个结构体的名字,
所以应该使用 member[i].name
*/
printf("%d \n",member[i].age);
printf("%f \n",member[i].score);
}
}
//对学生的成绩,进行降序排序
void maopao(struct student * member,int len)
{
int i,j;
struct student t;
for(i = 0; i < len-1; ++i)
{
for(j = 0; j < len-1-i; ++j)
{
if(member[j].score < member[j+1].score)
{
t = member[j];
member[j] = member[j+1];
member[j+1] =t;
}
}
}
}
//主函数,开辟动态空间
int main(void)
{
int len;
printf("请写入需要输入学生的数量:\n");
scanf("%d",&len);
struct student * member = (struct student *)malloc(sizeof(struct student) * len);
// 这时候member就是定义了一个数组
InputInfo(member,len);
maopao(member, len);
OutputInfo(member,len);
return 0;
}
/*
VC++6.0的输出结果是:
===================================
请写入需要输入学生的数量:
3
请输入第1个学生的信息
name=小艾
age=23
score=99.9
请输入第2个学生的信息
name=小王
age=23
score=45.6
请输入第3个学生的信息
name=小黑
age=54
score=22.5
小艾
23
99.900002
小王
23
45.599998
小黑
54
22.500000
===================================
*/
学PHP的小蚂蚁 博客 http://my.oschina.net/woshixiaomayi/blog