pat 1004成绩排名 编译器 C(gcc)

要求

读入 n(>0)名学生的姓名、学号、成绩,分别输出成绩最高和成绩最低学生的姓名和学号。

实现方法

看到这道题,第一眼想到用结构体+链表来实现。
写完之后提交,只有第一个测试点通过。就琢磨发现流程没有问题,自己测试几个数据都能通过。最后,突然发现可能是结构体中字符串长度定义小了,改成20果然通过了

实现代码

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct Student{//定义结构体
	char name[20];
	char id[20];
	int gold;
	struct Student * next;
}Student;
int main(){
	struct Student * L;
	struct Student * Lhead;
	struct Student * p;

	L = (struct Student *) (malloc(sizeof(struct Student)));
	Lhead = L;
	p = L;
	
	int n;
	int a,b,c,d;

	scanf("%d",&n);
	for(int i = 0; i<n; i++){
		struct Student * q;
		q = (struct Student*)(malloc(sizeof(struct Student)));
		scanf("%s",&(q->name));
		scanf("%s",&(q->id));
		scanf("%d",&(q->gold));
		p->next = q;
		p = q;
	}
	p = L->next;
	a = p->gold;
	b = 0;
	c = p->gold;
	d = 0;
	for(int i = 0;i<n;i++){
		if(a<p->gold){
			a = p->gold;
			b = i;
		}
		if(c>p->gold){
			c = p->gold;
			d = i;
		}
		p = p->next;
	}
	p = L->next;
	int i = 0;
	while(i<b){
		p = p->next;
		i++;
	}
	printf("%s %s\n",p->name,p->id);
	p = L->next;
	i = 0;
	while(i<d){
		p = p->next;
		i++;
	}
	printf("%s %s",p->name,p->id);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值