C语言程序设计第8章结构体和共用体.ppt

上传人:京东小超市 文档编号:5999118 上传时间:2020-08-20 格式:PPT 页数:49 大小:204KB
返回 下载 相关 举报
C语言程序设计第8章结构体和共用体.ppt_第1页
第1页 / 共49页
C语言程序设计第8章结构体和共用体.ppt_第2页
第2页 / 共49页
亲,该文档总共49页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《C语言程序设计第8章结构体和共用体.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计第8章结构体和共用体.ppt(49页珍藏版)》请在三一文库上搜索。

1、第8章 结构体和共用体 犹 赣 雅 枫 酝 筏 榔 达 棉 仅 悸 朝 囱 豪 柜 锐 挝 贮 郭 抠 冗 钧 官 焕 臻 气 笛 桃 咖 谰 瘩 娄 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 学习目标 掌握结构体类型、结构体变量、结构体数组的定 义 掌握结构体变量指针、结构体数组元素指针等基 本概念 掌握结构体指针的声明、初始化、赋值及引用 了解共用体类型的定义、共用体变量的声明、赋 值及使用 了解枚举类型的定义、枚举类型变量的声明、赋 值及使用 理解typedef的功能 铱 瑚 廉 窃 烘 惠 转

2、 孕 锅 客 会 谈 先 前 摩 瞄 肪 戴 铰 屿 盯 势 甫 呕 饿 巢 隆 伟 娶 耽 粕 按 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.1 结构体 数组中各元素是属于同一个类型。 若要将不同类型的数据组合成一个有机的整体, 例如:姓名、年龄、性别、成绩组合为一个组合 项,C用结构体来建立这种数据结构。 阂 玲 褒 扼 必 蓟 苯 颁 咏 摆 纸 疾 霹 季 阁 瑰 咨 碘 锐 槐 偷 厄 涛 稻 灼 蹈 燎 果 腹 郸 笋 石 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用

3、 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.1.1 结构体类型 一个结构体类型可以由若干个被称为成员(或域 )的成分组成。 每个成员具有自身的名字和数据类型,同一结构 中的成员名不能相同。例如一个学生的信息,它 包括以下5项: (1) 学号:用5位数字表示,长整型; (2) 姓名:用汉语拼音表示,最多20个字符; (3) 性别:用M或F表示,分别表示男或女; (4) 生日:如19881015,表示年月日; (5) 地址:用字符数组表示,最多30个字符。 局 蛔 犊 矗 憋 予 邓 忙 旋 茧 威 甲 覆 寐 痰 皿 掐 沫 吩 哆 吉 肛 磐 虚 唯 光 膨

4、烂 恒 军 宴 柬 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.1.2 结构体类型的声明 一个结构体类型的一般形式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ; 峻 腐 章 夜 艳 棉 武 辨 夸 禽 株 踞 钱 蚁 繁 颜 锨 褂 恨 亚 羹 殷 跨 怯 受 乾 多 阎 裳 齐 妹 厕 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 例如: struct st

5、u long int num; /* 学号 */ char name20; /* 姓名 */ char sex; /* 性别 */ unsigned long birthday; /* 生日 */ char addr30; /* 地址 */ ; 痒 颐 眯 落 影 傈 酝 伙 评 言 氢 揩 七 予 常 震 源 蓖 佣 伯 扼 埂 候 砂 镐 巩 乓 铂 盆 许 茹 神 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 说明: (1) 结构体声明描述了结构体的组织形式,但在编译时并不为 它分配存储空间。 (2

6、) 结构体的成员可以是简单变量、数组、指针、结构体或共 用体等。 (3) 结构体不可嵌套定义,但可以嵌套使用,例如: struct date int day; char month4; int year; ; struct student long int num; char name20; char sex; struct date birthday; /* 结构体成员是另一种结构类型,结构体在此嵌套 */ char *addr; ; 怪 层 另 湛 会 库 屡 意 板 琶 想 计 调 窄 练 盘 耗 梧 轩 颓 西 绎 的 十 元 萧 陡 乘 哼 菩 翼 婴 C 语 言 程 序 设 计 第

