PTA 1004 成绩排名(C语言实现)

一、题目解析

本题较为简单。
使用结构体来实现数据读入。

需要注意的是要学会对数组进行动态申请资源。

calloc()是一个C语言函数;
用 法: void *calloc(unsigned n,unsigned size);
功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL;
malloc()的区别
calloc()在动态分配完内存后,自动初始化该内存空间为零,而malloc()不初始化,里边数据是随机的垃圾数据。

例如本题中:

sData *sdata;  //定义一个sData类型的指针,用于动态申请结构体指针数组
scanf("%d", &n);
sdata = (sData *)calloc(n, sizeof(sData)); //动态结构体指针数组。 

以上使用calloc()函数申请了以sdata指向的地址开头的,分配n个长度为sizeof(sData)的连续空间。

注意:当内存不再使用时,应使用free()函数将内存块释放。
free(sdata);

二、代码实现

#include <stdio.h>
#include <stdlib.h>
typedef struct studentData{
	char name[11];
	char num[11];
	int score;
}sData;

//typedef struct studentData sData;  此时struct studentData 等价于 sData 
int main(int argc, char *argv[]) {
	int i;
	int n;	
	sData *sdata;  //定义一个sData类型的指针,用于动态申请结构体指针数组
	int max,min;  //最高分,最低分 
	int maxIndex, minIndex;  //成绩最高、最低学生序号 
	
	scanf("%d", &n);
	
	sdata = (sData *)calloc(n, sizeof(sData)); //动态结构体指针数组。 
	for(i=0; i<n; i++)
	{
		//结构体成员变量为数组时不需要取地址符号“&”,为基本数据类型时需要取地址符“&“。
		scanf("%s %s %d", sdata[i].name, sdata[i].num, &sdata[i].score); 
		if(i==0){  //将第一个读入的数据组同时默认为最大值和最小值 
			max= sdata[0].score;
			min= sdata[0].score;
			maxIndex=0;
			minIndex=0;
		 	continue;
		}
		if(sdata[i].score>max)
		{
			max=sdata[i].score;
			maxIndex=i;
		}
		if(sdata[i].score<min)
		{
			min=sdata[i].score;
			minIndex=i;
		}
	}
	printf("%s %s\n", sdata[maxIndex].name, sdata[maxIndex].num);
	printf("%s %s\n", sdata[minIndex].name, sdata[minIndex].num);
	free(sdata); //注意释放资源!!!
	return 0;
}
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值