复杂构造数据类型.ppt

第五章 复杂构造数据类型,2/28,第五章 复杂构造数据类型,5.1 结构体 5.2 共用体 5.3 枚举类型,3/28,5.1.1 结构体的引出及使用,每条记录中数据的数据类型不相同,如何表示如下的数据信息,结构体是由一些逻辑相关,但数据类型不同的分量组成的一组数据。,4/28,结构体的定义,注意不要忘了分号,struct 结构体类型名 数据类型 成员名1; 数据类型 成员名2; 数据类型 成员名n; ;,用户定义 的标识符,说明定义了结构体类型,仅仅是定义了数据的组织形式,创立了一种数据类型,但并不会为这种结构体类型分配内存空间,只有定义了结构体变量,才会为变量分配空间。,例 struct student int num ; char name10 ; char sex; int age; int score ; char institute20; ;,5/28,定义结构体变量的方法 1 先定义结构体类型,再定义变量 struct student char name10 ; int age ; int s1 , s2 ; ; struct student st1, st2 ;结构体 类型定义,结构体 变量定义,内存中结构体变量占有一片连续的存储单元,其占用的字节数可用sizeof 运算符算出 printf“dn” , sizeofstruct student ; printf“dn” , sizeofst1 ; 结构体变量st1和st2各自都需要16个字节的存储空间,name age s1 s2,6/28,定义结构体变量的方法 2 定义结构体类型同时定义变量 struct student char name10 ; int age ; int s1 , s2 ; st1, st2 ; 3 直接定义结构体变量 struct char name10 ; int age ; int s1 , s2 ; st1, st2;,注意这里没有结构体类型名,这种方式有时使用并不方便,因此不建议大家采用,7/28,结构体类型可以嵌套定义,例 struct date int year ; int month ; int day ; ; struct stud char name10 ; struct date birthday ; int s1 , s2 ; ;,或 struct stud char name10 ; struct date int year ; int month ; int day ; birthday ; int s1 , s2 ; ;,8/28,结构体变量的引用 格式结构体变量名. 成员名,struct student char name10 ; int age ; int s1 , s2 ; ;,struct student st1 ; strcpyst1. name, “Mary” ; st1. age 21 ; st1. s1 78 ; st1. s2 86 ;,成员运算符,9/28,说明 结构体变量通常不能整体使用,不能整体输入、输出,只能对单个成员分别引用。但当结构体变量作为函数参数或赋初值时,可以整体输入;或者两个相同类型的结构体变量,如果一个已经赋值,可以对另外一个整体赋值。 例如果s1已被赋值,则可以s2 s1; 如果成员本身又属于一个结构体类型,则这个成员也不能整体赋值,要用若干个成员运算符引用,如前面的birthday成员本身又是date类型的变量,则需 stu1.birthday.month4; stu1.birthday.day5; 可以引用结构体变量成员的地址,也可以引用结构体变量的地址,要区分清楚。如 printf“x”, ,10/28,结构体变量的初始化,struct student char name10 ; int age ; int s1 , s2 ; st1“Mary”, 21, 78, 86;,struct stud char name10 ; struct date birthday ; int s1 , s2 ; ; struct stud st2 “John” , 1980 , 11 , 23 , 89 , 95 ;,struct student char name10 ; int age ; int s1 , s2 ; ; struct student st1; st1“Mary”, 21, 78, 86 ;,初始化,正确,这是赋值,错误 C不允许这么做,初始化,正确,11/28,结构体变量的输入和输出 C语言不允许结构体变量整体进行输入和输出,只能对结构体变量的成员进行输入和输出,例 gets st1. name ; scanf “ddd”, ,12/28,5.1.2 结构体数组的引出及使用,一个结构体变量只能存放一个学生的信息,对于多个学生的信息,可以使用一个结构体数组来存放,结构体数组的每个元素是一个结构体类型的变量 定义结构体数组的方法与定义普通数组的方法类似 结构体类型 数组名数组的长度;,13/28,结构体数组的定义及使用,1、定义结构体数组 1 先定义结构体类型 再定义结构体数组 struct student char name10 ; int age ; int s1 , s2 ; ; struct student st6;,2 定义结构体类型的同时定义结构体数组 struct student char name10 ; int age ; int s1 , s2 ; st6 ;,3 直接定义结构体数组 struct char name10 ; int age ; int s1 , s2 ; st6;,不提倡使用该方法,14/28,结构体数组的初始化 将每个数组元素的数据用花括号 括起来。,struct student char name10 ; int age ; int s1 , s2 ; ; struct student st3 “Mary”, 21, 78, 86, “Alex”, 20, 90, 80, “Mike”,19, 75, 68 ;,15/28,结构体数组的引用 引用某个数组元素的成员 例putsst0.name; printf“d,d”, st1.age, st1.s1; 数组元素之间可以整体赋值,也可以将一个元素赋给一个相同类型的结构体变量 例struct student st3“Mary”,21,78,86, “Alex”, . ; struct student x ; st2 st0 ; x st1 ; 输入和输出操作只能对数组元素的成员进行,16/28,例5-1按成绩对学生信息进行从高到底的排序,include define N 30 struct stud int n; char name10; int s; ;,void struct stud a int i ; for i0 ; iN ; i scanf“dsd”, ,void outputstruct stud a int i ; for i0 ; iN ; i printf“4d 10s 4dn”, ai.n, ai.name, ai.s ; ,注意ai.name前不加 struct stud temp; for i0 ; iN-1 ; i for ji1 ; jN ; j if ai.saj.s tempai ; aiaj ; ajtemp ; ,void main struct stud stN; st; sortst; outputst; 注意进行比较的是元素ai和aj的成绩成员s,但进行交换的是元素ai和aj,EG501.C,18/28,5.1.3 结构体与指针,指向结构体变量的指针 定义 struct student char name20 ; int age ; int s1 , s2 ; ; struct student stu , *p ; p ,成员的引用格式 结构体变量名.成员名 stu.Name *指针变量名.成员名 *p.age 指针变量名-成员名 p-s1,19/28,指向结构体数组的指针 定义 struct student a3 , *p ; 使用 forpa; pname; scanf“ddd”, ,20/28,5.2 共用体,概念 所谓“共用体”类型,是指使几个不同类型的变量共同占用同一段内存单元。 定义,union 共用体类型名 数据类型 成员名1; 数据类型 成员名2; 数据类型 成员名n; ;,例 union data int i; char ch; float f; ;,21/28,定义共用体类型的变量形式也有3种,同结构体类型,1、先定义类型,再定义变量 union student char name10 ; int age ; float s; ; union student st1, st2 ;,2、定义类型同时定义变量 union student char name10 ; int age ; float s; st1, st2 ;,3、直接定义共用体变量 union char name10 ; int age ; float s ; st1, st2 ;,22/28,共用体变量所占的内存空间 共用体变量所占内存的长度等于最长的成员的长度,而不是各成员的长度之和,这一点不同于结构体。 例上例所占字节数为10 共用体变量的引用 格式共用体变量. 成员名 例st1.name “zhang”; st1.age 20; st1.s 78.5;,23/28,共用体类型数据的特点 每一瞬时只能存放其中的一个成员,而不是同时存放几种,即其它成员不起作用,只有最后一个存放的成员的值有效,其他成员将失去原值。如上例中的变量st1只有最后一个成员值st1.s78.5是有效的。 共用体变量的地址和它的成员地址都是同一地址,即 char name20; float score1; double score2; union int class; char position10; catagory; mem20;,25/28,5.3 枚举类型,概念 枚举是指将变量的所有取值一一列举出来,变量的取值只限于列举出来的值的范围。该变量称之为枚举型变量,所列举的值叫做枚举元素(枚举常量)。 定义 enum 枚举类型名 枚举元素,枚举元素枚举元素n ; 例 enum weekdaysun, mon, tue, wed, thu, fri, sat ;,26/28,变量的定义 先定义类型,再定义变量 enum weekdaysun,mon,tue,wed,thu,fri,sat ; enum weekday day; 定义类型同时定义变量 enum weekday sun,mon,tue,wed,thu,fri,sat day; 直接定义共用体变量 enum sun,mon,tue,wed,thu,fri,sat day;,27/28,说明 C语言中枚举元素按常量处理,它们是有值的。它们的值是系统按其定义顺序自动赋予的 0、1、2、3、。 枚举元素的值也可以改变,但必须在定义时指定。 如enum weekday sun7,mon1,tue,wd,thu,fri,dat ; 如果定义时未指定值,则按顺序取默认值。 枚举元素是常量,不是变量,不能在定义以外的任何位置对它们赋值,如sun5是错误的 枚举值可用来做判断比较,如 ifdaysun ; ifdaymon dayfri 枚举变量取值只能是所列举的枚举元素,不能直接赋予一个整数值,如day2;,28/28,小结,掌握结构体的定义和引用 掌握结构体变量所占字节大小 掌握指向结构体变量的指针变量的用法 掌握共用体的特点及所占字节大小 掌握枚举类型的特点,

