第9章_结构1.ppt
《第9章_结构1.ppt》由会员分享,可在线阅读,更多相关《第9章_结构1.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第九章结构体与共用体在实际问题中,一组数据往往具有不同的数据类型。例如,学生信息登记表中,学号为整型;姓名为字符型;班级为字符型;出生年月为字符型;性别为字符型;成绩为实数类型。显然无法用一个数组来存放这一组数据。因为数组中各元素的类型和长度都必须一致。为了解决这个问题,C语言可以根据事物的客观属性,自己构造数据类型,即结构(structure),也可称为结构体。结构是一种数据类型,同基本数据类型中的字符型和整型一样。不同的是,结构由基本类型或结构类型的数据组成,组成方式可自定义。因此,结构的根本意义在于,它给人们提供了封装一组数据在一个节点内的能力。9.1 结构体结构体9.1.1结构类型定义
2、结构类型定义“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型或者又是一个构造类型。结构既是一种“构造”而成的数据类型,那么在说明和使用之前必须先定义它,也就是构造它。struct结构体名类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名成员名;.;成员类型可以是基本型或构造型struct是关键字,不能省略合法标识符可省:无名结构体一、结构的定义例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;namenumsexagescoreaddr2字节2字节20字节1字节
3、4字节30字节.结构体类型定义描述结构的组织形式,不分配内存结构体类型定义的作用域括号后的分号不可省。结构定义之后,即可进行变量说明。结括号后的分号不可省。结构定义之后,即可进行变量说明。结构是一种复杂的数据类型,是数目固定,类型不同的若干有序构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。变量的集合。学号num姓名name班级class性别sex出生年月日birthday成绩score1001LiXiaoComputerM1989.12.189.01002JinComputerF1989.11.1290.01003FengArchitectureF1989.2.160.51
4、004RongEngineeringM1990.5.774.51005ZhuJiEngineeringF1990.11.3055.0structstuintnum;charname40;charclass40;charsex;charbirthday20;floatscore;;用C+语言的数组变量定义相应的数据关系:structstus4;9.1.2结构体变量说明例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;structstudentstu1,stu2;先定义结构体类型,再定义结构体变量一般形式:st
5、ruct结构体名类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.;struct结构体名结构体名变量名表列变量名表列;例#defineSTUDENTstructstudentSTUDENTintnum;charname20;charsex;intage;floatscore;charaddr30;STUDENTstu1,stu2;定义结构体类型的同时定义结构体变量定义结构体类型的同时定义结构体变量一般形式:struct结构体名类型标识符成员名;类型标识符成员名;.变量名表列;例structstudentintnum;charname20;charsex;intage;f
6、loatscore;charaddr30;stu1,stu2;直接定义结构体变量直接定义结构体变量一般形式:struct类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.变量名表列变量名表列;例structintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;用无名结构体直接定义变量只能一次说明结构体类型与结构体变量概念不同类型:不分配内存;变量:分配内存类型:不能赋值、存取、运算;变量:可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体类型及变量的作用域与生存期例structda
7、teintmonth;intday;intyear;structstudentintnum;charname20;structdatebirthday;stu;numnamebirthdaymonthdayyear例structstudentintnum;charname20;structdateintmonth;intday;intyear;birthday;stu;numnamebirthdaymonthdayyearw9.1.3结构体变量的引用引用规则结构体变量不能整体引用,只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用成员(分量)运算符优先级:1结合性:
8、从左向右引用方式:结构体变量名.成员名例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);()stu1=101,“WanLin”,M,19,87.
9、5,“DaLian”;()例structstudentintnum;charname20;charsex;intage;floatscore;charaddr30;stu1,stu2;stu2=stu1;()例structstudentintnum;charname20;structdateintmonth;intday;intyear;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例structstudentintnum;charname20;charsex;intage;floatscore;cha
10、raddr30;stu1,stu2;if(stu1=stu2).()一、结构体变量的赋值一、结构体变量的赋值#include#includestructstuintnum;charname20;charsex;floatscore;student1,student2;main()student1.num=1002;strcpy(student1.name,Jin);printf(inputsexandscoren);scanf(“%c%f,&student1.sex,&student1.score);student2=student1;printf(Number=%dnName=%sn,stu
11、dent2.num,student2.name);printf(Sex=%cnScore=%fn,student2.sex,student2.score);本例演示了结构变量的赋值、输入和输出的方法。本例演示了结构变量的赋值、输入和输出的方法。struct结构体名类型标识符成员名;类型标识符成员名;.;struct结构体名结构体变量=初始数据;例structstudentintnum;charname20;charsex;intage;charaddr30;structstudentstu1=112,“WangLin”,M,19,“200BeijingRoad”;二、结构体变量的初始化二、结构
12、体变量的初始化形式一形式一形式二:struct结构体名结构体名类型标识符类型标识符成员名;成员名;类型标识符类型标识符成员名;成员名;.结构体变量结构体变量=初始数据初始数据;例structstudentintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,19,“200BeijingRoad”;形式三:struct类型标识符成员名;类型标识符成员名;.结构体变量=初始数据;例structintnum;charname20;charsex;intage;charaddr30;stu1=112,“WangLin”,M,1
13、9,“200BeijingRoad”;w9.1.4结构体数组结构体数组结构体数组的定义三种形式:形式一:structstudentintnum;charname20;charsex;intage;structstudentstu2;形式二:structstudentintnum;charname20;charsex;intage;stu2;形式三:structintnum;charname20;charsex;intage;stu2;numnamesexagenumnamesexagestu0stu125B结构体数组初始化例structintnum;charname20;charsex;int
14、age;stu=,;顺序初始化:structstudentintnum;charname20;charsex;intage;structstudentstu=100,“WangLin”,M,20,101,“LiGang”,M,19,110,“LiuYan”,F,19;例structstudentintnum;charname20;charsex;intage;stu=,;分行初始化:structstudentintnum;charname20;charsex;intage;structstudentstu=100,“WangLin”,M,20,101,“LiGang”,M,19,110,“Li
15、uYan”,F,19;全部初始化时维数可省结构体数组引用引用方式:结构体数组名下标.成员名structstudentintnum;charname20;charsex;intage;str3;stu1.age+;strcpy(stu0.name,”ZhaoDa”);例统计学生平均成绩和不及格学生人数。#includestructstuintnum;charname20;charsex;floatscore;student5=1001,LiXiao,M,89.00,1002,Jin,F,90.00,1003,Feng,F,60.50,1004,Rong,M,74.50,1005,ZhuJi,F,
16、55.00;voidmain()inti,c=0;floatave,s=0;for(i=0;i5;i+)s+=studenti.score;if(studenti.score成员名结构体变量名.成员名指向运算符优先级:1结合方向:从左向右例指向结构体的指针变量#includestructstuintnum;charname20;charsex;floatscore;student1=1001,LiXiao,M,89.00,*pstu;voidmain()pstu=&student1;printf(Number=dnName=sn,student1.num,student1.name);prin
17、tf(Sex=cnScore=.2fnn,student1.sex,student1.score);printf(Number=dnName=sn,(*pstu).num,(*pstu).name);printf(Sex=cnScore=.2fnn,(*pstu).sex,(*pstu).score);printf(Number=dnName=sn,pstu-num,pstu-name);printf(Sex=cnScore=.2fnn,pstu-sex,pstu-score);例intn;int*p=&n;*p=10;n=10structstuintnum;charname20;charse
18、x;floatscore;student1,student2,*pstu1=&student1;structstu*pstu2;pstu2=&student2;/指针变量pstu2指向student2student1.num=101;(*pstu1).num=101指向结构体数组的指针例指向结构体数组的指针#includestructstuintnum;charname20;charsex;floatscore;student5=1001,LiXiao,M,89.00,1002,Jin,F,90.00,1003,Feng,F,60.50,1004,Rong,M,74.50,1005,ZhuJi
19、,F,55.00;voidmain()structstu*ps,*p1,*p2,temp;printf(BeforeSorted:n);printf(NotNamettSextScoretn);for(ps=student;psnum,ps-name,ps-sex,ps-score);for(p1=student;p1student+4;p1+)/选择法排序for(p2=p1+1;p2scorep1-score)temp=*p1;*p1=*p2;*p2=temp;printf(AfterSorted:n);printf(NotNamettSextScoretn);for(ps=student;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构
限制150内