2019年25.学生的记录由学号、数学和C语言成绩(用整数表示)组成,输入N名学生的数据(N值由符号常量确定),统计C语言分数最高的学生的人数(注意:分数最高的学生可能不只一个),并输出

/*
	25.学生的记录由学号、数学和C语言成绩(用整数表示)组成,输入N名学生的数据(N值由符号常量确定),统计C语言分数最高的学生的人数(注意:分数最高的学生可能不只一个),并输出C语言分数最高的学生人数及其各项数据。
	要求输入、输出时,应显示适当的提示信息。
*/

/*
	1 11 11
	2 22 22
	3 33 33
	4 44 33
	5 55 33
*/

/*
	这个写法其实很笨,效率很低,
	可以先一遍循环找到最大值,然后第二遍循环判断是否和最大值相等,相等就输出
	或者第一遍找最大值的时候同时用一个数组记录stu的下标
	但是结果对的就行,笨就笨吧,谁让考的c语言又不是算法(dog)
*/

#include <stdio.h>

#define N 5

struct _student {
	int id;
	int math;
	int clanguage;
}stu[N];

int main() {
	int i, j;
	printf("输入5名学生的数据(学号,数字,c语言成绩:\n");
	for (i = 0; i < N; ++i) {
		scanf("%d%d%d", &stu[i].id, &stu[i].math, &stu[i].clanguage);
	}
	for (i = 0; i < N - 1; ++i) {
		for (j = 0; j < N - i - 1; ++j) {
			if (stu[j].clanguage > stu[j + 1].clanguage) {
				struct _student temp;
				memcpy(&temp, &stu[j], sizeof(struct _student));
				memcpy(&stu[j], &stu[j + 1], sizeof(struct _student));
				memcpy(&stu[j + 1], &temp, sizeof(struct _student));
			}
		}
	}
	printf("c语言成绩最高的几个学生个人信息如下:\n");
	for (i = N - 1; i >= 0; --i) {
		if (stu[i].clanguage != stu[N - 1].clanguage) break;
		printf("id=%d, math=%d, c=%d\n", stu[i].id, stu[i].math, stu[i].clanguage);
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值