版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章结构和公共体,C语言大学实用教程,本章内容,结构和公共体(联合)类型的结构变量的定义,结构变量从结构数组到函数的转移,由结构数组实现的动态数据结构链表的概念和操作原理,从基本数据类型到抽象数据类型,二进制数在早期的机器指令和汇编语言中,数据对象由二进制数表示,没有类型的概念。基本数据类型在高级语言中引入了基本数据类型:整数、实数、字符等基本数据类型不能方便地解决所有问题。一些语言(比如PL/1)试图指定更多的类型,比如数组、树、栈等等,但是实践证明这不是一个好方法。用户构建他们自己的数据类型复合数据类型代表复杂的数据对象,典型的代表是“结构”,数组和指针也可以算作“结构”。抽象数据类型(
2、简称ADT)在复合数据类型的基础上,不断提高数据操作类的进度。思考一个问题,并在程序中表达一个人(姓名、年龄、性别)。如何表达?想展示不止一个人吗?如何通过计算机程序管理下列表格?表8-1一个学校学生成绩管理表,数组解,int studentId30/*最多可以管理30名学生,每个学生的学生编号由数组*/charstudentName3010的下标表示;charstudentSex302inter time of inter 30;/*入场时间用int */int计分计算机30表示;/*计算机原理课程分数*/国际英语30分;/*英语课成绩*/综合成绩30;/*数学课成绩*/int乐谱30;/*
3、音乐类分数*/,数组的解,int studentId30=1,2,3,4,5,6;CharstudentName3010=令狐冲、林平之、岳灵山、任盈盈;CharstudentSex302=男性、男性、女性、女性;inter time of inter 30=1999,1999,1999,1999;int scoreComputer30=90,78,89,78;积分英语30=83,92,72,95;int scoreMath30=72,88,98,87;积分音乐30=82,78,66,90;数组的解决方案,数据的内存管理模式,内存分配不集中,寻址效率不高。将初始值分配给数组时,这很容易发生。该
4、结构分散且难以管理。所需的内存分配图,结构的解决方案,结构STUDENT int studentID/*每个学生的序列号*/char学生名10;/*每个学生的姓名*/char学生each/*每个学生的性别*/IntTimeOfCenter;/*每个学生的注册时间*/IntScoreComputer;/*每个学生的计算机原理分数*/intscore英语;/*每个学生的英语成绩*/积分路径;/*每个学生的数学分数*/intScoreMusic;/*每个学生的乐谱*/;Struct STUDENT是struct STUDENT students4的类型。学生0。学生标识学生0。评分计算机它们都是变量
5、,通常称为结构的成员变量、用户定义的数据类型和结构:它们以统一的名称组织许多不同类型的密切相关和逻辑上相关的变量。也称为复合数据类型,这种类型的变量占据了存储单元公共体的不同部分:各种不同类型的相互排斥但逻辑上相关的变量被组织在一起。这种类型的变量占用相同的内存单元段,所以每次只有一个数据起作用。char name20迷人的性;国际年龄;浮动分数;char addr30;形成用于生成结构变量的模板。常规形式:结构名类型关键字成员名1;键入密钥成员名称2;键入关键字成员名称n;构成结构的变量称为结构的成员,也称为元素或字段。结构的定义只定义数据的形式,也就是说,它声明一个复杂的数据类型,并且不生
6、成任何变量。结构的定义,首先定义结构类型,然后定义变量名称,在定义类型的同时定义变量,并直接定义结构变量(没有结构名称出现),struct student student1,student2,结构学生整数;char name20迷人的性;国际年龄;浮动分数;char addr30学生1,学生2;结构整数;char name20迷人的性;国际年龄;浮动分数;char addr30学生1,学生2;定义结构变量,定义自己的类型名,struct student student1,student2/*有效*/学生1,学生2;/*这能行吗?*/struct学生整数;char name20迷人的性;国际年龄
7、;浮动分数;char addr30;typedef struct student STUDE;学生1,学生2;/*成功了!*/typedef为现有类型定义一个新名称(昵称,昵称)。STUD是struct学生类型的同义词。结构占用内存,双倍占用内存字节=8结构学生占用内存字节=?它是所有成员变量的内存总和吗?事实上,所有的数据类型都是从偶数地址存储在内存中的,结构所占用的实际空间通常是根据不同编译器和平台的机器字长来对齐的,对齐方式也会发生变化。我们可以使用sizeof来获取结构的大小,定义:构造学生内部学号;charstudentName10向学生收费4;结构日期时间中心;int scoreC
8、omputerint scoreEnglish积分数学;int scoreMusic;struct STUDENT stu30,结构数组,结构STUDENT intstudentIDcharstudentName10向学生收费4;结构日期时间中心;int scoreComputerint scoreEnglish积分数学;int scoreMusic;结构学生stu 30=1,令狐冲,男,1999,12,20,90,83,72,82,2,林平之,男,1999,07,06,78,92,88,78,3,岳灵山,女,1999,初始化,结构数组,结构指针,结构点x;int y;结构点pt;/*定义结构
9、变量*/结构点* ppt/*定义结构指针*/ppt=/*指向运算符*/第二个更常用,ppt,pt,thinking questions,struct pointint x;int y;struct rectstruct指针pt1结构点pt2;struct rect rt以下哪个表达式是合法的?Rt. pt1.x (* RP)。pt1.x RP-pt1.x rt-pt1.x所有的法律表达都是等价的吗?结构定义可以嵌套,结构数组的指针,struct STUDENT * ptpt=stu。stu0,stu1,stu2,pt,pt,stu3,example :洗牌和发牌模拟,一副扑克有52张牌,分为四
10、种花色:黑桃,红桃,梅花和方块7,8,9,10,杰克,皇后,国王设计了一种结构来代表一张牌,它由两部分组成:花色和正面:struct CARD char suit10充电面10;struct CARD card52/*按顺序存储扑克牌*/int result 52=70;/*存储洗发水卡结果,初始值可以是除051 */char *套装之外的任何值=碎屑、心形、梅花和直径;char *face=A,2,3,4,5,6,7,8,9,10,jack,Queen,King示例:洗牌和发牌模拟(P306),在发牌过程中,52张牌以随机顺序存储。算法步骤如下:生成一个051的随机数并将其放入结果中。I=i
11、 1如果i=51,则重复第一步,否则循环输出结果结束时会出现致命问题:重复第一步时,生成的随机数可能与前一个随机数相同,这意味着52张牌中会出现两个以上相同的牌,例如:洗牌和发牌模拟,解决方法是增加一步,判断新生成的随机数以前是否出现过,如果出现过,则放弃;如果之前没有出现,保持算法步骤:生成051的随机数m并将其放入结果I。判断结果之前是否出现过(result0resulti-1 1)。如果出现,请返回步骤1;如果没有出现,i=i 1如果i=51,重复步骤12,否则,结束循环输出结果,示例:洗牌和发牌模拟,算法缺陷:随着生成的随机数数量的增加,新的随机数越来越有可能与生成的随机数相同。高效算
12、法可能存在算法延迟的问题,它首先按照花色和牌面的顺序存储52张牌,然后在每个周期随机打乱它们。程序选择一个随机数J为051,然后将数组中的当前元素cardi与随机选择的元素cardj交换,例如,洗牌和发牌模拟,并使用结构数组作为函数参数char * suit=废料、红心、梅花、直径;char *face=A,2,3,4,5,6,7,8,9,10,jack,Queen,King/*功能功能:52张牌按黑桃、红桃、草花和方块的顺序排列,它们的面值按AK的顺序排列。函数参数:结构数组wCard,52个不同面值的卡片指针数组WCEAE,指向面值字符串指针数组wSuit,指向面值字符串函数返回值:Non
13、e */void fill card(结构卡片WCARD,char * WCEAE,char * WSU)为(I=0;i52(i ) strcpy(wCardi.suit,WSuiti/13);wFacei西部城市;I 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 I/13 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 3 i 0 1 2
14、3 4 5 6 7 8 9 10 11 12 0 1 2 3 4 5 6 7 8 9 10 11 11 11 12 0 1 2 2 2 3 4 4 4 4 5 4 5 7 9 10 11 12 0 1 3 4 6 7 8 9 10 11 12 0 1,使用结构指针作为函数参数/*函数函数:打乱52张卡片的顺序,函数参数:结构数组wCard,表示52张卡片。 函数返回值:无*/无效洗牌(结构牌* WCARD)在I,j;结构卡温度;对于(I=0;i52j=兰特;/* j=随机(52);TC库函数*/temp=WCardi;wCardi=wCardjwCardj=temp/*洗牌过程*/,示例:洗牌和发牌模拟,使用结构指针作为函数参数/*函数函数:输出发牌结果函数参数:结构数组wCard,表示有52张牌。函数返回值:内部无*/无效交易(结构卡* WCARD);对于(I=0;i52I )/*输出许可结果*/printf (s sn,wcardi。西装,wcardi。脸);例:洗牌和发牌模拟,结构和功能,结构的单个成员的单向值转移到功能转移,功能中结构内容的修改不影响原结构的单向值转移到功能转移结构的完整结构,功能中结构内容的修改不影响原结构,开销高。结构数组或结构指针将结构的第一个地址作为函数参数,不仅可以提高效率,还可以修改结
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年芯片封装材料RoHS与REACH环保合规要求
- 2026年低空旅游地面保障条件:停机坪 机库 安检设施配置标准
- 2026年融资租赁服务减轻养老机构家庭用户机器人采购负担
- 2025年临床执业医师《妇产科》练习题
- 电商公司运营主管面试技巧
- 汽车行业研发部门高级工程师的面试指南
- 中国平安保险面试经验
- 餐饮行业食品安全管理与监督研究
- 房地产企业行政岗位面试全攻略
- 工业控制系统信息安全管理与防护策略研究报告
- GB/Z 132-2025航空航天电气要求套管和模缩套飞机用标准清单
- 2026年毛笔书法六级题库及答案
- 全屋定制培训课件
- 焊接作业现场应急处置方案
- 团播合作协议合同
- 派出所改造工程施工技术组织设计
- DB34∕T 5225-2025 风景名胜区拟建项目对景观及生态影响评价技术规范
- 2026年苏州工业职业技术学院单招职业技能测试必刷测试卷附答案
- 萨克斯独奏回家教案
- Unit5OldtoysPartBLet'stalkLet'slearn(课件)-人教PEP版英语三年级下册
- 津17SZ-9 天津市市政基础设施工程施工图设计审查要点 热力篇
评论
0/150
提交评论