第10章 复杂数据类型.
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
10.1
结构体
【问题】什么是结构体类型?什么是结构体变量?结 构体类型与数组类型有什么区别和联系?
姓名
(字符数组)
年龄 性别
(整型) (字符)
身份 民族 证号
(长整型) (字符)
住址
(字符数组)
电话号 码
(长整型)
11.2.1 结构体类型的定义
结构体类型的定义形式为: struct 类型名 {成员项表列}; 例如包含上图中全部类型数据的结构体类型的定义如下: struct person /* 结构体类型名 */ { char name[20]; /* 以下定义成员项的类型和名字 */ int age; char sex; long num; char nation; char address[20]; long tel; };
11.2.2 结构体变量的定义和引用
结构体变量的说明有三种方法: 1.用已定义的结构体类型名定义变量。 例如: struct person student,worker;
/* 定义了两个结构体变量student和worker */
用上面的结构体类型还可再定义变量: struct person men,women;
程序分析:
• 本程序中用赋值语句给 num 和 name 两个成员赋 值,name 是一个字符串指针变量。
• 用 scanf 函数动态地输入sex和score成员值,然后 把boy1的所有成员的值整体赋予boy2。 • 最后分别输出boy2的各个成员值。本例表示了结构 变量的赋值、输入和输出的方法。
源自文库
#include <stdio.h> 【例10-2】输出结构体数据 void main(){ 潘雪晨 同学的性别和分数 struct stu{ (input sex and score): int num; f 90.46 char *name; 学号 Number=2009332202, char sex; 姓名 Name=潘雪晨 float score; 性别Sex=f, 分数Score= 90.5 } boy1,boy2; boy1.num=2009332202; boy1.name="潘雪晨"; printf("%s 同学的性别和分数 (input sex and score):\n", boy1.name); scanf("%c %f",&boy1.sex,&boy1.score); boy2=boy1; printf("学号 Number=%7d, 姓名 Name=%s\n",boy2.num,boy2.name); printf("性别Sex=%c, 分数Score=%5.1f\n",boy2.sex,boy2.score); }
3.不定义结构体类型名,直接定义结构体变量。 一般形式为:
struct {
成员项表列 } 变量名表列;
结构体变量的引用
1. 无嵌套的情况
引用结构体变量成员的形式为: 结构体变量名· 成员名
其中的“.”叫“结构体成员运算符”,这样引 用的结构体成员相当于一个普通变量 ,例如: student.num
第十章 复杂数据类型
结构体、线性链表、共用体与枚举
本章学习指导
在日常生活中,我们常会遇到一些需要填写的 登记表,如住宿表、成绩表、通讯地址等。在这些 表中,填写的数据是不能用同一种数据类型描述的, 在住宿表中我们通常会登记上姓名、性别、身份证 号码等项目;在通讯地址表中我们会写下姓名、邮 编、邮箱地址、电话号码、 E-mail等项目。这些表 中集合了各种数据,无法用前面学过的任一种数据 类型完全描述。 复杂数据类型 —结构体、线性链表、共用体和 枚举类型,包括它们的定义、变量的说明和应用。
2 结构体变量的赋值
1.结构体变量的赋值、输入和输出 结构体变量的输入和输出也都只能对其成员进行 2.同一类型的结构体变量可相互赋值 由于结构体各个成员的类型不同,对结构体变量 赋值也只能对其成员进行 同类型的两个结构体变量之间可以整体赋值 (请比较数组之间不能整体赋值) stud1=stud2;
/* 结构体变量student的成员num,相当于一个长整型变量 */
student.name
/* 结构体变量student的成员name,相当于一个字符数组名 */
2.有嵌套的情况
在有嵌套的情况下,访问的应是结构体的基 本成员,因为只有基本成员直接存放数据,且数 据是基本类型或上面介绍的数组类型,引用形式 为:
结构体变量名· 结构体成员名· …· 结构体成员名· 基本成员名
即从结构体变量开始,用成员运算符“ .” 逐 级向下连接嵌套的成员直到基本成员,不能省略 ,例如:
student.birthday.year
/* 基本成员year ,相当于一个整型变量 */
11.2.3 结构体变量的赋值 1 结构体变量的初始化
11.2.4 结构体数组
1.结构体数组的定义
有三种方法。 (1) 先定义结构体类型,用结构体类型名定义结构体数 组,如: struct stud_type {char name[20]; long num; int age; char sex; float score; }; struct stud_type student[50];
2.在定义结构体类型的同时定义结构体变量。例如:
struct person { char name[20]; int age; …… long tel; }student,worker;
一般的形式为:
struct 类型名 { 成员项表列 }变量名表列;
这样定义的结构体类型也还可多次使用,如:
struct person men,women;
在以上结构体变量的三种定义的同时都可以进行初始化 赋值,例如: struct person stud1={"Wang Li",18, 'M',34011, 'h',12,"13 Bejing Road",2098877}, stud2={"Yu Ping",19, 'F',34082, 'h',12,"25 Hefei Road",5531678}; 注意初始化数据应与类型中的各个成员在位置上一一对 应。对于嵌套的结构体类型变量,初始化是对各个基本类型 的成员赋初值,例如: struct person student={"Wang Li",12,5,1974, 'M',340201,'h',12,"13 Bejing Road",2098877};