C语言之结构体.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C语言之结构体.ppt》由用户(hwpkd79526)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 结构
- 资源描述:
-
1、 C语言程序设计 第十一章第十一章 结构体结构体第十一章 结构体与共用体11.1 结构体&结构体是一种构造数据类型&用途:把不同类型的数据组合成一个整体-自定义数据类型结构体类型定义struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;成员类型可以是基本型或构造型struct是关键字,不能省略合法标识符可省:无名结构体 C语言程序设计 第十一章第十一章 结构体结构体例 struct student int num;char name20;char sex;int age;float score;char addr30;namenumsexagescoreaddr2字节2字节20字
2、节1字节4字节30字节.结构体类型定义描述结构的组织形式,不分配内存结构体类型定义的作用域 C语言程序设计 第十一章第十一章 结构体结构体例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;11.2 结构体变量的定义先定义结构体类型,再定义结构体变量v一般形式:struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;struct 结构体名 变量名表列;例#define STUDENT struct student STUDENT
3、int num;char name20;char sex;int age;float score;char addr30;STUDENT stu1,stu2;C语言程序设计 第十一章第十一章 结构体结构体定义结构体类型的同时定义结构体变量一般形式:struct 结构体名 类型标识符 成员名;类型标识符 成员名;.变量名表列;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;C语言程序设计 第十一章第十一章 结构体结构体直接定义结构体变量一般形式:struct 类型标识符
4、 成员名;类型标识符 成员名;.变量名表列;例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;用无名结构体直接定义变量只能一次 C语言程序设计 第十一章第十一章 结构体结构体说明v结构体类型与结构体变量概念不同l类型类型:不分配内存;变量变量:分配内存l类型类型:不能赋值、存取、运算;变量变量:可以v结构体可嵌套v结构体成员名与程序中变量名可相同,不会混淆v结构体类型及变量的作用域与生存期例 struct date int month;int day;int year;struct s
5、tudent int num;char name20;struct date birthday;stu;numnamebirthdaymonthdayyear例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu;numnamebirthdaymonthdayyear C语言程序设计 第十一章第十一章 结构体结构体11.3 结构体变量的引用引用规则v 结构体变量不能整体引用,只能引用变量成员v可以将一个结构体变量赋值给另一个结构体变量v结构体嵌套时逐级引用成员(分量)运算符
6、优先级:1结合性:从左向右引用方式:结构体变量名.成员名例 struct student int num;char name20;char 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);(
7、)stu1=101,“Wan Lin”,M,19,87.5,“DaLian”;()例 struct student 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 stude
8、nt int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;if(stu1=stu2).()C语言程序设计 第十一章第十一章 结构体结构体11.4 结构体变量的初始化形式一:struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;struct 结构体名 结构体变量=初始数据;例11.1 struct student int num;char name20;char sex;int age;char addr30;struct student stu1=112,“Wang Lin”,M,19,“2
9、00 Beijing Road”;C语言程序设计 第十一章第十一章 结构体结构体形式二:struct 结构体名 类型标识符 成员名;类型标识符 成员名;.结构体变量=初始数据;例 struct student int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;C语言程序设计 第十一章第十一章 结构体结构体形式三:struct 类型标识符 成员名;类型标识符 成员名;.结构体变量=初始数据;例 struct int num;char name20;char se
10、x;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;C语言程序设计 第十一章第十一章 结构体结构体11.5 结构体数组结构体数组的定义三种形式:形式一: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;stu
11、2;numnamesexagenumnamesexagestu0stu125B C语言程序设计 第十一章第十一章 结构体结构体结构体数组初始化例 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
12、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;str3;stu1.age+;strcpy(stu0.name,”ZhaoDa”);C语言程序设计 第十一章第十一章 结
13、构体结构体例11.2 统计后选人选票struct person char name20;int count;leader3=“Li”,0,“Zhang”,0,”Wang“,0;main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(%s,leader_name);for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;for(i=0;i成员名结构体变量名.成员名指向运算符优先级:1结合方向:从左向右例 指向结构体的指针变量main()例11.3 struct st
14、udent long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,Li Lin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score);例 int n;int *p=&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).nu
15、m=101 C语言程序设计 第十一章第十一章 结构体结构体指向结构体数组的指针例11.4 指向结构体数组的指针struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;main()struct student*p;for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1 C语言程序设计 第十一章第十一章 结构体结构体用指向结构体的指针作函数参数v用结构
16、体变量的成员作参数-值传递v用指向结构体变量或数组的指针作参数-地址传递v用结构体变量作参数-多值传递,效率低 C语言程序设计 第十一章第十一章 结构体结构体struct data int a,b,c;main()void func(struct data);struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(arg);printf(arg.a=%d arg.b=%d arg.c=%d
17、n,arg.a,arg.b,arg.c);void func(struct data parm)printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c);printf(Process.n);parm.a=18;parm.b=5;parm.c=parm.a*parm.b;printf(parm.a=%d parm.b=%d parm.c=%dn,parm.a,parm.b,parm.c);printf(Return.n);arga:27b:3c:30(main)(func)parma:27b:3c:30copyarga:27b:3c:
18、30(main)(func)parma:18b:5c:90arga:27b:3c:30(main)arga:27b:3c:30(main)例11.5 用结构体变量作函数参数 C语言程序设计 第十一章第十一章 结构体结构体struct data int a,b,c;main()void func(struct data *parm);struct data arg;arg.a=27;arg.b=3;arg.c=arg.a+arg.b;printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);printf(Call Func().n);func(&
19、arg);printf(arg.a=%d arg.b=%d arg.c=%dn,arg.a,arg.b,arg.c);void func(struct data *parm)printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c);printf(Process.n);parm-a=18;parm-b=5;parm-c=parm-a*parm-b;printf(parm-a=%d parm-b=%d parm-c=%dn,parm-a,parm-b,parm-c);printf(Return.n);arga:18b:5c:90(mai
20、n)arga:27b:3c:30(main)例 11.5a 用结构体指针变量作函数参数 arga:27b:3c:30(main)(func)parm*arga:18b:5c:90(main)(func)parm*C语言程序设计 第十一章第十一章 结构体结构体10.7 链表处理链表处理结构指针的应用结构指针的应用11.7.1 11.7.1 概述概述1链表结构链表作为一种常用的、能够实现动态存储分配的数据结构,在数据结构课程中有详细介绍。为方便没有学过数据结构的读者,本书从应用角度,对链表作一简单介绍。(1)头指针变量head指向链表的首结点。(2)每个结点由2个域组成:1)数据域存储结点本身的信
21、息。2)指针域指向后继结点的指针。(3)尾结点的指针域置为“NULL(空)”,作为链表结束的标志。1249A 1356B 1475C 1021D Nullhead1249135614751021 C语言程序设计 第十一章第十一章 结构体结构体2语言对链表结点的结构描述语言对链表结点的结构描述 在语言中,用结构类型来描述结点结构用结构类型来描述结点结构。例如:struct grade char no7;/*学号*/int score;/*成绩*/struct grade *next;/*指针域*/;数据域 指针域 C语言程序设计 第十一章第十一章 结构体结构体3对链表的基本操作对链表的基本操作有
22、:创建、检索(查找)、插入、删除和修改等。(1)创建链表是指,从无到有地建立起一个链表,即往空链表中依次插入若干结点,并保持结点之间的前驱和后继关系。(2)检索操作是指,按给定的结点索引号或检索条件,查找某个结点。如果找到指定的结点,则称为检索成功;否则,称为检索失败。headppheadhead C语言程序设计 第十一章第十一章 结构体结构体(3)插入操作是指,在结点ki-1与ki之间插入一个新的结点k,使线性表的长度增1,且ki-1与ki的逻辑关系发生如下变化:插入前,ki-1是ki的前驱,ki是ki-1的后继;插入后,新插入的结点k成为ki-1的后继、ki的前驱,如图所示。(4)删除操作
23、是指,删除结点ki,使线性表的长度减1,且ki-1、ki和ki+1之间的逻辑关系发生如下变化:删除前,ki是ki+1的前驱、ki-1的后继;删除后,ki-1成为ki+1的前驱,ki+1成为ki-1的后继,如图所示。Ki-1KiKKi-1KiKKi-1KiKi+1Ki-1Ki+1 C语言程序设计 第十一章第十一章 结构体结构体链表操作涉及到的函数1.malloc函数 void*malloc(unsigned int size)在内存的动态存储区中分配一个长度为size的连续空间。成功:返回指向分配域起始地址的指针(void类型)失败:返回空指针(NULL)2.calloc函数 void*call
24、oc(unsigned n,unsigned size)在内存的动态存储区中分配n个长度为size的连续空间。3.free函数 void free(void*p)释放由p指向的内存区,使这部分内存区能被其他变量使用。C语言程序设计 第十一章第十一章 结构体结构体11.7.2 创建一个新链表创建一个新链表例例11.7 编写一个create()函数,按照规定的结点结构,创建一个单链表(链表中的结点个数不限)。基本思路基本思路:首先向系统申请一个结点的空间,然后输入结点数据域的(2个)数据项,并将指针域置为空(链尾标志),最后将新结点插入到链表尾。对于链表的第一个结点,还要设置头指针变量。另外,案例
25、代码中的3个指针变量head、new和tail的说明如下:(1)head头指针变量,指向链表的第一个结点,用作函数返回值。(2)new指向新申请的结点。(3)tail指向链表的尾结点,用tail-next=new,实现将新申请的结点,插入到链表尾,使之成为新的尾结点。/*例11-7代码文件名:11-7.C*/#define NULL 0 C语言程序设计 第十一章第十一章 结构体结构体#define LEN sizeof(struct grade)/*定义结点长度*/*定义结点结构*/struct grade char no7;/*学号*/int score;/*成绩*/struct grade
展开阅读全文