现在的位置: 首页 > 综合 > 正文

C语言学习笔记(22结构体综合应用学生信息管理)

2014年03月19日 ⁄ 综合 ⁄ 共 1493字 ⁄ 字号 评论关闭

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
void PutInFun(struct Student * pArr,int len);
void OutPutFun(struct Student * pArr,int len);
void SortByScore(struct Student * pArr,int len);
struct Student
{
	char name[100];
	int age;
	float score;
};
int main(void)
{
	struct Student * pArr;
	int len;
	//动态构造一维数组
	printf("请输入数组的个数:\n");
	printf("len=");
	scanf("%d",&len);
	//pArr是数组名,存放了数组第一个元素的首地址
	pArr=(struct Student *)malloc(len*sizeof(struct Student));
	//输入学生信息
	PutInFun(pArr,len);
	//按学生成绩升序排序
	SortByScore(pArr,len);
	//输出学生信息
	printf("\n===================按成绩升序排序后的学生信息是==================\n");	
	OutPutFun(pArr,len);
	system("pause");
	return 0;
	/*
	请输入数组的个数:
	len=3
	请输入第1个学生的信息:
	name=张三
	age=20
	score=89
	请输入第2个学生的信息:
	name=李四
	age=24
	score=85
	请输入第3个学生的信息:
	name=王五
	age=26
	score=95

	===================按成绩升序排序后的学生信息是==================
	学生李四的信息是:
	age=24 score=85.000000
	学生张三的信息是:
	age=20 score=89.000000
	学生王五的信息是:
	age=26 score=95.000000
	请按任意键继续. . .
	*/
}
void PutInFun(struct Student * pArr,int len)
{
	int i;
	for(i=0;i<len;i++)
	{
		printf("请输入第%d个学生的信息:\n",i+1);
		printf("name=");
		//name是数组名本身就已经是数组首元素的地址,所以这里不能写成&,pArr[i].name
		scanf("%s",pArr[i].name);
		printf("age=");
		scanf("%d",&pArr[i].age);
		printf("score=");
		scanf("%f",&pArr[i].score);
	}
}
void OutPutFun(struct Student * pArr,int len)
{
	int i;
	for(i=0;i<len;i++)
	{
		printf("学生%s的信息是:\n",pArr[i].name);			
		printf("age=%d ",pArr[i].age);	
		printf("score=%f \n",pArr[i].score);		
	}
}
//按学生成绩升序排序,冒泡算法
void SortByScore(struct Student * pArr,int len)
{
	int i,j;
	struct Student t;
	for(i=0;i<len-1;i++)
	{
		for(j=0;j<len-1-i;j++)
		{
			if(pArr[j].score>pArr[j+1].score)
			{
				t=pArr[j];
				pArr[j]=pArr[j+1];
				pArr[j+1]=t;
			}
		}
	}
}

抱歉!评论已关闭.