结构体定义和相关处理

题目

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

#include<stdio.h>
#include<stdlib.h>
typedef struct student   //定义结构体
{
	int num;
	char name[20];
	float score1;
	float score2;
	float score3;

}stu;
void swap(stu* a, stu* b) //交换两个数
{
	stu temp = *a;
	*a = *b;
	*b = temp;
}
void bubblesort(stu a[], int n) {          //按学号排序
	for (int i = 0; i < n - 1; i++) 
	{
		for (int j = 0; j < n - i - 1; j++) 
		{
			if (a[j].num > a[j + 1].num)
			{
				swap(&a[j + 1], &a[j]);
			}
		}
	}
}
void selectsort1(stu a[], int n, float* average1) {//第一门成绩最高分和平均分
	int max = 0;
	float sum = a[0].score1;
	for (int j = 1; j < n; j++) 
	{
		sum += a[j].score1;
		if (a[max].score1 < a[j].score1) {
			max = j;
		}
		*average1 = sum / n;
	}
	swap(&a[max], &a[0]);
}

void selectsort2(stu a[], int n, float* average2) {//第二门成绩最高分和平均分
	int max = 0;
	float sum = a[0].score2;
	for (int j = 1; j < n; j++)
	 {
		sum += a[j].score2;
		if (a[max].score2 < a[j].score2) {
			max = j;
		}
		*average2 = sum / n;
	}
	swap(&a[max], &a[0]);
}

void selectsort3(stu a[], int n,float*average3) {  //第三门成绩最高分和平均分
	int max = 0;
	float sum = a[0].score3;
	for (int j = 1; j < n; j++)
	 {
		sum += a[j].score3;
		if (a[max].score3 < a[j].score3)
		 {
			max = j;
		}
		*average3 = sum / n;
	}
	swap(&a[max], &a[0]);
}
void totalrank(stu a[], int n,float sum[]) {  //总分排名
	for (int i = 0; i < n - 1; i++)
	 {
		for (int j = 0; j < n - 1 - i; j++)
		 {
			if( (a[j].score1+ a[j].score2 + a[j].score3 ) <( a[j + 1].score1+ a[j + 1].score2 + a[j + 1].score3 ))
			{
				swap(&a[j + 1], &a[j]);
			}
		}
	}
	for (int j = 0; j < 5; j++)
	 {    //记录总分排名
		sum[j] = a[j].score1 + a[j].score2 + a[j].score3;
	}
}

int main()
{
	stu sarr[5];
	float average1, average2, average3, sum[5];
	for (int i = 0; i < 5; i++) 
	{
		scanf_s("%d %s %f %f %f", &sarr[i].num, sarr[i].name, 20, &sarr[i].score1, &sarr[i].score2, &sarr[i].score3);
	}
	bubblesort(sarr, 5);
	for (int i = 0; i < 5; i++)
	 {
		printf("%d %s %5.1f %5.1f %5.1f\n", sarr[i].num, sarr[i].name, sarr[i].score1, sarr[i].score2, sarr[i].score3);
	}
	selectsort1(sarr, 5, &average1);
	printf("the student with the highest score1 is: %d %s %5.1f %5.1f %5.1f\naverage1=%5.2f\n", sarr[0].num, sarr[0].name, sarr[0].score1, sarr[0].score2, sarr[0].score3, average1);
	selectsort2(sarr, 5, &average2);
	printf("the student with the highest score2 is: %d %s %5.1f %5.1f %5.1f\naverage2=%5.2f\n", sarr[0].num, sarr[0].name, sarr[0].score1, sarr[0].score2, sarr[0].score3, average2);
	selectsort3(sarr, 5, &average3);
	printf("the student with the highest score3 is: %d %s %5.1f %5.1f %5.1f\naverage3=%5.2f\n", sarr[0].num, sarr[0].name, sarr[0].score1, sarr[0].score2, sarr[0].score3, average3);
	totalrank(sarr, 5, sum);
	printf("the total point ranking is:\n");
	for (int i = 0; i < 5; i++) 
	{
		printf("%d %s %5.1f %5.1f %5.1f %5.1f\n", sarr[i].num, sarr[i].name, sarr[i].score1, sarr[i].score2, sarr[i].score3,sum[i]);
	}
	return 0;
}

运行实例:
4 li 95 92 93
3 sheng 92 96 94
2 guo 97 94 95
1 qiu 94 95 96
5 xie 90 91 98

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值