实验报告 11 结构体、共用体

实验报告 11 结构体、共用体
实验报告 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");

}

相关主题
相关文档
最新文档