本关任务:定义学生结构体数据类型,从键盘输入一批学生的信息,编写函数在这批学生中查找某个设定的学生。
代码如下:
#include<stdio.h>
#include<string.h>
#define N 10
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 input(STUDENT *s);
void output(STUDENT s);
void inputarr(STUDENT s[ ], int n);
void outputarr(STUDENT s[ ], int n);
int equal (STUDENT a, STUDENT b) ;
int serach(STUDENT a[],int n,STUDENT x);
int main()
{
STUDENT b[N]={
{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,78}
};
STUDENT x;
int n = 0;
//printf("请输入查找的学生信息:\n");
input(&x);
n = serach(b,5,x);
outputarr(b,5);
if(n!=5)
{
printf("查找成功,是第%d个学生,该学生信息如下:\n",n+1);
output(b[n]);
}
else
{
printf("查无此人。\n");
}
return 0;
}
void input(STUDENT *s)
{
//printf("请输入学生学号:");
scanf("%d",&(*s).num);
//printf("请输入学生姓名:");
scanf("%s",(*s).name);
//printf("请输入学生性别:");
scanf(" %c",&(*s).sex);
//printf("请输入学生出生日期:");
scanf("%d%d%d",&(*s).birthday.year,& (*s).birthday.month, &(*s).birthday.day);
//printf("请输入学生成绩:");
scanf("%f",&(*s).score);
}
void output(STUDENT s)
{
printf("学号:%d\t姓名:%s\t性别:%c\t", s.num,s.name,s.sex);
printf("出生日期:%d-%d-%d\t", s.birthday.year,s.birthday.month, s.birthday.day);
printf("成绩:%.1f\n", s.score);
}
/********** Begin **********/
int serach(STUDENT a[],int n,STUDENT x)
{ int k;
for(k=0;k<n;k++)
{if (a[k].num != x.num )
continue;
else if ( strcmp( a[k].name, x.name ) != 0 )
continue;
else if ( a[k].sex != x.sex )
continue;
else if ( a[k]. birthday .year != x. birthday.year )
continue;
else if ( a[k]. birthday . month!= x. birthday . month )
continue;
else if (a[k]. birthday .day != x. birthday .day)
continue;
else if ( a[k].score != x. score )
continue;
else
return k;}
}
void outputarr(STUDENT s[ ], int n)
{int j;
for(j=0;j<n;j++)
{printf("学号:%d\t姓名:%s\t性别:%c\t", s[j].num,s[j].name,s[j].sex);
printf("出生日期:%d-%d-%d\t", s[j].birthday.year,s[j].birthday.month, s[j].birthday.day);
printf("成绩:%.1f\n", s[j].score);}
}
/********** End **********/