预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共53页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

§11.1概述一个学生的学号、姓名、性别、年龄、成绩、地址,是互相联系的数据,在C语言中用“结构体(structure)”来定义。 structstudent{intnum;/*学号*/charname[20];/*姓名*/charsex;/*性别*/intage;/*年龄*/floatscore;/*成绩*/charaddr[30];/*地址*/}; §11.2结构体变量的定义一、先定义结构体类型,再定义变量 例、 structstudent{intnum; charname[20]; charsex;intage;floatscore;charaddr[30];}; structstudentstudent1,student2; 为了方便,可以这样定义结构体变量:二、在定义类型的同时定义变量三、直接定义变量四、成员是另一个结构体变量§11.3结构体变量的引用2、当成员是另一个结构体变量时,应一级一级地引用成员。 例4、 student1.num;student1.name;student1.birthday.month;student1.birthday.day;student1.birthday.year;§11.4结构体变量的初始化§11.5结构体数组二、结构体数组的初始化(见课本P266)三、举例§11.6结构体指针 一、结构体指针 结构体指针:指向结构体变量的指针。例、structstudent{longintnnum;charname[20];charsex;floatscore;};structstudentstu_1;structstudent*p;p=&stu_1;结构体指针,通过指向运算符->引用结构体中的成员。例、 p->nump->namep->sexp->score 因此结构体成员的引用方式有以下三种: 结构体变量.成员名 (*p).成员名 p->成员名三、指向结构体数组的指针structstudentstu[3];structstudent*p; p=stu;p->num;p++;p->num; p++;p->num;三、用结构指针作函数的参数 [例11.5]有一个结构体变量stu,内含学生学号、姓名和三门课程的成绩。要求在main中赋初值,在函数print中打印输出。说明:四、举例§11.8共用体uniondata{inti;charch;floatf;} 注意区分: “共用体”:各成员占相同的起始地址,所占内存长度等于最长的成员所占内存。 “结构体”:各成员占不同的地址,所占内存长度等于全部成员所占内存之和。二、共用体变量的引用三、共用体类型数据的特点 1、共用体变量中的值是最后一次存放的成员的值,如: a.i=1;a.ch='a';a.f=1.5; 完成以上三个赋值语句后,共用体变量的值是1.5,而a.i=1和a.ch=‘a’已无意义。[例11.11]设有若干个人员的数据,其中有学生和教师。学生数据包括:姓名、号码、性别、职业、班级。教师数据包括:姓名、号码、性别、职业、职务。如图、 §11.9枚举类型用关键字enum定义枚举类型:例、 enumweekday{sun,mon,tue,wed,thu,fri,sat}; weekday是枚举类型名,可以用于定义变量, 如、enumweekdayworkday,week_end; weekday=mon;week_end=sun; sun、mon、....、sat称为“枚举元素”或“枚举常量”。说明:3、枚举值可以作判断,例、 if(weekday==mon)....if(weekday>sun).... 4、整型与枚举类型是不同的数据类型,不能直接赋值,如、 workday=2;/*workday是枚举类型*/ 但可以通过强制类型转换赋值,如、 workday=(enumweekday)2; [例11.12]口袋里有红、黄、蓝、白、黑五种颜色的球若干个。每次从口袋中取出三个球,打印出三种不同颜色球的可能取法。分析:球的颜色只可能取五种值,用枚举类型变量处理。§11.10用typedef定义类型二、典型用法:2、简化数据类型的书写。 例3、typedefstruct{intmonth;intday;intyear;}DATE; DATEbirthday;DATE*p;DATEd[7]; 例4、typdefunsignedintUINT; UINTi,j;三、定义新类型的更一般形式: (1)typedefintNUM[100]; /*申明NUM为整型数组类型*/NUMn; /*n为整型数组变量*/ (2)typedefchar*STRING; /*申明STRING是字符指针类型*/STRINGp,s[10]; /*p是字符指针变量,s[1