您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > C之结构体、共用体及枚举类型
第10章结构体、共用体及枚举类型河南理工大学南红艳2020/1/30HongyanNan,HPU2重点、难点本章重点:结构体类型及变量结构体数组的使用指针和结构体共用体、枚举、用户自定义类型本章难点:结构体指针变量的引用链表的建立、插入、删除、输出等操作共用体类型的数据特点2020/1/30HongyanNan,HPU3数据类型基本类型构造类型实型整型短整型长整型单精度型整型双精度型指针类型空类型枚举类型结构体类型数组类型共用体类型字符类型长双精度型在实际应用中,将具有不同类型的相关的数据项组成一个有机的整体,而构造的一种数据类型称为“结构(structure)”或“结构体”在基本类型上自定义如:一个学生的基本信息有:学号、姓名、性别、年龄、成绩等,它们是一个有着内在联系整体,用结构体类型变量就可以表示之2020/1/30HongyanNan,HPU410.1结构体变量的定义结构体是一种构造数据类型,必须先定义后使用结构体类型由若干成员组成每一个成员可以是一个数据类型结构体类型的定义struct结构体名{类型标识符成员名表1;类型标识符成员名表2;………………………;类型标识符成员名表n;};关键字,不能省略合法标识符可省是成员类型基本型或构造型合法标识符可与变量名相同分号不能省略分号不能省略2020/1/30HongyanNan,HPU5例structstudent{intnum;charname[20];charsex;intage;floatscore;structdatebirthday;};是类型,不是变量名不分配内存例structdate{intmonth;intday;intyear;};成员类型可以是任何已有类型嵌套结构结构体类型定义在函数之外时有全局作用域;定义在任一对花括号之内则有局部作用域2020/1/30HongyanNan,HPU6结构体变量的定义三种形式:先定义结构体类型,再定义结构体变量在定义结构体类型的同时定义结构体变量直接定义结构体变量说明:类型与变量是不同概念若两个结构体的成员类型、名称、个数相同,而名不同,则为两个不同的结构类型可将结构体类型的定义集中放到一个.h的头文件中,而后用include命令将该头文件包含到本文件中,以便结构体类型的装配、修改及使用例:structstu{intnum;charname[20];charsex;intage;floatscore;structdatebirthday;};structstuboy1,boy2;编译时分配连续的内存为各成员所占字节总和(4+20+1+4+4+12=45)例:structstu{intnum;charname[20];charsex;intage;floatscore;structdatebirthday;}boy1,boy2;例:struct{intnum;charname[20];charsex;intage;floatscore;structdatebirthday;}boy1,boy2;在后续程序中无法重新定义该结构体类型的新变量2020/1/30HongyanNan,HPU710.2结构体变量的引用和初始化结构体变量的引用方式:结构变量名.成员名引用规则:结构体变量不能整体引用,只能引用变量成员嵌套结构体须逐级引用对变量成员进行各种运算可引用变量成员的地址和结构体变量的地址两个类型相同的结构体变量可相互赋值成员运算符,优先级最高,左结合性例:boy1.num/*第一个人的学号*/boy2.sex/*第二个人的性别*/如:printf(%d,%s,%c,%d,%f,boy1);()printf(%d,%s,%c,%d,%f,boy1.num,boy1.name,boy1.sex,boy1.age,boy1.score);()如:boy1.birthday.month()boy1.birthday()例:sum=boy1.age+boy2.age;boy1.age++;例:scanf(%d,&boy1.num);/*输入boy1.num的值*/printf(%o,&boy1);/*输出boy1的首地址*/scanf(%d,%s,%c,%d,%s,&student1);()例:boy1=boy2;2020/1/30HongyanNan,HPU8结构体变量的初始化形式一:形式二:形式三:struct结构体名{类型标识符成员名;类型标识符成员名;……………};struct结构体名结构体变量={初始数据};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];};structstudentstu1={112,WenLi,'M',19,2BeiRoad};struct结构体名{类型标识符成员名;类型标识符成员名;…………….}结构体变量={初始数据};例structstudent{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,WenLi,'M',19,2BeiRoad};struct{类型标识符成员名;类型标识符成员名;…………….}结构体变量={初始数据};例struct{intnum;charname[20];charsex;intage;charaddr[30];}stu1={112,WenLi,'M',19,2BeiRoad};2020/1/30HongyanNan,HPU9例10.1#includestdio.hmain(){structstu{intnum;charname[20];charsex;intage;floatscore;}boy2,boy1={102,Zhanpin,'M',20,78.5};boy2=boy1;printf(Number:%d\nName:%s\n,boy2.num,boy2.name);printf(Sex:%c\nage:%dScore:%4.1f\n,boy2.sex,boy2.age,boy2.score);}运行结果:Number:102Name:ZhanpinSex:MAge:20Score:78.52020/1/30HongyanNan,HPU10有:structstudent{intnum;charname[20];charsex;intage;}stu[3];10.3结构体数组定义的三种形式:形式一:形式二:形式三:初始化:分行初始化:顺序初始化:引用方式:数组名[下标].成员名structstudent{intnum;charname[20];charsex;intage;};structstudentstu[30];structstudent{intnum;charname[20];charsex;intage;}stu[30];struct{intnum;charname[20];charsex;intage;}stu[30];structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={{100,WanLi,'M',20},{101,LiGan,'M',19},{110,LuYan,'F',19}};全部初始化时维数可省structstudent{intnum;charname[20];charsex;intage;};structstudentstu[]={100,WanLi,'M',20,101,LiGan,'M',19,110,LuYan,'F',19};则有:stu[1].age++;strcpy(stu[0].name,ZhaoDa);给stu[0]赋予姓名应用strcpy赋值而stu[0].name=ZhaoDa()包括全部成员的值2020/1/30HongyanNan,HPU11例10.2计算学生的平均成绩和不及格的人数#includestdio.hstructstu{intnum;charname[20];charsex;floatscore;}boy[5]={{11,Lipi,'M',45},{12,Zhapi,'M',62.5},{13,Hefa,'F',92.5},{14,Chenli,'F',87},{15,Wami,'M',58}};main(){inti,c=0;floatave,s=0;for(i=0;i5;i++){s+=boy[i].score;if(boy[i].score60)c+=1;}ave=s/5;printf(ave=%f\nnum=%d\n,ave,c);}运行结果:ave=69.000000num=22020/1/30HongyanNan,HPU12例统计后选人选票#includestring.hstructperson{charname[20];intcount;}leader[3]={Li,0,Zhan,0,Wan,0};main(){inti,j;charleader_name[20];for(i=1;i=10;i++){scanf(%s,leader_name);for(j=0;j3;j++)if(strcmp(leader_name,leader[j].name)==0)leader[j].count++;}for(i=0;i3;i++)printf(%5s:%d\n,leader[i].name,leader[i].count);}2020/1/30HongyanNan,HPU1310.4结构体指针变量结构体指针变量:指向结构体变量或结构体数组的指针(首地址),简称为结构指针定义形式:struct结构体名*结构体指针变量名;赋值:结构体指针变量名=&结构体变量名;用结构体指针变量引用成员的形式:结构体指针变量-成员名或:(*结构体指针变量).成员名所以:例:structstuboy,*pstu;例:pstu=&boy;/*boy的地址赋给pstu*/()pstu=&stu;()指向运算符,左结合优先级高于自增/减运算编译系统不给结构体名分配空间例:++pstu-num++(pstu-num)pstu-num5(pstu-num)5例:(*pstu).num括号不可少否则:*pstu.num*(pstu.num)结构体指针变量-成员名(*结构体指针变量).成员名结构体变量名.成员名例:pstu-num*(pstu).numboy.num2020/1/30HongyanNan,HPU14例10.3结构指针变量的引用#includestdio.hstructstu{intnum;charname[20];charsex;floatscore;}boy={12,Zhanpi,'M',78.5},*pstu;main(){pstu=&boy;printf(Num=%d\tName=%s\n,boy.num,boy.name);printf(Sex=%c\tScore=%f\n,boy.sex,boy.score);printf(Num=%d\tName=%s\n,(*pstu).num,(*pstu).name);printf(Sex=%c\tScore=%f\n,(*pstu).sex,(*pstu).score);printf(Num=%d\tName=%s\n,pstu-num,pstu-name);printf(Sex=%c\tScore=%f\n,pstu-sex,pstu-score);}运行结果:Num=12Name=ZhanpiSex=MScore=78.500000Num=12Name=ZhanpiSex=MScore=78.500000Num=12Name=ZhanpiSex=MScor
本文标题:C之结构体、共用体及枚举类型
链接地址:https://www.777doc.com/doc-3392736 .html