南昌工程学院C语言程序设计基础课件第9讲结构体.ppt_第1页
南昌工程学院C语言程序设计基础课件第9讲结构体.ppt_第2页
南昌工程学院C语言程序设计基础课件第9讲结构体.ppt_第3页
南昌工程学院C语言程序设计基础课件第9讲结构体.ppt_第4页
南昌工程学院C语言程序设计基础课件第9讲结构体.ppt_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

这些数据是相互相联系的,若独立定义很难反应出其内在联系,定义成数组而类型又不一致。因此C语言充许用户自已定义一种数据结构,称为结构体(structure)。,学号姓名性别年龄成绩地址10001xiaomingM1880beijing,第八章结构体,8.1结构体的概念,例:学校对学生建档案,要用到学号、姓名、性别、年龄、成绩、地址等数据,这些数据的类型不一样,例2:structstudentintnum;charname10;charsex;intage;floatscore;charaddr16;,一、结构体类型的定义:,struct结构体名类型名成员1类型名成员2类型名成员3;,考虑:(1)结构体名?(2)结构体类型?,structstudentintnum;charname10;charsex;intage;floatscore;charaddr16;,(1)定义结构体类型,不是定义变量,只是说明类型的结构,类型说明不占内存空间。,(2)定义结构体类型可以省略结构体名,structintnum;charname10;charsex;intage;floatscore;charaddr16;,二、结构体类型变量的定义,(1)定义了结构类型后定义变量,如:structstdcharname10intnum;floatscore;,structstdx,y;,floatx,y;,用这种方法定义结构体变量时,不能省略结构体名,如:structstdcharname10intnum;floatscore;x,y;,(2)定义结构类型时,同时定义结构变量,(2)构体变量student所占字节总数为:18字节(各成员所占字节总和),(1)这种方法定义结构变量时,可以省结构体标识名,如:structcharname10intnum;floatscore;x,y;,如:structdateintmonth;intday;intyear;,structpersonintnum;charname10;charsex;intage;structdatebirthday;charaddr16;,(3)成员也可以是一个结构体变量。,例1有以下结构体定义不正确的是,A)structstudentB)structintnum;intnum;floatage;floatage;std1;std1;,C)structD)#defineSTUDENTstructstuintnum;STUDENTfloatage;intnum;student;floatage;structstudentstd1;std1;,例2设有以下结构体描述不正确的是:structstuinta;floatb;st1;A)struct是结构体的关键字B)structstu是用户定义的结构体类型C)st1是用户定义的结构体类型名D)a和b是结构体成员名,对成员的引用为:结构变量名.成员名st1.agest1.birthday.day,三、结构体成员的引用,注意:不能整体引用结构变量,只能对成员一个个引用。,structstudentintnum;charname20;charsex;charaddr20;a1=1001,“liming”,M,“beijing”;printf(“%d”,a1.num);printf(“%s”,);printf(“%c”,a1.sex);,四、结构体变量的初始化,定义结构体时赋值,scanf(“%d”,structstudentintnum;charname20;charsex;charaddr20;a1;,(2)通过scanf语句赋值:,(3)结构体数组及始化:,structstudentintnum;charname20;charsex;charaddr20;st13;,结构化数组,表示有stu0,stu1,stu2三个结构体元素,structstudentintnum;charname20;charsex;charaddr20;st13=1001,“liming”,M,“beijing”,1002,“hujun”,M,“hebei”,1003,“yeqing”,M,“jiangxi”;,(3)结构体数组及始化:,问:st11.sex=?=?stl0.num=?st12.add=?,M,yeqing,1001,jiangxi,例以下程序输出结果是main()structcmpintx;inty;cnum2=1,3,2,7;printf(“%dn”,cnum0.y/cnum0.x*cnum1.x);A)0B)1C)3D)6,选项中能打印出字母”M”的语句是structpersoncharname9;intage;structpersonclass10=“John”,17,“Paul”,19,“Mary”,18,“Adam”,16;A)printf(“%cn”,);B)printf(“%cn”,1);C)printf(“%cn”,1);D)printf(“%cn”,0);,structstudentintnum;charname20;charadd20;structstudenta,st3,*p;,五、指向结构体类型数据的指针,structstudentintnum;charname20;charsex;charaddr20;a,st3,*p;,structstudentintnum;charname20;charsex;charaddr20;a,st3,*p;p=,因此引用一个结构体成员有以下三种方法:,a.numa.sex(*p).num(*p).sexp-nump-sex,设有如下定义structsscharname10;intage;charsex;std3,*p=std;下面各输入语句中错误的是A)scanf(%d,若要使p指向data中的a域,正确的赋值语句是structskinta;floatb;data;int*p;A)p=D)*p=data.a,有以下程序程序运行后的输出结果是structSTUcharnum10;floatscore3;main()structSTUs3=20021,90,95,85,20022,95,80,75,20023,100,95,90,*p=s;inti;floatsum=0;for(i=0;iscorei;printf(%6.2fn,sum);A)260.00B.)270.00C)280.00D)285.00,有以下程序程序运行后的输出结果为11的是structstintx;int*y;*pt;inta=1,2,b=3,4;structstc2=10,a,20,b;pt=c;A)*pt-yB)pt-xC)+pt-xD)(pt+)-x,例:unionstudentinti;floatx;charch;s1,s2,*p;,例:unionstudentinti;floatx;charch;unionstudents1,s2,*p;,联合体(共用体)联合体定义的一般形式与结构一样,其形式为:,union联合体名类型名1成员名1;类型名2成员名2;类型名n成员名n;变量名表;,(1)结构体变量所占字节数是其成员所占字节之和。联合体变量中所有成员共享存储区,联合体变量所占内存字节与其成员字节数最多的那个成员相等,(2)由于联合体变量中所有成员共享存储区,因此变量中的所有成员的首地址相同。,说明:,(3)变量在定义的同时只能用第一个成员的类型的值进行初始化,同时刻只有一个数据类型存在。,若有以下说明和定义,以下叙述中错误的是uniondtinta;charb;doublec;data;A)data的每个成员起始地址都相同B)变量data所占的内存字节数与成员c所占字节数相等C)data.a=5;printf(%fn,data.c);输出结果为5.000000D)data可以作为函数的实参,有以下定义和语句,则sizeof(a)的值是【1】,而sizeof(a.share)的值是【2】,structdateintday;intmonth;intyear;unionintshare1floatshare2;share;a;,用户typedef定义类型,两种方式都定义整型变量k,两种方式都定义了实型变量x,y,例:typedefintINTEGER;,INTTEGERk;,例:typedeffloatFL;,FLx,y;,floatx,y;,intk;,为现有类型,另年定义新的类型名,其定义的一般形式为typedef类型名标识符,两种方法定义结构体变量a1a2,typedefstructstudentintx;floaty;chara10;HH;,structstudenta1,a2,HHa1,a2;,例1下面叙述中错误的是()A通过typedef增加新的类型Btypedef将已存在的类型用一个新的名字来代表Ctypedef定义新的类型名后,原有类型名仍有效Dtypedef为各种类型起别名,但不能为变量起别名,例2则下面叙述中正确的()typedefstructSTlonga;intb;charc2;NEW;A)说明形式非法B)ST是一个结构体类型C)NEW是结构体类型D)NEW是结构体变量,将形参std所指结构体数组中年龄最大者的数据作为函数值返回typed

温馨提示

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

评论

0/150

提交评论