
C易设叶在线开放课程 结构体 主讲:曾志华
结构体 在线开放课程 主讲:曾志华

思考一个问题 在程序里表示一个人(姓名、年龄、性别、…),怎 么表苏? 想表示多个人呢? 如何用计算机程序实现下述表格的管理? 某学校学生成绩管理表 学号 姓名 性别 入学时间 体育 英语 数学 音乐 令狐冲男 1999 90 83 72 82 2 林平之 男 1999 78 92 78 3 岳灵珊 女 1999 89 72 98 66 4 任莹莹女 1999 78 95 87 90 …44 6
思考一个问题 • 在程序里表示一个人(姓名、年龄、性别、……),怎 么表示? • 想表示多个人呢? • 如何用计算机程序实现下述表格的管理? 某学校学生成绩管理表 学号 姓名 性别 入学时间 体育 英 语 数 学 音 乐 1 令狐冲 男 1999 90 83 72 82 2 林平之 男 1999 78 92 88 78 3 岳灵珊 女 1999 89 72 98 66 4 任莹莹 女 1999 78 95 87 90 5 … … 6 … …

数组的解决方法 (身设计 int studentId[30];/*最多可以管理30个学生,每个学生的学号用数组的 下标表示*/ char studentName[10][30]; char studentSex[30][3]; int timeofEnter[30];/*入学时间用int表示*/ int scorecomputer[30];/*计算机原理课的成绩*/ int scoreEnglish[30];/*英语课的成绩* int scoreMath[30]; /*数学课的成绩*/ int scoreMusic[30]; /*音乐课的
int studentId[30]; /* 最多可以管理30个学生, 每个学生的学号用数组的 下标表示*/ char studentName[10][30]; char studentSex[30][3]; int timeOfEnter[30]; /*入学时间用int表示*/ int scoreComputer[30];/*计算机原理课的成绩*/ int scoreEnglish[30]; /*英语课的成绩* int scoreMath[30]; /*数学课的成绩*/ int scoreMusic[30]; /*音乐课的 数组的解决方法

数组的解决方法 数据的内存管理方式 学号 姓名 性别 入学时间 1 令狐冲 男 1999 2 林平之 男 1999 3 岳灵珊 女 1999 4 任莹莹 女 1999 ·。+。+ 90 83 72 82 78 92 88 78 89 72 98 66 78 95 87 90 … 体育成绩 英语成绩 数学成绩 音乐成绩
数组的解决方法 • 数据的内存管理方式 90 78 89 78 …… 83 92 72 95 …… 72 88 98 87 …… 82 78 66 90 …… 1 2 3 4 …… 令狐冲 林平之 岳灵珊 任莹莹 …… 男 男 女 女 …… 1999 1999 1999 1999 …… 学号 体育成绩 姓名 性别 入学时间 英语成绩 数学成绩 音乐成绩

数组的解决方法 (程设汁 1 分配内存不集中,寻址效率不高 2对数组进行赋初值时,容易发生错位 3结构显得比较零散,不容易管理
1 分配内存不集中,寻址效率不高 2 对数组进行赋初值时,容易发生错位 3 结构显得比较零散,不容易管理 数组的解决方法

希望的内存分配图 身程序设计 学生1 学生2 学生3 学生4 1 2 4 令狐冲 林平之 岳灵珊 任莹莹 男 男 女 女 1999 1999 1999 1999 90 78 89 78 83 92 72 95 72 88 98 87 82 78 66 90
希望的内存分配图 1 令狐冲 男 1999 90 83 72 82 2 林平之 男 1999 78 92 88 78 3 岳灵珊 女 1999 89 72 98 66 4 任莹莹 女 1999 78 95 87 90 学生1 学生2 学生3 学生4

结构体的解决方法 struct STUDENT int studentID; /*每个学生的序号*/ char studentName[l0];/*每个学生的姓名*/ char studentSex[4];/*每个学生的性别*/ int timeofEnter; /*每个学生的入学时间*/ int scoreComputer; /*每个学生的计算机原理成绩*/ int scoreEnglish; /*每个学生的英语成绩*/ int scoreMath; /*每个学生的数学成绩*/ int scoreMusic; /*每个学生的音乐成绩*/ }; struct STUDENT是一个自己定义的数据类型
• struct STUDENT { int studentID; /*每个学生的序号*/ char studentName[10];/*每个学生的姓名*/ char studentSex[4]; /*每个学生的性别*/ int timeOfEnter; /*每个学生的入学时间*/ int scoreComputer; /*每个学生的计算机原理成绩*/ int scoreEnglish; /*每个学生的英语成绩*/ int scoreMath; /*每个学生的数学成绩*/ int scoreMusic; /*每个学生的音乐成绩*/ }; struct STUDENT是一个自己定义的数据类型 结构体的解决方法

什么是结构体? ● 结构体: 一把关系紧密且逻辑相关的多种不同类型的变量组织 到 - 统一的名字之下,是自定义的数据类型 -这种类型的变量占用相邻的一段内存单元
• 结构体: – 把关系紧密且逻辑相关的多种不同类型的变量组织 到 – 统一的名字之下,是自定义的数据类型 – 这种类型的变量占用相邻的一段内存单元 什么是结构体?

结构体类型的定义 (身设汁 struct 结构体名 例如: 类型关键字 成员名1; struct student 类型关键字 成员名2 …。 int num; 类型关键字 成员名n char name [20]; }: char sex int age; float score; (注意:结构体说明要以;结尾) char addr[30]; };
结构体类型的定义 struct 结构体名 { 类型关键字 成员名1; 类型关键字 成员名2 …... 类型关键字 成员名n }; 例如: struct student { int num; char name[20]; char sex; int age; float score; char addr[30]; }; (注意:结构体说明要以;结尾)

习题 1每个候选人的选票总数 有三个候选人,名为:“Ii”,"Zhang","Wang",从使盘输入3个候选人的姓 名(输入5次),统计每个候选人的选票总数。 Enter
1 每个候选人的选票总数 有三个候选人,名为:“li”,"Zhang","Wang",从键盘输入3个候选人的姓 名(输入5次),统计每个候选人的选票总数。 习题