7、 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 numnamesexbirthdayaddr daymonthyear 嵌套结构体student的逻辑结构 (4) 结构体声明可以在函数内部,也可以在函数外部。 (5) 定义结构体类型时,注意不能遗漏最后的分号。 饿 俩 缺 萤 赚 邱 晕 鸿 红 箍 罗 箕 豢 廉 径 披 憋 朔 灾 腻 搞 豫 实 盆 漓 骇 侵 切 人 辖 顽 惕 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.1.3 结构

8、体变量 一、结构体变量的定义 可以采取以下三种方法定义结构体类型变量。 1在声明结构体类型的同时定义变量。例如: struct student long int num; char name20; char sex; int age; float score; s1,s2,s3; 擒 雪 孝 厌 恍 寸 透 建 线 驼 资 咎 贡 韧 隙 咨 篆 拢 渴 峙 终 熄 溜 蚊 淬 抹 鞍 汐 好 衍 棵 驭 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 声明结构体类型的同时定义结构体变量的一般形式为: st

9、ruct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; 变量名,变量名,变量名m; 特点:定义一次结构体变量之后,在该定义之后的任何位 置仍可用该结构体类型来定义其它结构体变量。 胚 钨 暇 寺 塘 侨 思 扒 栏 晶 条 另 玖 危 蔷 字 叔 抨 帛 庆 爱 距 坡 聋 缴 府 帮 杰 国 故 七 纹 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 2直接定义结构类型变量 例如: struct long int num; char name20; char sex; int

10、 age; float score; stu1,stu2,stu3; 直接定义结构体变量的一般形式为: struct 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; 变量名,变量名,变量名m; 特点:由于在struct后不出现结构体名 ,故不便于在源程序的其他地方定义 该类型的新变量。 烬 晰 畏 胶 收 仓 盆 埂 噪 税 仇 穷 丽 偏 辕 沽 葵 阶 韧 斧 锄 盟 翔 刺 潭 蔫 字 枷 盔 起 硕 拘 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 3先声明结构体类型再定义变量

11、名 例如: struct student long int num; char name20; char sex; int age; float score; ; struct student stu1,stu2,stu3; 笺 分 吝 朗 侵 伯 井 陛 些 泪 晌 娟 曙 愤 悦 榴 赛 掸 朴 堡 楔 非 虐 蹈 遇 必 羞 语 角 再 苗 拇 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 一般形式为: struct 结构体名 类型名1 成员名1; 类型名2 成员名2; 类型名n 成员名n; ; s

12、truct 结构体名 变量名,变量名,变量名m; 特点:在该定义之后的任何位置,不仅可用该结构体类型 来定义其他结构体变量,而且可把其结构体声明部分作为 文件存放起来,这样就可借助于include命令把它复制到任 何源文件中,用以定义同类型的其它结构体变量。 荡 拍 包 彻 材 以 畸 瓜 锁 稀 斤 冰 醇 童 缮 僻 泣 嚎 辱 滚 殃 攀 峡 拍 度 栽 中 咏 顿 讳 棍 邵 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 注意: (1) 定义一定要在结构体声明之后或与结构体声明同时进行,对 尚未声

13、明的结构体类型,不能用它来定义结构体变量。 (2) 存储空间分配是按照其对应的各成员项的定义顺序进行的。 (3) 同一结构类型的每个结构体变量,存储空间的大小都相同, 是各成员项所占空间之和。例如: sizeof(stu1)的值为31; sizeof(struct student)的值为31; sizeof(float)的值为4。 (4) 结构体变量中的成员可以单独使用,地位与一般变量相同。 (5) 结构体变量一般不用register型。 须 拙 索 银 蓑 吩 假 甸 瘟 壮 泞 触 雏 盯 靡 述 钓 绳 酱 朔 劈 要 嚼 滓 滦 瞩 杖 畴 所 瑰 勿 炉 C 语 言 程 序 设 计

14、第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 二、结构体变量的初始化 struct student long int num; char name20; char sex; char addr20; stu1,stu2=89031,Lilin,M,123 Beijing Road; /* 结构体变量stu2初始化 */ 腹 颗 桩 猎 淑 试 二 嚏 重 泣 畦 揍 酗 寂 蛀 骡 赔 鸳 召 墙 睬 共 斡 赦 赶 伪 煌 鞘 秽 骗 靴 倾 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序

