第十四章_结构体 共用体和用户定义的类型_第1页
第十四章_结构体 共用体和用户定义的类型_第2页
第十四章_结构体 共用体和用户定义的类型_第3页
第十四章_结构体 共用体和用户定义的类型_第4页
第十四章_结构体 共用体和用户定义的类型_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计,第14章结构体、共用体和用户定义的类型,结构体:是一种自定义的构造数据类型。用途:把不同类型的数据组合成一个整体。,struct结构体名类型标识符成员名;类型标识符成员名;.;,成员类型可以是基本型或构造型,struct是关键字,不能省略,合法标识符可省:无名结构体,14.1结构体类型定义:,例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;,结构体类型定义描述结构的组织形式,不分配内存,结构体类型的定义,例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;structstudentstu1,stu2;,14.1.2结构体变量1、结构体变量的定义(1)、先定义结构体类型,再定义结构体变量一般形式:,struct结构体名类型标识符成员名;类型标识符成员名;.;struct结构体名变量名表列;,(2)、定义结构体类型的同时定义结构体变量一般形式:,struct结构体名类型标识符成员名;类型标识符成员名;.变量名表列;,例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;,(3)、无名结构体定义一般形式:,struct类型标识符成员名;类型标识符成员名;.变量名表列;,例structintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;,用无名结构体直接定义,几点说明结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以结构体成员名与程序中变量名地位相同结构体可嵌套,2、结构体变量的初始化和其他类型的变量相同,在定义结构体变量时赋初值形式一:,struct结构体名类型标识符成员名;类型标识符成员名;.;struct结构体名结构体变量=初始数据;,例structstudentintnum;charname20;charsex;intage;charaddr30;structstudentstu1=112,“WangLin”,M,19,“200BeijingRoad”;,形式二:,struct结构体名类型标识符成员名;类型标识符成员名;.结构体变量=初始数据;,例structstudentintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,19,“200BeijingRoad”;,形式三:,struct类型标识符成员名;类型标识符成员名;.结构体变量=初始数据;,例structintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,19,“200BeijingRoad”;,3结构体变量的引用引用规则结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用,成员(分量)运算符优先级:1结合性:从左向右,引用方式:结构体变量名.成员名,指针引用结构体变量中数据,指针变量名-成员名(*指针变量名).成员名structstudentcharname12;charsex;structdatebirthday;floatsc4;std,arr5,*ps;ps=引用结构体变量std中的sex成员,可写作:std.sexps-sex(*ps).sex,14.1.3结构体数组1、结构体数组的定义和初始化定义:三种形式:,形式一:structstudentintnum;charname20;charsex;intage;structstudentstu2;,形式二:structstudentintnum;charname20;charsex;intage;stu2;,形式三:structintnum;charname20;charsex;intage;stu2;,初始化:与其他类型的数组赋初值的方法相同,例structintnum;charname20;charsex;intage;stu=,;,顺序初始化:structstudentintnum;charname20;charsex;intage;structstudentstu=100,“WangLin”,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;,2、结构体数组引用,引用方式:结构体数组名下标.成员名,14.2向函数传递结构体型数据,1.向函数传递结构体变量的成员普通变量作函数的实参的用法相同,形参与实参之间仍然是“值传递”的方式。2.向函数传递结构体变量ANSIC允许函数之间传递结构体变量。若实参是结构体变量,那么形参也应是同类型的结构体变量。3.向函数传递结构体数组名若实参是结构体数组名,那么形参也应是同类型的结构体变量。,#includetypedefstuctintnum;doublemark;REC;voidsub1(RECx)x.num=23;x.mark=81.5;voidsub2(RECy)y0.num=12;y0.mark=77.5;main()RECa=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.012,77.5,读入五位用户的姓名和电话号码,按姓名字典顺序排序后,输出用户的姓名和电话号码.,#include#include#defineN5typedefstructcharname20;charnum10;USER;voidgetdata(USER*sp);voidgetsort(USER*sp);voidoutdata(USER*sp);,main()USERspN;getdata(sp);getsort(sp);outdata(sp);voidgetdata(USER*sp)inti;printf(“Enternamei+),k=i;for(j=i+1;j0)k=j;temp=spk;spk=spi;spi=temp;voidoutdata(USER*sp)inti;printf(“aftersort:n”);for(i=0;inext=p;q-next=s,#include#includestructslistintdata;structslist*next;typedefstructslistSLIST;,头结点,9,8,7,SLIST*creat_slist()intc;SLIST*head,*s,*r;/*r承上,s启下*/head=(SLIST*)malloc(sizeof(SLIST);r=head;scanf(%d,voidprint(SLIST*head)SLIST*p;p=head-next;while(p!=NULL)printf(%d,p-data);p=p-next;main()SLIST*head;printf(creatlianbiaon);head=creat_slist();print(head);,在链表中删除结点在一个单链表中删除指定结点,首先要找到该结点的前驱结点,然后修改前驱结点的指针域指向待删结点的后继结点,然后释放被删结点。,q-=next=p-next,有以下程序:,#includemain()structcmplxintx;inty;cnum2=1,3,2,7;printf(“%dn”,cnum0.y/cnum0.x*cnum1.x);以下程序的输出结果:6,有以下程序:,structstintn;structst*next;structsta3,*p;a0.n=5;a0.next=,a1.next=则以下表达式是6的是:Ap+-nBp-n+C+(*p).nD+p-n答案:D记住:+p-n成员值增等价+(p-n).(+p)-n指针增(在访问之前)(p+)-np+-n指针增(在访问之后),有以下程序(若long型和int型数据均占4个字节);,#includeTypedefunionlongx2;inty4;charz8;MYTYPE;MYTYPEthem;main()printf(“%dn”,sizeof(them);16,若以建立如图所示链表:则不能将s所指的节点插入到链表尾的是:,head,datanext,p,s,G,F,0,E,As-next=NULL;p=p-next;p-next=s;Bp=p-next;s-next=p-next;p-next=s;Cp=p-next;s-next=p;p-next=s;Dp=(*p).next;(*s).next=(*p).next;(*p).next=s;答案:C,以下函数creat用来建立一个带头节点单向链表,新产生的结点总是插在链尾,单向链表的头指针作为函数返回请填空,#include#includestructlistchardata;structlist*next;structlist*creat()structlist*h,*p,*q;ch

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论