版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、关于结构体共用体和用户定义的类型第一张,PPT共四十四页,创作于2022年6月结构体:是一种自定义 的 构造数据类型。用途:把不同类型的数据组合成一个整体。struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .;成员类型可以是基本型或构造型struct是关键字,不能省略合法标识符可省:无名结构体14.1 结构体类型定义:第二张,PPT共四十四页,创作于2022年6月例 struct student int num; char name20; char sex; int age; float score; char addr30; ; namenumsexagescoreaddr
2、2字节2字节20字节1字节4字节30字节.结构体类型定义描述结构的组织形式,不分配内存结构体类型的定义第三张,PPT共四十四页,创作于2022年6月例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2; 14.1.2 结构体变量1、结构体变量的定义(1)、先定义结构体类型,再定义结构体变量一般形式: struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .;struct 结构体名 变量名表列;第四张,PPT共四十四
3、页,创作于2022年6月(2)、定义结构体类型的同时定义结构体变量一般形式:struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .变量名表列;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; 第五张,PPT共四十四页,创作于2022年6月(3)、无名结构体定义一般形式:struct 类型标识符 成员名; 类型标识符 成员名; .变量名表列;例 struct int num; char name20; char sex; int age; f
4、loat score; char addr30; stu1,stu2; 用无名结构体直接定义第六张,PPT共四十四页,创作于2022年6月几点说明结构体类型与结构体变量概念不同类型:不分配内存; 变量:分配内存类型:不能赋值、存取、运算; 变量:可以结构体成员名与程序中变量名地位相同结构体可嵌套例 struct date int month; int day; int year; ; struct student int num; char name20; struct date birthday; stu;numnamebirthdaymonthdayyear例 struct student
5、 int num; char name20; struct date int month; int day; int year; birthday; stu;numnamebirthdaymonthdayyear第七张,PPT共四十四页,创作于2022年6月 2、结构体变量的初始化 和其他类型的变量相同,在定义结构体变量时赋初值形式一:struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .;struct 结构体名 结构体变量=初始数据;例 struct student int num; char name20; char sex; int age; char addr30; ;
6、 struct student stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;第八张,PPT共四十四页,创作于2022年6月形式二:struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .结构体变量=初始数据;例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第九张,PPT共四十四页,创作于2022年6月形式三:struct 类型标识符 成员名; 类型标识
7、符 成员名; .结构体变量=初始数据;例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”; 第十张,PPT共四十四页,创作于2022年6月3 结构体变量的引用引用规则 结构体变量不能整体引用,只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用成员(分量)运算符优先级: 1结合性:从左向右引用方式: 结构体变量名.成员名例 struct student int num; char name20; char
8、sex; int age; float score; char addr30; stu1,stu2; stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score; stu1.age+;例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; printf(“%d,%s,%c,%d,%f,%sn”,stu1); ()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”; ()例 struct stude
9、nt int num; char name20; char sex; int age; float score; char addr30; stu1,stu2; stu2=stu1; ( )例 struct student int num; char name20; struct date int month; int day; int year; birthday; stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例 struct student int num; char name20; char sex; int a
10、ge; float score; char addr30; stu1,stu2; if(stu1=stu2). ()第十一张,PPT共四十四页,创作于2022年6月指针引用结构体变量中数据指针变量名-成员名(*指针变量名).成员名struct student char name12; char sex; struct date birthday; float sc4;std,arr5,*ps; ps=&std; 引用结构体变量std中的sex成员,可写作: std.sex ps-sex (*ps).sex第十二张,PPT共四十四页,创作于2022年6月14.1.3 结构体数组1、结构体数组的定
11、义和初始化 定义:三种形式:形式一: struct student int num; char name20; char sex; int age; ;struct student stu2;形式二: struct student int num; char name20; char sex; int age; stu2;形式三: struct int num; char name20; char sex; int age; stu2;numnamesexagenumnamesexagestu0stu125B第十三张,PPT共四十四页,创作于2022年6月初始化:与其他类型的数组赋初值的方法相
12、同例 struct int num; char name20; char sex; int age; stu =,;顺序初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Lin”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 分元素初始化: struct student int num; char name20; char sex; int age; ;struct student stu =100,“Wang Li
13、n”,M,20, 101,“Li Gang”,M,19, 110,“Liu Yan”,F,19; 全部初始化时维数可省第十四张,PPT共四十四页,创作于2022年6月2、结构体数组引用引用方式: 结构体数组名下标.成员名stu1.age+; struct student int num; char name20; char sex; int age; str3;strcpy(,”ZhaoDa”);numnamesexagenumnamesexagestu0stu125B第十五张,PPT共四十四页,创作于2022年6月14.2 向函数传递结构体型数据 1.向函数传递结构体变量的
14、成员 普通变量作函数的实参的用法相同,形参与实参之间仍然是“值传递”的方式。2.向函数传递结构体变量 ANSI C允许函数之间传递结构体变量。若实参是结构体变量,那么形参也应是同类型的结构体变量。3.向函数传递结构体数组名若实参是结构体数组名,那么形参也应是同类型的结构体变量。第十六张,PPT共四十四页,创作于2022年6月#include typedef stuct int num; double mark; REC; void sub1(REC x)x.num=23;x.mark=81.5; void sub2(REC y)y0.num=12;y0.mark=77.5;main() REC
15、 a=16,90.0, b=16,90.0; sub1(a); printf(“A)%d,%5.1lfn”,a.num,a.mark); sub2(b); printf(“B)%d,%5.1lfn”,b0.num,b0.mark);结果: 16, 90.0 12,77.5第十七张,PPT共四十四页,创作于2022年6月读入五位用户的姓名和电话号码,按姓名字典顺序排序后,输出用户的姓名和电话号码.#include #include #define N 5typedef struct char name20; char num10; USER;void getdata(USER *sp); voi
16、d getsort(USER *sp); void outdata(USER *sp);第十八张,PPT共四十四页,创作于2022年6月main() USER spN; getdata(sp); getsort(sp); outdata(sp);void getdata(USER *sp) int i; printf(“Enter name & phone number:n”); for(i=0;iN;i+) gets(); gets(spi.num);void getsort(USER *sp) int i,j,k; USER temp;for(i=0;iN-1;i+) 第十
17、九张,PPT共四十四页,创作于2022年6月k=i; for(j=i+1;j0) k=j; temp=spk; spk=spi;spi=temp;void outdata(USER *sp) int i; printf(“after sort:n”); for(i=0;i成员名共用体变量名.成员名(*共用体指针名).成员名union data int i; char ch; float f; ; union data a,b,c,*p,d3;a.i a.ch a.fp-i p-ch p-f(*p).i (*p).ch (*p).fd0.i d0.ch d0.f共用体变量中起作用的成员是最后一次
18、存放的成员例 union int i; char ch; float f; a; a=1; () 不能在定义共用体变量时初始化例 union int i; char ch; float f; a=1,a,1.5; () 可以用一个共用体变量为另一个变量赋值例 float x; union int i; char ch; float f; a,b; a.i=1; a.ch=a; a.f=1.5; b=a; () x=a.f; ()第二十三张,PPT共四十四页,创作于2022年6月例 将一个整数按字节输出01100001 01000001低字节高字节0100000101100001ch0ch1运行
19、结果:i=60501ch0=101,ch1=141ch0=A,ch1=amain() union int_char int i; char ch2; x; x.i=24897; printf(i=%on,x.i); printf(ch0=%o,ch1=%on ch0=%c,ch1=%cn, x.ch0,x.ch1,x.ch0,x.ch1);第二十四张,PPT共四十四页,创作于2022年6月结构体与共用体区别: 存储方式不同struct node char ch2; int k;a;union node char ch2; int k;b;achkbchk变量的各成员同时存在任一时刻只有一个成员
20、存在联系: 两者可相互嵌套第二十五张,PPT共四十四页,创作于2022年6月例: 结构体中嵌套共用体 struct int num; char name10; char sex; char job; union int class; char position10; category;person2;第二十六张,PPT共四十四页,创作于2022年6月14.4 用typedef 定义已知类型功能:为已有数据类型命名类型定义简单形式: typedef type name;例 typedef int INTEGER;类型定义语句关键字已有数据类型名用户定义的类型名例 typedef float RE
21、AL;类型定义后,与已有类型一样使用例 INTEGER a,b,c; REAL f1,f2; int a,b,c; float f1,f2; 说明:1.typedef 没有创造新数据类型2.typedef 是定义类型,不能定义变量3.typedef 与 define 不同 define typedef预编译时处理 编译时处理简单字符置换 为已有类型命名 第二十七张,PPT共四十四页,创作于2022年6月14.5、结构体指针的使用1.链表。链表的建立、遍历、查找、插入、删除操作第二十八张,PPT共四十四页,创作于2022年6月链表 什么是链表?链表:链表中的一个元素称为一个结点,每个结点由两部分
22、组成:数据部分、指针。用指针把各个结点串联起来构成链表。分单向、双向链表.第二十九张,PPT共四十四页,创作于2022年6月链表为什么使用链表?1)不需要连续存储空间,可利用内存碎片;2)插入删除元素不需移动其它元素,处理速度快;3)动态分配存储空间,可以随意扩充表的容量。 链表结构体定义如下:void *malloc(unsigned size)函数:如: struct student int num; float score; struct student *next;*p1;p1=(struct student *)malloc(sizeof(struct student);第三十张,P
23、PT共四十四页,创作于2022年6月建立单链表的主要步骤为: 生成只含有头结点的空链表; 然后读取数据信息,生成新结点,将数据存放于新结点中, 插入新结点到单链表中 重复第二步,直到输入结束。 根据新结点插入到链表的位置的不同,建立链表的方式,分为在表尾插入的方法和在表头插入的方法。 第三十一张,PPT共四十四页,创作于2022年6月在链表中插入结点 设指针变量s指向待插入结点,假设指定结点为p。 插入到指定结点之后: snext=pnext; pnext=s; 插入到指定结点之前:首先要找到p的前驱结点q。 例9.8 s-next=p; q-next=s第三十二张,PPT共四十四页,创作于2
24、022年6月#include #include struct slist int data; struct slist *next;typedef struct slist SLIST;头结点987第三十三张,PPT共四十四页,创作于2022年6月SLIST *creat_slist() int c; SLIST *head, *s,*r; /* r承上,s启下 */ head=(SLIST *)malloc(sizeof(SLIST); r=head; scanf(%d,&c); while(c!=-1)s=(SLIST *)malloc(sizeof(SLIST); s-data=c; r
25、-next=s; r=s; scanf(%d,&c);r-next=0;return head;第三十四张,PPT共四十四页,创作于2022年6月void print(SLIST *head)SLIST *p; p=head-next; while(p!=NULL) printf(%d ,p-data); p=p-next; main() SLIST *head;printf(creat lian biaon); head=creat_slist();print(head); 第三十五张,PPT共四十四页,创作于2022年6月在链表中删除结点 在一个单链表中删除指定结点,首先要找到该结点的前驱
26、结点,然后修改前驱结点的指针域指向待删结点的后继结点,然后释放被删结点。 q-=next=p-next第三十六张,PPT共四十四页,创作于2022年6月有以下程序:#include main() struct cmplxint x;int y; cnum2=1,3,2,7; printf(“%dn”,cnum0.y/cnum0.x*cnum1.x);以下程序的输出结果:6第三十七张,PPT共四十四页,创作于2022年6月有以下程序 :struct st int n; struct st *next;struct st a3, *p;a0.n=5;a0.next=&a1;第三十八张,PPT共四十四页,创作于2022年6月a1.next=&a2; a2.n=9; a2.next=0;p=&a0;则以下表达式是6的是:A p+-n B p-n+ C +(*p).n D +p-n答案:D记住:+p-n成员值增等价+(p-n). (+p)-n 指针增(在访问之前)(p+)-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 生态景观与人居环境创建方案
- 建筑施工技术支持与咨询方案
- 商业街区虚拟现实体验方案
- 绿地养护管理标准化方案
- 2026年福建莆田市荔城区埕头中学代课教师招聘1人备考题库含答案详解(新)
- 商业街区商业导向设计方案
- 2026新疆博州赛里木湖信息科技服务有限责任公司招聘4人备考题库带答案详解(轻巧夺冠)
- 车库人车分流设计方案
- 2026上半年安徽事业单位联考池州市招聘63人备考题库带答案详解
- 2026内蒙古赤峰敖汉旗招募就业见习人员的79人备考题库含答案详解(能力提升)
- QC/T 262-2025汽车渗碳齿轮金相检验
- T-CFLP 0016-2023《国有企业采购操作规范》【2023修订版】
- 谷雨生物2024环境、社会及管治(ESG)报告
- 2025金风变流器2.0MW故障代码手册V4
- 龙湖物业培训课件
- 反诈知识竞赛题库附答案(150 题)
- 2025年注册可靠性工程师资格认证考试题库500题(含真题、重点题)
- 个人购房合同样本大全
- T-CBMF 91-2020 T-CCPA 17-2020 城市综合管廊结构混凝土应用技术规程
- 电力配网工程各种材料重量表总
- 抗菌药物临床应用指导原则
评论
0/150
提交评论