15、设 计 第 8 章 结 构 体 和 共 用 体 三、结构体变量的引用 形式: 结构体变量名成员名 #include void main() struct student long int num; char name20; char sex; char addr20; stu1,stu2=89031,Lilin,M,123 Beijing Road; /* 结构体变量stu2初始化 */ printf(NO.:%ldnname:%snsex:%cnaddress:%sn,stu2.num,stu2.name,stu2.sex, stu2.addr); stu1=stu2; /* 两个相同类型的

16、结构体变量之间可以进行赋值操作 */ printf(NO.:%ldnname:%snsex:%cnaddress:%sn,stu1.num,stu1.name,stu1.sex, stu1.addr); 蝴 疤 齿 新 肮 辕 烹 只 岗 短 芳 昆 刺 虾 彼 隆 延 造 陌 亲 似 叮 粕 韵 碳 辗 蝇 狞 劈 拒 矣 秸 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 注意: (1) 不能将一个结构体变量作为一个整体进行输入和输出。 例:scanf(%ld%s%c%s, printf(NO.:%ld

17、nname:%snsex:%cnaddress:%sn,stu2 ); 只能对结构体变量中的各个成员分别进行输入和输出,如: stu1.num=89031; strcpy(stu1.name,Liling); scanf(%c%s, (2) 对结构体中的成员,可以单独使用,它的作用与地位相 当于普通变量。 stu1.num =stu2.num; (3) 结构体变量可以进行整体赋值,但不能整体进行比较。 下列语句是错误的: if(stu1stu2) printf(name:%sn,stu1.name); (4) 如果成员本身又属一个结构体类型,则要逐级地找到最 低的一级成员。只能对最低级的成员进

18、行存取。 婿 浸 影 违 柏 坞 灯 绵 萍 奇 牡 点 傍 涸 宣 摊 迟 皋 傣 仍 朋 辜 戒 旬 冕 痴 自 必 羡 柱 缘 攻 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.2 结构体数组 8.2.1 结构体数组的定义 1定义结构体类型后定义结构数组。例如: struct student long int num; char name20; char sex; int age; float score; ; struct student stu5; 役 桃 讹 戚 刷 篙 钻 窘 倡 搏 影

19、 断 栖 油 锗 删 杀 铃 熬 洲 词 欲 酒 曲 哼 译 董 躲 碌 钟 蜘 刷 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 2直接定义一个结构数组 。 例如: struct student long int num; char name20; char sex; int age; float score; stu5; 或 struct long int num; char name20; char sex; int age; float score; stu5; numnamesexagescor

20、e stu0 stu1 stu2 stu3 stu4 结构体数组的逻辑结构 旷 办 累 婚 登 浊 淮 蛋 兵 负 叙 断 颁 浑 缴 蹋 万 翘 侩 泡 鲸 淑 靛 练 踌 模 尤 酚 脱 厢 拘 菱 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.2.2 结构数组的初始化 格式: struct 结构体名 结构数组名元素个数=初始数据; struct student stu3=80101,Lilin,M,18, 80102,Wanglan,F,19,80103,Zhangjun,F,20; struc

21、t student stu =80101,Lilin,M,18, 80102,Wanglan,F,19,80103,Zhangjun,F,20; 厅 巳 蛇 戏 空 枣 非 竞 护 淘 锗 稻 圣 腕 醉 获 甥 卑 薄 热 惫 衫 乃 究 兑 烤 畜 危 涯 妥 挣 挂 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 struct student long int num; char name20; char sex; int age; stu = 80101, Lilin,M,18, 80102, Wa

22、nglan,F,19, 80103, Zhangjun,F, 20; 2052 2031 2051 2027 结构数组stu在内存中的分配情况 stu0 stu1 stu2 2000 2027 2054 num name sex age 亥 车 砍 够 阑 倪 彪 隙 似 掏 慢 茶 贰 歼 氦 铆 矮 惩 经 助 猾 砸 精 抓 茄 佑 烽 不 拙 泵 又 澳 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.2.3 结构数组元素的引用 形式: 结构体数组名下标成员名 例如 stu0.num=80101

23、; strcpy(stu0.name,Lilin); 吓 渗 炭 以 麻 仿 秤 咖 肮 虫 碟 址 膘 茫 匙 蹭 骋 听 娄 礁 柿 城 卿 杆 整 桔 没 桂 疗 吁 佯 买 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 例:统计全班男女生人数及1990年以后(含1990年)出生 的人数。 #include string.h #include stdio.h void main() struct stud /* 定义一个结构stud ,包含3个成员 */ char name20;/* 姓名 */ c

24、har sex;/* 性别 */ int year; /* 出身年份 */ ; struct stud class100; /* 定义一个结构数组 class */ int m_num=0,f_num=0,total90=0,class_num,i ; printf(Please enter class_num: ); scanf(%d, /* 输入班级人数 */ for(i=0;iclass_num;i+) /* 输入同学信息 */ printf(nPlease enter name/sex/year: ); scanf(%s %c %d,classi.name, 掏 赫 腥 塞 燥 酬 以

25、 煽 趣 抄 故 轨 惑 纽 端 漓 拥 态 凛 裳 灸 梯 诽 尊 握 混 慰 裙 固 圾 佑 咸 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 for(i=0;iclass_num;i+) /* 输出班级同学信息 */ printf(n%-10s%c%6d,classi.name,classi.sex,classi.year); for(i=0;i=1990) total90+; /* 统计90以后出生的人数 */ printf(n number of boy: %d,m_num); printf(n

26、 number of girl: %d,f_num); printf(n number after of 1990: %d,total90); 测试数据与运行结果: 输入:Please enter class_num: 3 Please enter name/sex/year: Zhanglin m 1988 Please enter name/sex/year: Wangpin f 1990 Please enter name/sex/year: Liutao M 1989 输出:Zhanglin m 1988 Wangpin f 1990 Liutao M 1989 number of b

27、oy: 2 number of girl: 1 number after of 1990: 1 兰 虞 岩 欲 孔 悟 拓 软 愚 稼 囤 敝 鞘 育 俱 深 欠 铬 屏 倍 死 辣 畦 霓 阉 倍 共 柬 咕 逼 甚 轻 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.3 结构指针 8.3.1指向结构体变量的指针 形式: struct 结构体名 *结构指针名; 例: static struct student *p; 结构指针在定义时也可以初始化。 例: struct student long int

28、 num; char name20; char sex; int age; float score; stu1,*p= 怔 幌 句 涸 权 枕 阁 帮 苑 钓 是 瞧 涨 矢 惠 顷 湾 官 茫 滑 赶 券 合 让 淮 们 梧 耙 倔 弃 病 果 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 用指针引用结构体成员的一般形式: (*结构指针名).成员名 或 结构指针名-成员名 设有类型、变量声明及初始化如下: struct date int day; char month4; int year; birth

29、day,*sp= 则 (*sp).day、(*sp).month、sp-day、sp-month均是合法。 其中 (*sp).day和sp-day等效 (*sp).month和sp-month等效。 卯 餐 扇 爵 闸 贪 仙 瞪 屑 吱 恫 报 蹄 官 吕 泊 惯 诗 镰 腕 邑 洛 逐 枉 铜 佃 卑 薪 逮 硒 剁 邻 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 例: #includestdio.h #includestring.h void main() struct stud char *nu

30、m; char name20; float score; ; struct stud stu1,*sp; sp= sp-num=04780601; strcpy(*sp).name,Liling); stu1.score=90.0; printf(nstudent No.: %snname: %snscore: %.1f,sp-num,sp-name,sp-score); printf(nstudent No.: %stname: %stscore: %.1f, (*sp).num, (*sp).name, (*sp).score); printf(nstudent No.: %stname:

31、 %stscore: %.1f, stu1.num,stu1.name,stu1.score); 04780601 Liling 90.0 sp 指向结构体变量的指针 中 原 危 班 僻 钢 徒 瘩 挚 依 方 定 衣 兹 倦 太 娥 咸 召 朵 赐 俘 斩 琼 遇 竹 萤 垒 金 喝 敝 奸 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 注意: (1) *sp两侧的括号不可省,因为成员运算符“.”优先于“*”运算 符,*sp.num就等价于*(sp.num)了。 (2) 由于运算符“-”、“.”、“()

32、”和“”的优先级最高,其结合性 相同。例如: +sp-num等价于:+(sp-num)即成员值加1。 (+sp)-num:先执行sp=sp+1,再执行sp-num(注意sp的 值已经改变)。 sp+-num或(sp+)-num:先存取sp-num,再执行 sp=sp+1。 sp-num+:先存取sp-num,再使成员值加1。 精 荔 呸 彰 懂 镐 幢 帝 尾 扑 疡 抚 镰 川 藉 苏 度 蕊 雁 欢 渍 绥 逾 疟 梯 娠 榜 招 永 疗 硼 笔 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.3.

33、2 指向结构数组的指针 #include struct student long int num; char name20; char sex; int age; stu3=80101,Lilin,M,18,80102,Yanglan,F,19, 80103,Zhangjun,F,20; void main() struct student *p; /* p是指向struct student型数据的指针变量 */ printf(nNo.tNamettsextagen); for(p=stu;pnum,p-name, p-sex, p-age); 运行结果: No Name sex age 80

34、101 Lilin M 18 80102 Yanglan 19 80103 Zhangjun 20 赁 柒 平 惜 岳 酶 锻 锋 区 苦 仇 沤 毛 治 呼 爽 欧 级 碉 惹 易 者 酷 角 垛 腺 妹 举 锤 杆 浇 孝 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 ppp stu2 stu1 stu0 指向结构数组的指针及其移动示意 柿 跳 尔 辱 键 研 泽 侦 嫌 街 敞 时 鱼 呆 砂 灿 削 埃 智 钩 长 恍 硼 硕 计 薯 侄 宰 擞 碧 唁 疮 C 语 言 程 序 设 计 第 8 章

35、 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.3.3 结构体变量做函数参数 1用结构体变量的成员作参数。 例如,用stu1.num或stu2.name作函数实参, 将实参值传给形参,“值传递”方式。 2用结构体变量作实参。 采用“值传递”方式,将结构体变量所占的内存单 元的内容全部顺序传递给形参。 曰 威 阴 衙 画 忙 袭 嗓 绑 品 梅 圃 笆 缴 娟 灸 原 歉 碘 旧 平 娘 悟 显 印 聋 掉 枢 瘫 灼 破 靶 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构

36、体 和 共 用 体 例:有一个结构体变量stu1,内含学生学号、姓名、数学和 英语两门课的成绩。要求在main函数中赋值,在函数 print中将它们打印输出。 #include #include struct student long int num; char name20; float math; float eng; ; void main() void print(struct student); struct student stu1; stu1.num=80601; strcpy(stu1.name,Liling); stu1.math=80.5; stu1.eng=90; pri

37、nt(stu1); void print(struct student stu) printf(%ldn%sn%.1fn%.1fn , stu.num,stu.name,stu.math,stu.eng); 烯 缔 婆 钥 漠 顺 体 袭 赎 琶 脚 梗 明 批 铁 爷 虎 策 汰 孜 超 隆 杆 铸 筐 侮 臆 放 耀 盾 饮 日 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 3. 结构变量(或数组)的地址作为实参传递给形参 例:将上例改用指向结构体变量的指针作实参。 #include #include

38、 #define FORMAT %ldn%sn%.1fn%.1fn struct student long int num; char name20; float math; float eng; ; void main() struct student stu1=80601, Liling, 80.5, 90 , *sp= void print(struct student *); /* 形参类型修改成指向结构体的指针变量 */ print(sp); /* 也可表示为 print( 实质都一样即实参为stu1的起始地址 */ void print(struct student *p) /*

39、形参类型修改了 */ printf(FORMAT, p-num, p-name, p-math, p-eng); /* 用指针变量调用各成员之值 */ printf(n); 谎 糟 谁 酪 希 淮 斩 肖 钟 岂 法 晦 堰 馅 致 涩 孽 外 欧 几 练 纂 钧 萝 画 示 胯 境 父 尧 巾 粕 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 stu1 num name math eng spp 结构体指针作函数参数 刊 踏 铆 缅 咕 历 程 或 腐 碱 死 玩 乓 陆 炯 咱 手 链 呵 蛋 声 畅

40、 角 磋 帧 斜 缅 庭 聋 柠 什 绝 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.4 结构数组应用举例 例: 候选人得票的统计。设有3个候选人,要选择其中的一人当班长。 从键盘上输入得票的候选人的名字,输出最终的得票结果。 #includestdio.h #includestring.h struct person char name10; int count; leader3=Chen,0,Yang,0,Zhou,0; void main() int i,j; char name20; /*

41、存放被选中候选人的姓名 */ for (i=1;i=10;i+) scanf(%s,name); for(j=0;j3;j+) if(strcmp(name,leaderj.name)=0) leaderj.count+; printf(n); for(i=0;i成员名 合 并 椽 寇 羚 沉 祭 振 载 创 剥 秒 蕴 风 奋 谁 拙 讣 疫 蟹 探 防 嫁 儿 侍 阁 崖 押 肮 崔 哲 另 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 #includestdio.h union mydata int

42、 i; char ch; float f; data1,*p= main() data1.i=20; printf(%d,%d,%dn,data1.i,p-i,(*p).i); data1.ch=M; printf(%c,%c,%cn,data1.ch,p-ch,(*p).ch); data1.f=80.5; printf(%f,%f,%fn,data1.f,p-f,(*p).f); 阐 军 递 追 向 娩 席 霉 挤 冲 另 慧 鸣 悔 飘 缉 遗 焕 槐 校 铭 雏 噎 吗 务 踞 其 扛 舒 貌 久 溯 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程

43、序 设 计 第 8 章 结 构 体 和 共 用 体 8.5.2 使用共用体变量应注意的问题 (1) 参与运算或操作的是共用体变量的某个成员,不能是共 用体变量整体 例如:printf(%d, data1); 是错误的。应写成“printf(”%d“, data1.i);”或 “printf(%c, data1.ch);”等。 (2) 同一个内存段可以用来存放几种不同类型的成员,但在 每一瞬时只能存放其中一种,而不是同时存放几种。例 如: data1.i=20; data1.ch=M; data1.f=80.5; 在完成以上3个赋值运算以后,只有data1.f是有效的 破 仪 盈 赚 力 刮 汤

44、 瘟 盟 雁 宪 怒 埃 视 僳 诗 菏 劳 害 舟 佣 合 迈 爬 桩 迢 琵 吟 义 礼 檬 领 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 (3) 共用体变量的地址和它的各成员的地址都是同一地址 (4) 不能在定义共用体变量时对它初始化,也不能对共用体 变量名赋值。例如,下面这些都是不对的: union int i; char ch; float f; a=2, m, 6.5; /* 不能初始化 */ a=2; /* 不能对共用体变量赋值 */ (5) 不能把共用体变量作为函数参数,也不能使函数带

45、回共 用体变量,但可以使用指向共用体变量的指针(与结构 体变量这种用法相仿)。 凯 负 院 橙 玫 颜 郡 诗 美 乓 蚤 呛 窍 扔 色 凳 纤 蠢 使 冷 布 辆 都 彭 步 警 喻 盂 批 巳 试 蚊 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 8.6 枚举 8.6.1 枚举类型的概念及其定义 枚举类型的概念 列举出所有可能的取值的一种数据结构。 枚举类型的定义 enum枚举名枚举元素1,枚举元素2,枚举元素n; 如:enum weekdaysun, mon, tue, wed, thu, fri

46、, sat; enum weekday weekend, workday; 或:enum weekdaysun,mon,tue,wed,thu,fri,satworkday; 或: enum sun,mon,tue,wed,thu,fri,satworkday; 撑 哮 湛 炼 燥 萝 胶 醇 朱 昧 妄 膨 葡 箱 渠 惭 摩 归 内 渝 耶 功 鹿 缓 雅 埋 采 醛 痒 臼 配 树 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 枚举类型变量的赋值和使用 (1) 枚举值是常量,不是变量; sun=5;

47、 mon=2; sun=mon; 均是错误的。 (2)枚举类型是有序数据类型; 如:weekday中,sun为0,mon为1,sat为6。 再如: main() enum weekday sun,mon,tue,wed,thu,fri,sata,b,c; a=sun; b=mon; c=tue; printf(“%d,%d,%d”,a,b,c); 运行结果为:0,1,2 矽 椿 崩 侠 枣 觅 挝 澜 敢 也 拇 篓 廉 肇 顾 腐 镁 谎 叠 寡 拳 湛 郑 铰 魔 浮 烟 乐 茫 阴 砍 惩 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 C 语 言 程 序 设 计 第 8 章 结 构 体 和 共 用 体 (3) 可改变枚举元素的值; enum weekdaysun=7, mon=1

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1