6-3 结构体的最值 (5分)
学生类型ST的定义如下:
typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST;
编写函数,返回指定学生数组中的男生或女生的最高分的地址(约定:整数0和1分别代表男和女)。
函数接口定义:
ST* MaxST(ST d[],int n,int k);//k=0|1
其中 d 是学生数组的初地址, n是数组的长度, k 是查找的性别描述(值确保是0或1),函数须返回指定类型学生中的最高分者的地址,如果不存在,返回空地址。
裁判测试程序样例:
在这里给出函数被调用进行测试的例子。例如:
#include <stdio.h>
#include <stdlib.h>
typedef struct student{
char name[10],id[10];
int gender;
int age;
double scored;
} ST;
void output(ST d){//输出一个记录
if(d==NULL) {printf(“null\n”);return;}
printf("%s,%s,%d,%d,%4.2f\n",d->name,d->id,d->gender,d->age,d->scored);
}
ST InitData(int n);//从输入设备上输入相关数据,略去不表
ST* MaxST(ST d[],int n,int k);//k=0|1 <–需要完成的函数:找最值
int main(){
int i,n;scanf("%d\n",&n);
ST p=InitData(n);
output(MaxST(p,n,0));
output(MaxST(p,n,1));
free§;
return 0;
}
/ 请在这里填写答案 */
输入样例:
第一行是记录个数,余下若干行是相关数据(以空格分隔,每行一个)。
6
Marry.MK 20201125 0 19 92.86
J.Mark 20201185 0 17 90.93
rouh.M 20201102 1 18 79.51
byi.beee 20201129 1 17 90.28
floyd.Fd 20201150 0 17 81.16
grdda 20201146 1 19 85.52
输出样例:
输出男,女同学中的最高分(只需要找出并返回其地址,输入,输出由测试程序完成)。
Marry.MK,20201125,0,19,92.86
byi.beee,20201129,1,17,90.28
ST* MaxST(ST d[],int n,int k)
{
int i=0 , cnt=0;
ST *q=(ST*)malloc(sizeof(struct student));//申请动态内存
q->scored=-1;//分数为非负数,一定会大于-1
for(i=0 ; i<n ; i++)
{
if(d[i].gender==k)
{
if(d[i].scored>q->scored)
{
*q=d[i];
}
}
else{
cnt++;
}
}
if(cnt==n){
return 0;//不存在该性别时返回空地址
}
return q;
}