任务描述
本关任务:编写程序从键盘输入5
个学生的信息,包括学生学号、姓名、性别、出生年月及成绩,用结构体数组保存学生的信息,要求用函数实现结构体数组的输入输出及求成绩最高学生的序号。
相关知识
如果有一批学生的数据需要处理,可以定义结构体数组,即数组的每一个元素都是具有相同结构体类型的下标结构体变量。在实际应用中,经常用结构体数组来表示具有相同数据结构的一个群体,如一个班的学生档案、一个车间职工的工资表等。结构体数组的定义方法和结构变量相似,只需说明它为数组类型即可。
定义学生数据类型如下:
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
int num;
char name[20];
char sex;
DATE birthday;
float score;
}STUDENT;
定义长度为5
的结构体数组如下:
STUDENT b[5];
这个结构体数组b
,共有5
个元素,依次为b[0]
~b[4]
,每个数组元素都是STUDENT
类型,数组b
可以存放5
个学生的数据。
结构体数组还可以在定义时初始化如下:
STUDENT b[5]={
{10010,"Liyi",’M’,2000,5,23,45},
{10020,"Lier",’M’,2001,2,3,62.5},
{10030,"Lisan",’F’,2000,10,14,92.5},
{10040,"Lisi",’F’,2002,7,23,87},
{10050,"Liwu",’M’,1999,8,6,58};
};
结构体数组定义时就进行初始化,也可不给出数组长度,编译系统会自动根据初值的个数决定数组的长度。
如果定义了针对STUDENT
类型的变量输入输出函数如下:
void input(STUDENT *s);
void output(STUDENT s);
那么,可以按下面格式输入输出结构体数组元素的值:
for(i=0;i<5;i++)
{
input(&b[i]);
}
for(i=0;i<5;i++)
{
output(b[i]);
}
如果要定义针对STUDENT
类型的数组输入输出函数,函数的原型参考如下:
void inputarr(STUDENT s[ ], int n);
void outputarr(STUDENT s[ ], int n);
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,要求编写函数实现结构体数组的输入输出。具体要求如下:
- 函数 inputarr() 实现结构体数组的输入;
- 函数 outputarr() 实现结构体数组的输出,输出格式参照测试说明。
- 函数 maxarr() 实现结构体数组的输出,输出格式参照测试说明。
测试说明
平台会对你编写的代码进行测试。
代码实现
#include<stdio.h>
#include<string.h>
typedef struct date
{ int year;
int month;
int day;
}DATE;
typedef struct student
{
int num;
char name[20];
char sex;
DATE birthday;
float score;
}STUDENT;
void inputarr(STUDENT s[ ], int n);
void outputarr(STUDENT s[ ], int n);
int maxarr(STUDENT s[ ], int n);
int main()
{
STUDENT b[5];
int n;
inputarr(b,5);
n=maxarr(b,5);
outputarr(b,5);
printf("第%d个同学的成绩最高。\n",n+1);
return 0;
}
/********** 三个子函数定义 **********/
/********** Begin **********/
void inputarr(STUDENT s[ ], int n)
{
for(int i=0;i<n;i++){
scanf("%d %s %c %d %d %d %f",&s[i].num,s[i].name,&s[i].sex,&s[i].birthday.year,&s[i].birthday.month,&s[i].birthday.day,&s[i].score);
}
}
void outputarr(STUDENT s[ ], int n){
for(int i=0;i<n;i++){
printf("学号:%d 姓名:%s 性别:%c 出生日期:%d-%d-%d 成绩:%.1f\n",s[i].num,s[i].name,s[i].sex,s[i].birthday.year,s[i].birthday.month,s[i].birthday.day,s[i].score);
}
}
int maxarr(STUDENT s[ ], int n){
int i,j;float m=0.0;
for( i=0;i<5;i++){
if(m<s[i].score){
m=s[i].score;
}
}
for(j=0;j<5;j++){
if(m==s[j].score){
break;
}
}
return j;
}
/********** End **********/
点赞收藏关注(˵¯͒〰¯͒˵)