输入学生学号、成绩,并排序

  • Post author:
  • Post category:其他


输入学生信息,包括学号、成绩,学号为整形,成绩为浮点型,当输入学号为-1则结束信息输入。当重复输入学生学号和成绩,取最高的成绩,并将学生信息按成绩由高到低排序。

引用头文件:

#include<stdio.h>
#include<string.h>

定义结构体:

struct st
{
	int num;//学号
	float n;//成绩
}student[50];

全局变量:

int j=0;//输入次数
int z=0;//输入学号相同次数

学生信息输入(成绩较低的一次致零):

void ac1(struct st student[10])
{ 
    int i;
	int k,n;
	for(i=0;;i++)
	{
		scanf("%d",&student[i].num);
		if(student[i].num==-1)break;
		scanf("%f\n",&student[i].n);
		j++;
		
	}
		for(k=0;k<j;k++)
		{
			for(n=k+1;n<=j;n++)
			{
				if(student[n].num==student[k].num)//学号相同
					if(student[n].n>=student[k].n)//成绩大于等于
					{
						student[k].n=student[n].n;
						student[n].n=0;
						z++;
					}
					else    //成绩小于
					{
						student[n].n=0;
						z++;
					}
			}
		}
}

成绩排序(由高到低):

void ac2(struct st student[10])
{
	int k,n;
	struct st a;//中间结构体变量
	for(k=0;k<j;k++)//排序
	{
		for(n=0;n<j;n++)
		{
			if(student[n].n<student[k].n)
			{
				a=student[k];
				student[k]=student[n];
				student[n]=a;
			}
		}
	}
}

主函数:

int main()
{
	int i;
	ac1(student);//输入学生学号和成绩
    ac2(student);//排序
	printf("result\n");
	for(i=0;i<=j-1-z;i++)
	{
		printf("%d %.f\n",student[i].num,student[i].n);
	}
}

效果图:



版权声明:本文为Xiao_Bai_MA原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。