PAT甲级C语言.1004. 成绩排名

本文介绍了一个使用C语言实现的成绩管理系统,通过定义结构体来存储学生的姓名、编号及分数,并实现了查找最高分和最低分的功能。文章展示了如何在主函数中进行数据输入输出以及如何在独立的函数内进行最大值最小值的比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#define N 11//定为10会有部分错误
struct info{
	char name[N];
	char num[N];
	int score;
};
int main()
{
	int Max(struct info info[],int n);
	int Min(struct info info[],int n);
	int n,i,min,max;
	printf("input number:");
	scanf("%d",&n);
	getchar();
	struct info info[1000];
	for(i=0;i<n;++i)
	{
		scanf("%s %s %d",info[i].name,info[i].num,&info[i].score);
		/*scanf("%s",&info[i].name);/*scanf( )函数和gets( )函数都可用于输入字符串,但在功能上有区别。
                         gets可以接收空格,scanf遇到空格、回车和Tab键都会认为输入结束,所有它不能接收空格。
		scanf("%s",&info[i].num);//scanf("%s",info[i].num);不正确,为什么?查阅资料!
		scanf("%d",&info[i].score);*/
	}
	max=Max(info,n);
	min=Min(info,n);
	printf("%s %s %d\n",info[max].name,info[max].num,info[max].score);
	printf("%s %s %d\n",info[min].name,info[min].num,info[min].score);
	return 0;
}
int Max(struct info info[],int n)
{
	int i,temp=-1,j=0;
	for(i=0;i<n;++i)
	{
		if(info[i].score>=temp)
		{
			temp=info[i].score;
			j=i;
		}
	}
	return j;
}
int Min(struct info info[],int n)
{
	int i,temp=101,j=0;
	for(i=0;i<n;++i)
	{
		if(info[i].score<=temp)
		{
			temp=info[i].score;
			j=i;
		}
	}
	return j;
}
		

### 关于C语言PAT乙级1004题的解法与解析 对于PAT乙级1004题,题目描述涉及处理学生的信息记录。具体来说,程序需要接收一系列的学生数据,每条数据包括学生的姓名、学号以及成绩,并最终按照特定的要求输出这些信息。 #### 题目结构分析 根据给出的内容,在该类问题中,输入的第一行为正整数\(n\)表示后续会有\(n\)组学生信息待录入;而接下来的每一行则对应一位学生具体的个人信息——依次为姓名、学号和成绩[^5]。值得注意的是,这里的姓名和学号长度均不会超过十个字符,而且所有学生的成绩都是独一无二的。 #### 编程实现要点 为了高效完成此类任务,可以考虑如下几个方面: - **存储方式的选择**:由于涉及到对学生信息的操作(如查询最高分最低分的同学),因此推荐使用数组或者链表来保存每位同学的数据。 - **排序逻辑的设计**:当面对求取最值的需求时,可以直接遍历整个列表找到最大最小值对应的索引位置,也可以先对原始数据按一定规则排序后再选取首位元素作为目标对象。 - **格式化输出控制**:最后一步是要严格按照题目规定的格式打印结果,注意各字段间的间隔符及换行等问题。 下面是一个简单的代码框架用于解决这个问题: ```c #include <stdio.h> #include <string.h> typedef struct { char name[11]; char id[11]; int score; } Student; int main() { int n, i; scanf("%d", &n); Student students[n]; for(i = 0; i < n; ++i){ scanf("%s %s %d", students[i].name, students[i].id, &(students[i].score)); } // 找到分数最高的学生 int maxIndex = 0; for(i = 1; i < n; ++i){ if(students[maxIndex].score < students[i].score) maxIndex = i; } // 找到分数最低的学生 int minIndex = 0; for(i = 1; i < n; ++i){ if(students[minIndex].score > students[i].score) minIndex = i; } printf("%s %s\n%s %s\n", students[maxIndex].name, students[maxIndex].id, students[minIndex].name, students[minIndex].id); return 0; } ``` 上述代码实现了基本的功能需求,即读入多名学生的资料并找出其中得分最高者与最低者的相关信息加以展示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值