东华OJ基础题83 学生信息

问题描述 :
你的程序需要从标准输入设备(通常为键盘)中输入N(1≤N≤10)个学生的信息,每项信息包含该学生的编号、姓名、性别、年龄、成绩共五项,按成绩进行排序,然后按成绩从低到高输出,输入保证没有相同的成绩。

输入说明 :
首先输入一个N(1≤N≤10),代表有几条学生记录,接下来N行每行包含一条学生记录,按照编号、姓名、性别、年龄、成绩的顺序给出,数据项之间以空格分隔,除了这五项之间的4个空格外,无其他空格。所有数据前后没有多余的空行,两个学生的记录之间也没有多余的空行。

输出说明 :
你的程序需要对学生的成绩按升序排序后输出所有学生的信息,每行一个学生的信息,同一个学生的信息之间以一个空格分隔。所有数据前后没有多余的空行,在行首和行尾没有多余的空格。

输入范例 :
2
1 aa male 13 1
2 bb female 14 0

输出范例:
2 bb female 14 0
1 aa male 13 1
总结
1.就是结构指针的应用,只要会应用结构体成员变量、会排序就可以,没难度!
2.加油!

#include<stdio.h>
#include<string.h>
typedef struct student{
	int id;
	char name[16];
	char sex[10];
	int age;
	double grade;
}STUDENT;
int main(){
	int n;
	STUDENT stu[11];
	STUDENT key;
	int i,j;
	scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d%s%*c%s%d%lf",&stu[i].id,stu[i].name,stu[i].sex,&stu[i].age,&stu[i].grade);
	}
	for(i=1;i<n;i++){
		if(stu[i].grade<stu[i-1].grade){
			key=stu[i];
			for(j=i-1;j>=0 && stu[j].grade>key.grade;j--){
				stu[j+1]=stu[j];
			}
			stu[j+1]=key;
		}
	}
	for(i=0;i<n;i++){
		printf("%d %s %s %d %.0f\n",stu[i].id,stu[i].name,stu[i].sex,stu[i].age,stu[i].grade);
	}
	return 0;
}
发布了23 篇原创文章 · 获赞 1 · 访问量 184

猜你喜欢

转载自blog.csdn.net/weixin_44205451/article/details/104614014