




已阅读5页,还剩42页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第九章结构 结构结构数组结构指针链表位运算自定义类型 学号 姓名 性别 出生地 出生年 出生月 出生日 数学 物理 程序设计 结构 同一个数据项的若干成分构成的一个整体 例如 学生档案 每个学生有学号 姓名 性别 出生地 出生年月 学业成绩等 9 1结构 9 1 1结构的定义structstudent longintnum charname 20 floatscore 定义一个结构类型 structstudent 9 1 2结构变量的定义 1 先定义结构类型 再定义变量structstudent longintnum charname 20 floatscore structstudentstu1 stu2 2 定义结构类型的同时定义变量structstudent longintnum charname 20 floatscore stu1 stu2 3 不指定类型名 只定义变量struct longintnum charname 20 floatscore stu1 stu2 9 1 3结构变量的初始化 只有全局变量或静态变量才能初始化 staticstructstudentstu2 200012 Li 94 structstudent longnum charname 20 floatscore stu1 200011 Zhang 85 9 1 4结构变量的使用 1 结构类型变量的整体引用 1 不能整体输入输出 但相同类型的变量可以互相赋值printf ld s f stu1 非法stu2 stu1 合法 2 可以引用结构体变量的地址printf x 输出stu1的首地址 2 结构变量中分量的引用structstudent longintnum charname 20 floatscore stu1 stu2 1 结构变量 分量stu1 num 9901 printf s stu2 name 2 结构变量中的分量可以依据它的类型进行各种运算x stu1 score strcpy stu1 name Wang 3 可以引用结构变量中的分量的地址scanf ld 9 2结构数组 一个结构变量只能存放一个学生的资料 若班上有20个学生 需要用结构数组 即 数组中的每个元素都是结构类型 9 2 1定义structstudent longintnum charname 20 floatscore stu 20 9 2 2初始化structstudent longintnum charname 20 floatscore stu 20 200011 Zhang 85 200012 Li 90 9 2 3引用structstudent longintnum charname 20 floatscore stu 20 stu 0 numstu 0 namestu 0 score 程序举例 例1 输入某班30位学生的姓名及数学 英语成绩 计算并输出每位学生的平均分 structstudent charname 10 intmath eng floataver voidmain structstudents 30 inti for i 0 i 30 i scanf s d d s i name 输入某班30位学生的姓名及数学 英语成绩 计算并输出每门课程的平均分 voidmain structstudents 30 inti floataver m 0 aver e 0 例2 for i 0 i 30 i scanf s d d s i name 输入30位学生的姓名及数学 英语成绩 输出平均分最高的学生的姓名及其数学和英语成绩 structstudent charname 10 intmath eng floataver 例3 voidmain structstudents 30 inti sub for i 0 i 30 i scanf s d d s i name s i aver s i math s i eng 2 0 sub 0 for i 1 is sub aver sub k printf s d d n s sub name s sub math s sub eng 9 3结构指针 9 3 1定义structstudent longintnum charname 20 floatscore structstudentstu1 ptr ptr 9 3 2结构指针的使用 structstudentstu1 ptr 2 ptr num 200011 ptr num 200011 ptr score 85 strcpy ptr name Zhang 当ptr stu1时stu1 num ptr numptr num三者等价 ptr num 等价于 ptr num ptr num等价于 ptr num ptr num 9 4链表 9 4 1结构的嵌套定义structday inty intm intd structstudent longintnum charname 20 structdaybirthday floatscore structday inty intm intd structstudent longintnum charname 20 structdaybirthday floatscore stu1 stu2 或 structstudent longintnum charname 20 struct inty m d birthday floatscore stu1 stu2 structstudent longintnum charname 20 struct inty m d birthday floatscore stu1 9901 Zhao 1980 10 30 80 stu2 stu2 birthday y 1979 stu2 birthday y 1 stu2 birthday y 20 9 4 2单向链表 structstudent longintnum floatscore structstudent next 结构的递归定义 1 动态内存分配函数 1 void malloc unsignedsize 功能 在内存的动态存贮区中分配一块长度为size的连续空间 返回值 指针 存放被分配内存的起始地址 若未申请到空间 则返回NULL 0 void 指向任何类型的数据 在使用时 要进行强制类型转换 例如 int malloc sizeof int structstudent malloc sizeof structstudent 2 voidfree void ptr 功能 释放由malloc 申请的动态内存空间 ptr存放该空间的首地址 返回值 无 p structstudent malloc sizeof structstudent free p 2 建立链表 编写一个函数 要求用单向链表建立学生档案 从键盘输入数据 如果学号为0 输入结束 并返回链表的头指针 structstudent longintnum floatscore structstudent next structstudent head tail p head tail NULL structstudent head tail p head tail NULL size sizeof structstudent p structstudent malloc size p head tail tail head tail NULL inputnum scorewhilenum 0p structstudent malloc sizeof size p num num p score score p next NULLyhead NULLnhead ptail next ptail pinputnum score include stdio h structstudent intnum floatscore structstudent next structstudent creat main structstudent head head creat structstudent creat structstudent head tail p floatscore intnum size sizeof structstudent head tail NULL scanf d f 3 遍历链表 ptr numptr score for ptr head ptr NULL ptr ptr next printf ld f ptr num ptr score ptr ptr next include stdio h structstudent intnum floatscore structstudent next structstudent creat voidprint structstudent head main structstudent head head creat print head voidprint structstudent head structstudent ptr if head NULL printf nNolist n return printf nlist n for ptr head ptr ptr ptr next printf d f n ptr num ptr score 4 对链表的删除操作 ptr2 ptr1 nextptr1 next ptr2 next free ptr2 ptr2 ptr1 next 4 对链表的插入操作 s next ptr nextptr next s先连后断 9 5位运算 9 5 1位运算符1 位逻辑运算符 按位取反 与 同级 单目右结合 按位与 按位异或相同取0 不同取1 按位或 1 位逻辑运算符 按位取反 按位与 按位异或相同取0 不同取1 按位或x 00000000000000000y 30000000000000011 x y0000000000000000 x y0000000000000011x y00000000000000111010 0101 1111 注意区分 和 和 x y得0 x y得1 2 位移位运算符 对操作数右移给出的位数x 3将x向右移3位00111010 300000111 3 复合位赋值运算符 例 a b相当于a a ba 2相当于a a 2 9 6自定义类型 用typedef定义新的类型名代替已有的类型旧新例1 typede
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源行业反垄断法规与技术专利保护报告
- 聚焦2025年:新能源行业协同创新机制在新能源国际合作中的应用报告
- 2025北京石油管理干部学院春季高校毕业生招聘5人模拟试卷附答案详解(完整版)
- 2025广西崇左天等县宁干乡卫生院招聘中医科专业技术编外工作人员2人考前自测高频考点模拟试题附答案详解(突破训练)
- 2025年吉林工商学院公开招聘博士人才(3号)(24人)考前自测高频考点模拟试题及答案详解(夺冠)
- 2025广西百色市那坡县百南乡招聘村级防贫监测员1人考前自测高频考点模拟试题及答案详解(易错题)
- 2025福建漳州市南靖县住房和城乡建设局招聘1人模拟试卷及参考答案详解1套
- Unit1Friendship教案译林版八年级英语上册
- 货车从业资格证在线考试及答案解析
- 婴儿护理基础专业知识题库及答案解析
- 三相异步电动机的调速
- 新概念第一册单词默写表
- 近三年投标没有发生过重大质量安全事故的书面声明
- 成人高血压食养指南(2023年版)
- 【教学设计】圆锥曲线的方程 大单元教学设计
- GB/T 27689-2011无动力类游乐设施儿童滑梯
- GB/T 1885-1998石油计量表
- GB 7231-2003工业管道的基本识别色、识别符号和安全标识
- 医疗机构财政电子票据管理平台建设方案
- 正视青春期孩子的逆反心理专家讲座
- 食品安全主题班会课件
评论
0/150
提交评论