有一个表示学生信息的结构体

有一个学生结构体,其数据成员有: 学号, 姓名, 3 门课程。从键盘上输入 5 个学生的信息。要求输出: 1.按照学号递增输出全部学生信息,每个学生的信息一行。(格式: 学号 姓名 分数1 分数 2 分数 3 总分) 2.输出每门课程最高分的学生的信息 3.输出每门课程的平均分 4.按照总分输出学生排名


#define _CRT_SECURE_NO_DEPRECATE
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 5
typedef struct student
{
int stuID;
char name[20];
double score[3];
}STU;

void Print_InFo(STU *);
void Print_RankstuID(STU *);
void Print_MaxScoreOfOne(STU *);
void Print_AvegerScore(STU *);
void Print_RankOfTotal(STU *);
	
int main()
{
	STU stus[5];
	int i = 0;
	for (; i < 5; i++)
	{
		scanf("%d%s%lf%lf%lf", &stus[i].stuID, &stus[i].name, &stus[i].score[0], 	&stus[i].score[1], &stus[i].score[2]);
	}
	Print_RankstuID(stus);
	printf("-------------------------------------------------------\n");
	Print_MaxScoreOfOne(stus);
	printf("-------------------------------------------------------\n");
	Print_AvegerScore(stus);
	printf("-------------------------------------------------------\n");
	Print_RankOfTotal(stus);
	system("pause");
	return 0;
}

//打印学生信息
void Print_InFo(STU *stus)
	{
	int i = 0;
	for (; i < N; i++)
	{
		printf("学号:%d		姓名:%s		分数1:%5.2		分数2:lf%5.2		分数3:lf%5.2		总分:lf%5.2lf", stus[i].stuID, stus[i].name, stus[i].score[0], stus[i].score[1], stus[i].score[2],stus[i].score[0]+stus[i].score[1]+ stus[i].score[2]);
	}	
}
//按照学号顺序输出学生信息
void Print_RankstuID(STU *stus)
{
	int i = 0, j = 0;
	for (i = N; i > 0; i++)//外层控制无序数的数量
	{
		for (j = N; j > 0; j++)//内层控制比较
		{
			if (stus[j].stuID > stus[j + 1].stuID)
			{
				STU s = stus[j];
				stus[j] = stus[j + 1];
				stus[j + 1] = s;
			}
		}
	}
	printf("按照学生的学号排序如下:\n");
	Print_InFo(stus);
}
	
//输出每门课程最高分的学生信息
void Print_MaxScoreOfOne(STU *stus)
{
	STU* s;
	int i = 0, j = 0;
	for (i = 0; i < 3; i++)
	{
		s = &stus[0];		//认为第一个是最大的,让s始终指向最大的
		printf("课程%d最高分的学生信息为:\n", i + 1);
		for (j = 1; j < N; j++)
		{
			if (stus[j].score[i] > s->score[i])
			{
				s = &stus[j];
			}
		}
		printf("学号:%d		姓名:%s		分数1:%5.2lf		分数2%5.2lf		分数3%5.2lf		总分%5.2lf\n", s->stuID, s->name, s->score[0], s->score[1], s->score[2], s->score[0] + s->score[1] + s->score[2]);
	}
}
//打印每门课程的平均分
void Print_AvegerScore(STU *stus)
{
	int i = 0, j = 0;
	double ave = 0;
	for (i = 0; i < 3; i++)
	{
		ave = 0;
		for (j = 0; j < N; j++)
		{
			ave += stus[j].score[i];
		}
		ave /= N;
		printf("课程%d的平均分为%5.2lf\n", i + 1, ave);
	}
}
	
//按照总分高低输出学生排名
void Print_RankOfTotal(STU *stus)
{
	int i = 0, j = 0;
	for (i = 0; i < N - 1; j++)
	{
		for (j = 0; j < N - 1 - i; j++)
		{
			if (stus[j].score[0] + stus[j].score[1] + stus[j].score[2] < stus[j + 1].score[0] + stus[j + 1].score[1] + stus[j + 1].score[2])
			{
				STU s = stus[j];
				stus[j] = stus[j + 1];
				stus[j + 1] = s;
			}
		}
		printf("按照学生的总分排名如下:\n");
		Print_InFo(stus);
	}
}


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