结构与联合

上传人:jiups****uk12 文档编号:57087830 上传时间:2018-10-18 格式:PPT 页数:27 大小:1.79MB
返回 下载 相关 举报
结构与联合_第1页
第1页 / 共27页
结构与联合_第2页
第2页 / 共27页
结构与联合_第3页
第3页 / 共27页
结构与联合_第4页
第4页 / 共27页
结构与联合_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《结构与联合》由会员分享,可在线阅读,更多相关《结构与联合(27页珍藏版)》请在金锄头文库上搜索。

1、第七章 结构与联合,构造类型二,结构和联合的概念,在数据中,经常有一些既有联系,类型又不同的数据,并且它 们之间又有一定的相关性,需要一起处理。,如:学生基本档案的数据,字段: 学号 姓名 性别 地址 分数 类型: long char char char float,C语言允许用户按自己的需要将不同的基本类型构造成一种特 殊类型,即结构和联合。,结构和联合的操作分为三个步骤:,根据需要定义结构或联合类型; 通过定义的类型说明变量、数组、指针; 引用变量、数组元素和指针指向的对象。,7.1 结 构,结构类型的定义,格式:,struct 结构名 type 成员项1 ;type 成员项2 ;type

2、 成员项n ;;,结构标志。,用标识符命名的结构类型名。,结构类型中所含的成员项及其类型。,struct student long num ;char name20 ;int age ;char add30 ;float score ;,结构的定义确定了如下两点:,定义结构类型,确定结构中的成员项的名称及类型。,指明该结构类型的变量在内存中的组织形式。,结构变量的说明,定义结构只是确定该结构类型的名称及其成员项的组成及成员 项的类型。必须由定义的结构类型说明结构变量,才开辟相应的内 存空间以供使用。,结构变量的说明方式:,定义后说明,struct studentlong num ;char n

3、ame20 ;int age ;char add30 ;float score ; ;,struct student wang,zhang,liu;,用struct student 类型说明三个变量。,定义结构类型时说明变量,wang,zhang,liu;,无名结构方式说明变量,structlong num ;char name20 ;int age ;char add30 ;float score ;wang,zhang,liu;,说明:,注意类型和变量的区别。 成员项可单独使用。wang.age=20 结构的成员项也可以是结构变量。,struct docchar name20 ;struc

4、t birth age ;float sal ; ; struct birth int year;int mon; int day;,结构doc中的成员项是一个birth的结构变量!,结构变量的引用,结构变量都是以成员项作为引用单位,引用方式:,结构变量名.成员项名,wang.score=100;,说明:,结构变量的成员项与普通变量有相同的性质。 结构变量可以相互赋值,如: zhang = wang; 则wang的所有成员项的值赋给了zhang的对应成员项。,结构体变量的初始化,结构变量可以在说明时赋初值,称为初始化。,struct studentlong num ;char name20;i

5、nt age ;float score ;char addr 30 ; wang=99010101 , “王五” , 20 , 90.5 , “上海” ,zhang;,结构数组,结构变量也可以构造成数组,称为结构数组。每个数组元素都 是一个结构变量,都含有结构成员项。它们在内存中的地址是连续 的。,数组的说明:,struct 结构名 结构数组名 常量表达式 ;,struct student long num ;char name20 ;float score ; stud3 ;,说明:,三个结构数组元素都含有student 的成员项。 结构数组名stud,代表结构数组的首地址。 外部和静态结构

6、数组在说明时可以初始化。,=99010101 , “Wang” ,67.5 ,99010102 , “Zhao” ,78.5 ,99010103 , “Fang” , 98.5 ;,举例:统计三个候选人的票数。,#include #define NUMBER 10 struct student int num ;char name20 ;int count ; lead3 = 1 , “Zhang” ,0,2 ,“Tan” ,0 , 3 , “Wang” , 0 ; void main (void) int i ,j ,numb ;for (i=0 ; i0)leadnumb-1 .count

