c语言结构体与共同体.ppt

上传人:za****8 文档编号:11830639 上传时间:2020-05-03 格式:PPT 页数:39 大小:375.87KB
返回 下载 相关 举报
c语言结构体与共同体.ppt_第1页
第1页 / 共39页
c语言结构体与共同体.ppt_第2页
第2页 / 共39页
c语言结构体与共同体.ppt_第3页
第3页 / 共39页
点击查看更多>>
资源描述
第八章结构体与共用体,【教学要求】1理解结构体的含义。2掌握结构体类型变量的定义方法。3掌握结构体类型变量的引用方法。4掌握结构体类型变量如何在定义的同时初始化。5理解共同体的含义,掌握共同体类型变量的定义方法。6.了解结构体数组的定义和数组元素的引用。7了解指向结构体类型数据的指针的概念及使用。8了解链表结点的结构形式,链表的基本操作。9了解枚举类型的定义,及枚举类型的输入输出。10了解TYPEDEF的作用。,第八章结构体与共用体,结构体(struct)共同体(union)结构体与共用体小结枚举类型(enum)typedef定义类型,结构体(struct),结构体的概念结构体数组结构体指针,结构体的概念,结构体的定义结构体变量的存储特点结构体变量的引用结构体的初始化,结构体的定义,1、含义:不同类型数据的集合。2、功能:用于描述一个“概念”。(或记录)如:numnamesexagescoreaddr10010LiFunM1887.5BeiJing3、定义方法:方法一:在定义结构体类型的同时,直接给出结构体变量。如:struct结构体名结构体成员变量的定义;变量名1,变量名2,.,变量名n;方法二:先给出结构体类型的定义,再定义结构体变量。如:struct结构体名结构体成员变量的定义;例:;struct结构体名变量名1,变量名2,.,变量名n;4、要点:,方法二:structstudentintnumber;charname20;charsex;intage;floatscore;charaddr30;structstudentstudent1,student2;,方法一:structstudentintnumber;charname20;charsex;intage;floatscore;charaddr30;student1,student2;请注意两种方法的不同特点:1、“;”的用法;2、方法二可以用一个*.h文件来存储结构体的定义。,4、要点:结构体名(struct):用于标识一种新的数据类型,即结构体类型,可以省略。注意区分结构体类型与基本数据类型的不同,它是复合数据类型。结构体成员变量与普通变量的定义一样,它还可以是结构体变量。,structdateintmonth,day,year;structstudentintnum;charname20;charsex;intage;structdatebirthday;charaddr30;student1,student2;,结构体变量的存储特点,如:structstudentintnumber;charname5;charsex;intage;floatscore;charaddr10;student1,student2;,structstudent所占存储空间的大小为:各成员变量所占存储单元字节数之和。sizeof(student),结构体类型变量的引用,一、原则:通过结构体的成员来引用结构体变量。二、成员的引用方法为:结构体变量名.成员名三、要点:1.结构体变量不能整体输入输出,只能对它的成员进行操作。如:student1.num;2.如果成员本身又是一个结构体类型,则要使用若干个成员运算符,逐级找到最底层的成员。如:student1.birthday.day3.成员变量可以象一般的变量一样进行各种运算,只是在运算时要加上“.”运算符。4.可以引用成员的地址。,结构体变量的初始化,一、只可以给主函数中或外部存储类别和静态存储类别的结构体变量、数组赋初值。1、对外部存储类型的初始化.2、对静态存储类型的结构体变量进行初始化二、给结构体变量赋初值不能跨越前面的成员而只给后面的成员变量赋值。,例exp8_1:对外部存储类型的初始化.#includestructstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a=99641,”LiPing”,M,56,”TianjinStreet”;main()printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr);,例exp8_2:对静态存储类型的结构体变量进行初始化.#includemain()staticstructstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a=99641,”LiPing”,M,56,”TianjinStreet”;printf(“No.:%ldnname:%snsex:%cnaddress:%sn”,a.num,a.name,a.sex,a.addr);,结构体数组,结构体数组的含义:数组元素是结构体类型数据的数组称为结构体数组。结构体数组的定义结构体数组的初始化结构体数组的应用举例,结构体数组的定义,一、含义:若干个相同的结构体类型变量组成的数据集合。二、定义方法:struct结构体名例如:结构体成员定义;数组名元素个数;三、结构体数组的使用方法1、通过数组的下标(或指向数组的指针)来访问结构体变量。2、再通过结构体变量的成员实现结构体数据的访问。形式为:数组名下标.成员名如:stu2.name=“WangYing”;,structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;structstudentstu3;,structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;stu3;结构体数组的物理含义:表示实体(或记录)的个数。,1、含义:在定义结构体数组时完成数组元素的赋值2、方法:与一般数组元素赋初值的方法相同。structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a3=99641,”LiPing”,M,56,”TianjinStreet”,99341,”ZhangFan”,F,78,”BeijingRoad”,99441,”RenZhong”,M,34,”ShenyangRoad”;,结构体数组的初始化,例exp8_3:对候选人得票的统计程序,设有三个候选人,每次输入一个候选人的名字,最后统计出每个候选人的得票的结果.#includestructpersoncharname20;intcount;leader3=“Li”,0,”Zhang”,0,”Fun”,0;main()inti,j;charleader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_name);for(j=0;jn+和+p-n,1、结构体指针的定义:main()structstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a=070441,”LiPing”,M,56,”TianjinStreet”,*p=,指向结构体数组的指针,1、定义方法举例:2、使用要点:p+:是指针p指向数组的下个元素,而这个元素是由结构体类型数据组成的,它不是一个简单的变量.(+p)-num:先使指针p指向结构体数组当前位置的下一个元素,再访问其元素成员num;请区别与(p+)-num的不同。,例exp8_4:指向结构体数组的指针#includestructstudentlongnumber;charname20;charsex;intage;floatscore;charaddr30;a3=070441,”LiPing”,M,56,”TianjinStreet”,070442,”ZhangFan”,F,78,”BeijingRoad”,070443,”RenZhong”,M,34,”ShenyangRoad”;main()structstudent*p;for(p=a;pnum,p-name,p-sex,p-age,p-score,p-addr);,指向结构体的指针作函数的参数,1、用结构体变量的成员作函数的参数与一般变量作函数的参数一致;2、用指向结构体变量的指针作函数的参数,实参将地址传递给形参,与前面指针作函数参数一致;3、新版本的c语言允许将整个结构体变量作为函数的参数进行传递,要求形参与实参的类型必须一致,而且程序占用内存大,运行速度慢.4、举例(参见课本p227),单链表,一、链表的含义:当一个结构体中有一个成员是指向本结构体的指针时,通过这样的指针可以将若干个相同的结构体存储单元连接成一个新的数据结构。举例:二、功能:可以根据需要动态的开辟存储空间。1.malloc(size):在内存中动态的分配一个长度为size的连续空间;2.calloc(n,size):在内存中分配n个长度为size的连续空间;3.free(ptr):释放由ptr指针指向的内存区域.二、链表操作建立链表、在链表插入结点、删除链表结点,单链表的结构:structstudentintnum;floatscore;structstudent*next;,要点:1、链表中的元素在内存中存放顺序是不连续的。由next指针来连接各节点。2、链表数据结构的实现,必须利用指针变量.,节点,建立含n个节点的链表过程:,structstudent*creat()structstudent*head,*p1,*p2;n=0;head=NULL;p1=p2=(structstudent*)(malloc(sizeof(structstudent);scanf(“%ld,%f”,在链表中插入结点的过程,.,删除链表结点的过程:,malloc(),共同体(union),共同体的含义与定义方法共同体的存储特点共同体的使用,共同体的含义与定义方法,一、含义:几个不同变量共同占用同一块内存空间,只是一种覆盖技术,所谓的共同占用是指这几个变量共同拥有内存的同一个起始地址.共用相同的存储单元。二、定义形式:union共用体名例如:成员表列;uniondate变量表列;inti;charch;floatf;a,b,c;,共同体的存储特点,1.同一块内存可以存放不同类型的数据,但在某一时刻只能存放其中的一种;2.共用体变量中起作用的成员是最后一次存放的成员;3.共用体变量的地址和它的成员的地址是同一个地址;4.共用体变量不能整体被赋值,也不能给共用体变量赋初值;5.不能把共用体变量作为函数的参数进行传递,但可以使用指向共用体变量的指针作为函数的参数;6.结构体类型和共用体类型可以嵌套使用。,例如:uniondateinti;charch;floatf;a,b,c;,共同体的使用,例exp8_5:已知字符“0”的ASCII马为十六进制的30,下面程序的输出为:main()unionunsignedcharc;unsignedinti4;z;z.i0=0 x39;z.i1=0 x36;printf(“%cn”,z.c);运行结果:9,例:下列程序的运行结果是什么?#includemain()unionzjinta;charch2;au;au.a298;printf(dndn,au.ch0,au.ch1);运行结果为:,42,1,结构体与共用体小结,一、共同点:都是不同类型数据的集合二、不同点:1、结构体中各个成员均在内存中存在,而共同体中只有一个成员存在于内存中。2、结构体占用的存储空间是所有成员所占空间的和;=sizeof(结构体名)而共用体所占内存空间的大小是所有成员中占用存储空间最大的一个成员的占用空间的值。3、结构体中各个成员相互独立、互不干扰,共同体中改变一个成员的值,会影响到其它成员的值。4、结构体与共同体可以互为成员。,枚举类型,1、含义:“枚举类型”是将变量的取值一一列举出来,变量的取值只限在列出来的取值范围内.2、定义方法:enumweekdaysun,mon,tue,wed,thu,fri,sat;enumweekdayworkday;枚举类型的变量workday的取值只能在sun-sat之间.3、使用要点:4、应用举例,要点:1.枚举元素在c语言中按常量来处理,不是变量,不能被赋值;2.作为常量的枚举元素,它们是有值的.在编译是按它们的定义顺序取值为0,1,2,3也可以在定义类型时人为定义枚举元素的值,如enumweekdaysun=7,mon=1,tue,wed,thu,fri,sat;enumweekdayworkday;3.枚举值可以用来做条件判断,如:if(workday=mon)if(workdaytue)4.一个整数不能直接赋值给一个枚举变量,如:workday=2;()workday=(enumweekday)2;()workday=tue;(),例:编写程序,功能是输入当天是星期几,就可以计算并输出n天后是星期几。例如,今天是星期六,若求3天后是星期几,则输入6,3,即输出“3天后是星期2”。#includeenumweeksun,mon,tue,wed,thu,fri,sat;enumweeknd(w,n)enumweekw;intn;return(enumweek)(int)wn)7);main()enumweekw0,wn;/*w0表示当天的星期值,wn表示n天后的星期值*/intn;scanf(d,d,w0,n);wnnd(w0,n);if(wn0)printf(d天后是星期日n,n);elseprintf(d天后是星期dn,wn);,typedef定义类型,一、含义:使用typedef可以说明一个新的类型标识符。二、定义方法:typedef类型名标识符三、要点:1、“类型名”为已有定义的类型标识符;“标识符”为用户定义的新标识符2、经typedef说明后的标识符可作为原数据类型名使用四、应用:,typedefstructstudentinti;.REC;RECx,y,*p;typedefstructintmonth;intday;intyear;DATE;DATEbirthday,*p;,typedefstructint_fd;int_cleft;int_mode;char*_nextc;char*_buff;FILE;FILE*fp;,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!