为了账号安全,请及时绑定邮箱和手机立即绑定

有10名学生,每名学生有语文、数学、外语三门课程的成绩,计算每名学生的总成绩,然后按总成绩由高到低排序

有10名学生,每名学生有语文、数学、外语三门课程的成绩,计算每名学生的总成绩,然后按总成绩由高到低排序

C
qq_不二_19 2016-12-29 12:43:49
若成绩相同,则按英语成绩排序。要求:①利用结构体数组存放数据。②通过函数调用方式。
查看完整描述

1 回答

已采纳
?
望远

TA贡献1017条经验 获得超1032个赞

#include<stdio.h>
typedef struct 
{
	float scores[3];
	float sum;
	int num;
}Student;
void inputMessaage(Student students[],int n)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		printf("请输入%d位学生的3课成绩(空格分隔):\n",i+1);
		students[i].num=10000+i;
		for(j=0;j<3;j++)
		{
			scanf("%f",&students[i].scores[j]);
		}
	}
}
void sum(Student students[],int n)
{
	int i,j;
	for(i=0;i<n;i++)
	{
		students[i].sum=0;
		for(j=0;j<3;j++)
		{
			students[i].sum+=students[i].scores[j];
		}
	}
}
void order(Student studnets[],int n)
{
	int i,j;
	Student temp;
	for(i=0;i<n-1;i++)
	{
		for(j=i+1;j<n;j++)
		{
			if(studnets[i].sum<studnets[j].sum)
			{
				temp=studnets[i];
				studnets[i]=studnets[j];
				studnets[j]=temp;
			}
			if(studnets[i].sum==studnets[j].sum)
			{
				if(studnets[i].scores[2]<studnets[j].scores[2])
				{
					temp=studnets[i];
					studnets[i]=studnets[j];
					studnets[j]=temp;
				}
			}
		}
	}
}
void display(Student studnets[],int n)
{
	int i,j;
	printf("学生编号\t语文\t数学\t英语\t总分\n");
	for(i=0;i<n;i++)
	{
		printf("  %d  \t",studnets[i].num);
		for(j=0;j<3;j++)
		{
			printf("%.1f\t",studnets[i].scores[j]);
		}
		printf("%.1f\n",studnets[i].sum);
	}
}
void main()
{
	Student studnets[10];
	int num=10;
	inputMessaage(studnets,num);
	sum(studnets,num);
	order(studnets,num);
	display(studnets,num);
}

//img1.sycdn.imooc.com//58649c5e0001fe0005030523.jpg

查看完整回答
4 反对 回复 2016-12-29
  • 1 回答
  • 1 关注
  • 2124 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信