C语言复杂构造数据类型ppt,复杂构造数据类型.ppt相关推荐

  1. c语言程序设计课件第二章,c语言程序设计课件张元国 ISBN9787566300386 PPT第二章数据类型 运算符与表达式...

    1.第2章 数据类型.运算符与表达式,语言的数据类型 常量与变量 运算符与表达式 不同类型数据间的转换,2.1语言的数据类型,数据是计算机程序处理的所有信息的总称,数值.字符.文本等都是数据,在各种程 ...

  2. c语言中栈区运用原理形象图,C语言实现使用动态数组来构造栈结构

    我在面前一篇博客<C语言实现使用静态数组来构造栈结构>中使用了静态数组来模拟栈的操作.静态数组的大小是在代码中写死的.是存储在用户栈上面的,使用起来不灵活.在这篇博客中我会使用动态数组来构 ...

  3. c语言的运算符分类ppt,c语言的数据类型、运算符与表达式.ppt

    c语言的数据类型.运算符与表达式.ppt 第3章数据类型.运算符与表达式,预备知识 数据类型 常量与变量 不同类型数据间的转换 运算符和表达式3.0 预备知识 计算机中数的表示及进制转换 数码.基与权 ...

  4. 【C】C语言基础(包括:关键字、数据类型、输入输出)

    程序中的变与不变--变量与常量 标识符和关键字 标识符:用来标识程序中用到的变量名.函数名.类型名.数组名.文件名以及符号常量名的有效字符序列. 语法规则(部分): 标识符只能是由英文字母.数字和下划 ...

  5. c++: 移动构造/赋值 和 拷贝构造/赋值

    Copy Constructor vs. Assignment https://blog.csdn.net/u013904227/article/details/107441848 [阅读原文] 这篇 ...

  6. python语言数据类型_Python中的数据类型 | 萧小寒

    摘要 Python3中提供有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary(字典). 在这些数据类型中, ...

  7. c语言实战项目ppt,c语言程序设计与项目实践第5章.ppt

    <c语言程序设计与项目实践第5章.ppt>由会员分享,可在线阅读,更多相关<c语言程序设计与项目实践第5章.ppt(28页珍藏版)>请在装配图网上搜索. 1.第5章 分支结构程 ...

  8. c语言菜单程序循环结构举例,C语言程序设计课件 第4章 循环结构.ppt

    C语言程序设计课件 第4章 循环结构.ppt 循环嵌套应用举例 [例4.8]从键盘上输入n的值为5,编程打印具有如下规律的对称图形. @ @ @ @ @ @ @ @ @ @ @ @ @ 行号(i)空格 ...

  9. c语言在一个文件后面添加数据类型,c语言简单入门之简单运行和数据类型

    自学遇到前所未有的阻力了.没办法,只有去学习下底层的知识了.于是就学了下c语言,把过程记录下,方便自己复习之用! 初识c语言,什么也不知道,跟着老师敲代码就是,慢慢体会,这是我学习的笨办法,不会的先不 ...

