如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第7章复合结构类型C语言的数据类型教学目标7.1结构体类型的概述1.结构体类型的定义说明其中,struct是关键字,struct连同其后的结构体标识符一起称为结构体类型名或结构体名;结构体名是用户定义的标识符,其命名原则应符合标识符的书写规定;数据类型可以是基本类型说明符,也可以是已定义过的结构体类型名,还可以是后面将要介绍的共用体型等;成员名也是用户自定义的标识符,用来标识所包含的成员名称;各成员的定义语句放在花括号中;花括号后面的分号是整个定义语句的结尾。例7.1将学籍管理记录定义成一个名为structstudent的结构体类型。structstudent{charnumber[5],*name;/*学号和姓名*/charsex;/*性别*/intage;/*年龄*/floatscore;/*总分*/char*speciality/*专业*/;charschool[31];/*学校*/};2.定义结构体类型时需要注意的问题3.结构体型的嵌套定义structdate{intyear;intmonth;intday;};structstudent{charnum[5],*name;charsex;structdatebirthday;floatscore;char*speciality;charschool[31];};也可以写成嵌套定义的形式7.3.1结构体变量的定义1.先定义结构体,后定义变量也可以在定义变量的同时,对变量赋初值,例如,上面的例子中定义的语句可以改写成如下赋初值的形式:structstudentm={20041,“wangtai”,18,‘m’,“江西"},n={20043,"zhaoli",16,‘f',"福建"};这种方法是将类型定义和变量定义分别进行的,是一种比较常用的定义方法。这种方法是在说明结构体变量的同时定义结构体变量。这种形式定义的一般格式为:struct结构体名{成员列表}变量名列表;直接说明结构体类型变量的一般格式为:struct{成员列表}变量名表列;这种方法与第二种方法的区别在于第三种方法中省去了结构体名,而在后面直接给出结构体变量。例如:struct{intnum;charname[20];intage;charsex;charplace[20];}m={20041,"wangtai",18,'m',"江西"},n={20043,"zhaoli",16,'f',"福建"};结构体类型的内存分配模式随该类型中包含的成员不同而不同,需要的内存字节数等于各个成员所需要的内存字节数的总和。一旦定义了结构体类型的变量或数组后,就要按这种结构体类型的内存分配模式占用内存。7.4.1结构体变量的初始化7.4.2结构体变量的引用7.4.1.结构体变量的初始化main(){structstudentst1={"1001","Liming",'0',1983,10,25,573,"Computer","3thHighSchool,Beijing"};/*结构体变量st1的定义和初始化*/printf("%4d%-10s%c%4d%2d%2d%.2f%-10s%s\n",st1.number,st1.name,st1.sex,st1.birthday.year,st1.birthday.month,st1.birthday.day,st1.score,st1.speciality,st1.school);/*输出结构体变量st1的各数据项*/}注意:对结构体变量初始化时,不允许跳过前面的成员只给后面的成员赋初值,但可以只给前面的成员赋初值,后面未赋初值的成员自动赋零值(字符型数组赋空串)。7.4.2结构体变量的引用例7.3结构体变量成员的引用。#include"string.h"structstudent/*定义student类型*/{intnum;charname[20];charsex;floatscore;};main(){structstudentm;m.num=20048;/*给结构体变量m的成员num赋值*/strcpy(m.name,"zhangsan");/*用strcpy给结构体变量x的成员name赋值*/m.sex='f';/*给结构体变量x的成员sex赋值*/m.score=95;/*给结构体变量x的成员score赋值*/printf("num=%dname=%ssex=%cscore=%f",m.num,m.name,m.sex,m.score);/*输出结构体变量m的各数据项的值*/}7.5结构体数组1.间接定义2.直