学生数据类型的结构体定义:
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;
测试输入:
10010
Liyi
M
2000 5 23
45
10020
Lier
M
2001 2 3
62.5
10030
Lisan
F
2000 10 14
92.5
预期输出:
学号:10010 姓名:Liyi 性别:M 出生日期:2000-5-23 成绩:45.0
学号:10020 姓名:Lier 性别:M 出生日期:2001-2-3 成绩:62.5
学号:10030 姓名:Lisan 性别:F 出生日期:2000-10-14 成绩:92.5
参考代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct date
{
int year;
int month;
int day;
}DATE;
typedef struct student
{
int num;
char name[20];
char sex;
DATE birthday;//DATE类型的结构体变量
float score;
}STUDENT;
void input(STUDENT *s);
void output(STUDENT s);
int main()
{
STUDENT * p1, * p2, * p3;//三个结构体指针
/**********申请3个学生数据所需内存空间 **********/
p1=(STUDENT*)malloc(sizeof(STUDENT));
p2=(STUDENT*)malloc(sizeof(STUDENT));
p3=(STUDENT*)malloc(sizeof(STUDENT));
/**********输入输出3个学生数据信息并输出 **********/
input(p1);//这里输入传的都是指针
input(p2);
input(p3);
output(*p1);//输出传的是值
output(*p2);
output(*p3);
free(p1); //释放这3个所占堆内存
free(p2);
free(p3);
return 0;
}
void input(STUDENT *s)
{
scanf("%d\n%s\n%c\n%d %d %d\n%f",&(s->num),s->name,&(s->sex),&(s->birthday.year),&(s->birthday.month),&(s->birthday.day),&(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);
}