最新文章

  1. 支付宝 APP支付(证书)方式遇到的问题和解决办法
  2. c++TCP的三次握手和四次挥手
  3. mysql删除表命令语句_MySQL增删改查语句命令(一)
  4. Spring Boot系列二 Spring @Async异步线程池用法总结
  5. 通过Dapr实现一个简单的基于.net的微服务电商系统(十二)——istio+dapr构建多运行时服务网格...
  6. kafka reset offset 手工重置offset
  7. Tree树 递归查询,显示成JSON格式
  8. android10下载更新功能,Android 10部分新功能曝光 感觉越来越暗黑
  9. wepy集成colorui 样式框架
  10. 小米浏览器导出html,小米浏览器离线视频如何导出 小米浏览器离线视频导出教程...
  11. 开源问卷工具LimeSurvey:1:概要与安装
  12. Cloudera Manager 5升级(官方翻译整理,企业级实战验证)
  13. 鸽哒im即时通讯源码
  14. 【教程】通过lothelper实现短信接收测试
  15. XSSFWorkbook 设置单元格样式_CVA高校精英计划第二弹:执行最佳操作,做好设置准备...
  16. 基于微信小程序的民宿酒店预订系统
  17. [墨者学院] Windows硬盘文件分析取证(新建的用户名)
  18. 小木虫为什么会有不好的用户体验?
  19. ICP许可证过期了还能补办吗
  20. 【python】解决给文件写入汉字,中文字符乱码问题

热门文章

  1. 【历史上的今天】9 月 12 日:世界上第一块集成电路诞生;QNX 操作系统开源;苹果推出 iPhone X
  2. 怎样降低计算机屏幕亮度,如何调低电脑屏幕亮度【解决步骤】
  3. Oasis montaj无法计算均衡重力异常
  4. docker logs 查看日志
  5. 网站页面上标签页小图标的添加方式
  6. photoshop基本的操作
  7. Android解决输入法自动弹出方法大全
  8. Failure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
  9. 自动控制原理(2) - 线性化和传递函数
  10. 超好看的樱花飘落网络科技官网源码