您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 第9章_结构体、共用体和枚举《C语言程序设计(第三版)》-电子教案
第9章结构体、共用体与枚举21世纪高等学校精品规划教材Hanent整理了解结构体、共用体和枚举类型的特点熟练掌握结构体类型、变量、数组、指针变量的定义、初始化和成员的引用方法掌握共用体和枚举类型、变量的定义和引用掌握用户自定义类型的定义和使用9.1结构体【问题】如何表示下面的数据?王云平、18岁、男、学号2010010001、汉族、北京、手机号13901000001可以定义以下变量来分别表示上面的数据:charname[10];intage;charsex[3];charxh[11];charnation[20];charaddress[20];charmobile[20];由于必须类型相同才能构造成数组,显然以前学习的数据类型都不能很好地解决问题9.1.1结构体类型的定义结构体类型的定义形式为:struct类型名{成员说明表列};例如:structstudent/*结构体类型名*/{charname[10];/*结构体成员,以下都是*/intage;charsex[3];charxh[11];charnation[20];charaddress[20];chartel[20];};9.1.1结构体类型的定义struct是结构体关键字,结构体类型定义中的每个成员项都有确定的类型和名称,称为结构体类型的“域”,每个域的定义后面要有“;”号。结构体类型由用户定义,所以结构体类型不是固定结构的类型,用户可以定义不同结构的结构体类型,也可以定义相同结构的结构体类型,系统均认为是不同的结构体类型,例如下面是两个不同的结构体类型,虽然aa和bb的结构是一样的:structaa{inta;intb;charc;}structbb{inta;intb;charc;}9.1.2结构体变量的定义和初始化定义结构体变量的方法可以如下:用已定义的结构体类型名定义变量。例如:structstudentwang,zhang;在定义结构体类型的同时定义结构体变量。例如:structstudent/*结构体类型名*/{charname[10];/*结构体成员,以下都是*/intage;charsex[3];charxh[11];charnation[20];charaddress[20];chartel[20];}wang,zhang;9.1.2结构体变量的定义和初始化不定义结构体类型名,直接定义结构体变量。例如:struct{charname[10];intage;charsex[3];charxh[11];charnation[20];charaddress[20];chartel[20];}wang,zhang;结构体类型的长度结构体类型的长度可以用sizeof运算符计算出来,形式为:sizeof(结构体类型名)或者sizeof(变量名)如sizeof(structstudent)或sizeof(wang),在TC和VC下,结果分别是:86和88。结构体类型的嵌套structdate{intyear;intmonth;intday;};structstudent{charname[10];intage;charsex[3];charxh[11];structdatebirthday;charnation[20];charaddress[20];chartel[20];}wang,zhang;structstudent{charname[10];intage;charsex[2];charxh[11];struct{intyear;intmonth;intday;}birthday;charnation[20];charaddress[20];chartel[20];}wang,zhang;结构体类型变量的初始化定义的同时初始化structstudentwang={王云平,18,男,2010010001,汉族,北京,13901000001},zhang={张丽,18,男,2010010002,汉族,广州,13901000002};注意初始化的数据及其类型要与各个成员一一对应,对于包含嵌套结构体类型的变量,其嵌套部分的初始化也按顺序赋初值structstudentwang={王云平,18,男,2010010001,2010,3,3,汉族,北京,13901000001};9.1.3结构体变量的引用数组元素的引用采用数组名和下标结合的引用方法,例如a[2]、b[5]等。结构体变量其成员的引用则采用成员运算符“.”来完成,格式为:结构体变量名.成员名或结构体变量名.结构体成员名.….结构体成员名.基本成员名后者是指包含嵌套的结构体类型。例如前面定义的变量wang,其成员引用如下:wang.agewang.birthday.year注意结构体的成员引用的形式比普通的变量(或数组)复杂一些,但本质上相当于一个普通变量(或数组),可参与该成员所属数据类型的一切运算。例如:wang.age=20;iage=20;printf(age=%d\n,wang.age);printf(age=%d\n,iage+wang.age);…成员运算符“.”的优先级最高,在表达式中的结构体变量成员不需要加括号。例如:wang.age++;相当于(wang.age)++;注意结构体变量的成员名可以相同,但必须处在不同的层次。例如:sturctstudent{intno;charname[20];struct{intno;charclassname[20];}class;struct{intno;chargroupname[20];}group;}wang;上面的结构体存在几个相同的成员no,但层次不同,其引用形式能够区别开来,引用形式分别如下:wang.nowang.class.nowang.group.no注意同一类型的结构体变量可相互赋值。我们知道,数组之间不能整体赋值,但同类型的两个结构体变量之间可以整体赋值,这样可以提高程序的效率。例如:zhang=wang;zhang.birthday=wang.birthday;【例9-1】演示结构体类型。#includestdio.h#includestring.hstructdate{intyear;intmonth;intday;};structstudent{charname[10];intage;charsex[3];charxh[11];structdatebirthday;charnation[20];charaddress[20];chartel[20];};【例9-1】演示结构体类型。main(){structstudentwang={WangYunPing,18,M,2010010001,2010,3,3,Han,BeiJing,13901000001},zhang;zhang=wang;strcpy(zhang.name,ZhangLi);strcpy(zhang.xh,2010010002);zhang.birthday.year=2011;zhang.birthday.month=4;zhang.birthday.day=4;strcpy(zhang.address,GuangZhou);strcpy(zhang.tel,13901000001);printf(%s,%d,%s,%s,,zhang.name,zhang.age,zhang.sex,zhang.xh);printf(%d,%d,%d,,zhang.birthday.year,zhang.birthday.month,zhang.birthday.day);printf(%s,%s,%s\n,zhang.nation,zhang.address,zhang.tel);}9.1.4结构体数组结构体类型既可以定义单个的变量,也可以定义结构体数组,用以存储批量的数据。结构体数组的定义和结构体变量定义一样,结构体数组的定义也有以下3种方法:先定义结构体类型,用结构体类型名定义结构体数组,例如:structstudent{…};structstudentstud[50];定义结构体类型名的同时定义结构体数组,例如:structstudent{…}stud[50];不定义结构体类型名,直接定义结构体数组,例如:struct{…}stud[50];结构体数组的初始化和普通数组的元素是普通变量一样,结构体数组的每一个元素相当于一个结构体变量,二者的初始化也很类似,例如:structstudentstud[2]={{王云平,18,男,2010010001,汉族,北京,13901000001},{张丽,18,男,2010010003,汉族,广州,13901000003}};结构体数组的引用结构体数组元素的成员表示为:结构体数组名[下标].成员名或结构体数组名[下标].结构体成员名.….结构体成员名.成员名例如:stud[i].agestud[5].birthday.year结构体数组元素和类型相同的结构体变量一样,可相互赋值。例如:stud[1]=stud[0];对于结构体数组元素内嵌的结构体类型成员,情况也相同。例如:student[2].birthday=student[1].birthday;【例9-2】演示结构体数组的定义和应用。#includestdio.h#includestring.hstructdate{intyear;intmonth;intday;};structstudent{charname[20];intage;charsex[3];charxh[11];structdatebirthday;charnation[20];charaddress[20];chartel[20];};【例9-2】演示结构体数组的定义和应用。main(){structstudentstud[3]={{WangYunPing,18,M,2010010001,2010,3,3,Han,BeiJing,13901000001},{ZhangLi,18,M,2010010002,2011,4,4,Han,GuangZhou,13901000002},{GuYuPing,18,F,2010010003,2012,5,5,Han,ShangHai,13901000003}};inti;for(i=0;i3;i++){printf(%s,%d,%s,%s,,stud[i].name,stud[i].age,stud[i].sex,stud[i].xh);printf(%d,%d,%d,,stud[i].birthday.year,stud[i].birthday.month,stud[i].birthday.day);printf(%s,%s,%s\n,stud[i].nation,stud[i].address,stud[i].tel);}}【例9-2】用键盘输入数据,程序修改为……structstudentstud[3];inti;for(i=0;i3;i++){printf(InputNo:%d\n,i+1);printf(Name:);gets(stud[i].name);printf(Age:);scanf(%d,&stud[i].age);getchar();printf(Sex:);gets(stud[i].sex);printf(XH:);gets(stud[i].xh);printf(Birthdat(YY,MM,DD):);scanf(%d,%d,%d,&stud[i].birthday.year,&stud[i].birthday.month,&stud[i].birthday.day);getchar();printf(Nation:);gets(stud[i].nation);prin
本文标题:第9章_结构体、共用体和枚举《C语言程序设计(第三版)》-电子教案
链接地址:https://www.777doc.com/doc-3823862 .html