7、 + ;else printf(“Selection errorn”); printf (“ n ” ) ; for (i=0 ; i成员项名,结构指针主要用于对结构数组操作。,struct studocint iNum;char *name;*p,wang=2001,”wang li”; p=,举例:,#include struct sam int num ;char name20 ;char *addr;ws = 101 , “Fang” , “Shanghai” ,102 , “Tan” , “Bejing” ,103 , “Wang” , “Hefei” ; void main ( v

8、oid) int i;struct sam *pws ;pws = ws ;for ( i=0 ; inum , pws-name , pws-addr ) ;,定义结构,说明数组并初始化。,说明结构指针。,指针指向结构数组。,通过指针引用成员项。,CHAP7EX2,结构与函数参数,当函数需要通过形参传递一个结构时,一般有两种处理办法:,传递一个结构指针(效率高)。,#include void mprintp (struct student * ) ; struct student long num ;char *name ;float score; ; void main ( ) struc

9、t student s1 ;s1.num = 99010101 ;s1.name = “wang hai” ;s1.score = 99 ;mprintp ( ,指向结构的指针。,传递一个结构变量(效率低)。,void mprintp (struct student ) ;,s1,struct student sv,sv.num, sv.name, sv.score,结构变量。,返回结构变量的函数,当函数的返回值为一个结构变量时,称该函数为一个结构型函 数。,struct stu sv(void) struct stu t;return t; ,函数的类型,即返回值是结构变量。,例题返回结构的

10、函数,#include struct stulong num ;char name10 ;float score ; ; struct stu sv(void); void main ( void) struct stu ws ;ws = sv ( ) ;printf (“%ldn%sn:%fn” , ws.num , ws.name , ws.score ) ; struct stu sv(void) struct stu stemp ;char str20;gets(stemp.name) ;gets(str);stemp.num=atol(str);gets(str);stemp.sco

11、re=atof(str); return ( stemp) ; ,CHAP7EX3,返回结构指针的函数,当函数的返回值为一个结构指针时,称该函数为一个结构指针 型函数。,#include struct stu long num ;char *name;float score ; sa = 99010101 , “fun” , 89, 99010102 , “zhang” , 99 ,99010103 , “wang” ,78 , 0 , 0 , 0 struct stu *findp (long) ; void main ( ) long lsanum ;int i ;struct stu *

12、sap ;printf (“Enter the number:” ) ;scanf (“%ld” , ,struct stu *findp (long number ) int i ;for (i=0 ; sa i .num !=0 ; i+ )if (sa i .num = number ) break ;return ( ,思考题,已知一个班有40个人,本学期有两门课程的成绩, 求:所有课程中的最高成绩,及对应的姓名、学号和课程编号。课程1,2的平均成绩,并求出两门课程都低于平均成绩的学 生姓名和学号。对编号1的课程从高到低排序。(注意,其他成员项应保持 对应关系)。说明:要求定义结构,第

13、一成员项为学生姓名,第二成员项为 学号,另外两个成员项为两门课成绩。、要求分别用函数 完成。,7.2 链 表,引用自身的结构和链表的概念,结构中的某个成员项,为指向该结构类型自身的指针,则称为 引用自身的结构。,struct student int num ;float score ;char *name ;struct student *next ;,指向自身的结构。,相同类型的结构指针。,链表是一种动态存储分配结构,通过指针相连,数据可以不连 续存放。,head,结构变量,NULL,链表,head,2000H,2000H,2400H,2400H,NULL,tail,内存分配函数,链表的操作

14、需要开辟内存单元以便插入或追加节点,删除节点 后需要释放节点占用的内存单元。C 语言提供了相应的函数。,malloc函数,使用方法:ptr=malloc(size);,分配内存的字节数。,返回空类型的指针。 成功:返回内存的地址。 失败:返回NULL。,void *ptr; ptr=malloc(sizeof (int) ),ptr,void free(ptr),作用:释放ptr指向的由malloc分配的内存空间。,链表的操作,建立链表,步骤: 定义引用自身的结构。 说明指向结构的指针,head(头指针),tail(尾指针)。,#iinclude #include struct slist char info ;struct slist *nextp ; ; void main ( void) struct slist *head , *tail , *find ;char c , d ;head=tail=(struct slist *) malloc (sizeof ( struct slist ) ;head-nextp = NULL ;,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号