实验报告 11 结构体、共用体
实验11 结构体、共用体和枚举类型
一、实验目的:
1、掌握结构体类型定义和结构体变量定义、初始化的方法;
2、掌握结构体成员的访问方法,熟悉结构体嵌套定义方法;
3、掌握结构体数组的定义和使用方法,能够用模块化方法设计程序;
4、熟悉typedef的基本用法。
二、实验内容
1、(基础题)请按下列要求编程:
(1)先定义一个结构体Date,它包含三个成员:年(year,int)、月(month,int)、日(day,int);
(2)再定义一个结构体,它包含三个成员:姓名(name,char[10])、性别(sex,char类型,’m’为男,’f’为女)、出生时间(birthday,Date类型)、身份证号(ID,char[19])、电子邮箱(email,char[60]),并用typedef将该结构体命名为Person类型;
(3)然后在主函数中定义一个Person类型的变量me,通过键盘输入自己的信息,然后输出me的各成员值。
程序执行如下图所示:
程序代码:#include
struct Date
{
int year;
int month;
int day;
};
typedef struct Person
{
char name[10];
char sex;
struct Date birthday;
char ID[19];
char email[60];
}Person;
int main()
{
Person me;
printf("请输入个人信息:\n");
printf("姓名:");
scanf("%s",https://www.360docs.net/doc/f45415030.html,);
printf("\n性别('m'or'f'):");
getchar();
scanf("%c",&me.sex);
printf("\n出生年月:");
scanf("%d %d %d",&me.birthday.year,&me.birthday.month,&me.birthday.day);
printf("\n身份证号:");
scanf("%s",me.ID);
printf("\n电子邮件:");
scanf("%s",me.email);
printf("\n-----------------\n");
printf("\n个人信息如下:\n");
printf("姓名:%s\n性别:%c\n出生年月:%d年%d月%d日
\n",https://www.360docs.net/doc/f45415030.html,,me.sex,me.birthday.year,me.birthday.month,me.birthday.day);
printf("身份证号:%s\n电子邮件:%s\n",me.ID,me.email);
return 0;
}
2、要求定义一个函数max_print实现n个学生(学生的信息包括学号、姓名、成绩)中成绩最高的学生信息的输出。定义一个函数input完成n个学生信息的输入工作;主函数调用上面两个函数完成有5个学生信息的输入并输出成绩最高的学生信息。程序运行截图如下图所示:
程序代码:#include
#include
typedef struct Student
{
char num[11];
char name[20];
float score;
}Student;
int main(){
void input(Student stu[],int n);
void max_print(Student stu[],int n);
Student s[5];
printf("请输入5个学生的信息:\n");
input(s,5);
max_print(s,5);
return 0;}
void input(Student stu[],int n)
{
int i;
for(i=0;i { scanf("%s",stu[i].num); scanf("%s",stu[i].name); scanf("%f",&stu[i].score); } } void max_print(Student stu[],int n) { Student max; int i=0; //第一个学生作为擂主 max=stu[0]; for(i=1;i { if(stu[i].score>=max.score) { max=stu[i]; } } printf("\n成绩最高的学生信息为:\n"); printf("%s %s %.2f\n",max.num,https://www.360docs.net/doc/f45415030.html,,max.score); } 3、(基础题)学生有三门课程:A、B、C,3名学生的成绩如下表所示: 姓名 A B C 平均分 张三78 84 67 李四88 90 95 王五66 79 80 请先定义一个结构体Student,其成员包括:name(姓名)、A、B、C、aver(平均分),再定义一个Student类型的数组stud[3]来存放学生资料。现欲先输入学生三门课程成绩,再计算平均分,最后输出学生信息,要求用“模块化程序设计”方法来设计程序。请根据题意、注释在代码段1-代码段5中填写程序所缺代码。 程序代码:#include struct Student { char name[10]; int A; int B; int C; float aver; }; int main() { struct Student stud[3]; input(stud,3); average(stud,3); print(stud,3); return 0; } void input(struct Student s[], int n) { int i; for(i=0;i { printf("请输入第 %d 名学生数据:\n",i+1); printf("姓名:"); scanf("%s",s[i].name); printf("A课程成绩:"); scanf("%d",&(s[i].A)); printf("B课程成绩:"); scanf("%d",&(s[i].B)); printf("C课程成绩:"); scanf("%d",&(s[i].C)); printf("\n"); } printf("\n"); } void average(struct Student s[], int n) { int i; for(i=0;i { s[i].aver=(s[i].A+s[i].B+s[i].C)/3.0; } } void print(struct Student s[], int n) { int i; for(i=0;i { printf("第 %d 名学生数据:\n",i+1); printf("姓名:"); printf("%s\n",s[i].name); printf("A课程成绩:"); printf("%d\n",s[i].A); printf("B课程成绩:"); printf("%d\n",s[i].B); printf("C课程成绩:"); printf("%d\n",s[i].C); printf("平均成绩:");printf("%.1f\n",s[i].aver); printf("\n"); } printf("\n"); }