C语言新教材PPT课堂课件-8-结构枚举等.ppt
《C语言新教材PPT课堂课件-8-结构枚举等.ppt》由会员分享,可在线阅读,更多相关《C语言新教材PPT课堂课件-8-结构枚举等.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1第八章第八章 用户自定义数据类型用户自定义数据类型8.1 8.1 结构类型及其变量的定义结构类型及其变量的定义8.2 8.2 结构数组结构数组8.3 8.3 结构和指针结构和指针8.4 8.4 联合类型联合类型8.5 8.5 枚举类型枚举类型8.6 8.6 用用typedeftypedef 定义类型别名定义类型别名补:补:编译预处理编译预处理28.1 8.1 结构类型及其变量的定义结构类型及其变量的定义l数组是一种存放一组相关的同类型数据的构造数组是一种存放一组相关的同类型数据的构造类型,但是不能将不同类型的数据放入同一类型,但是不能将不同类型的数据放入同一数组中。数组中。l如果需要把一个学
2、生的学号、姓名、性别、年如果需要把一个学生的学号、姓名、性别、年龄、成绩等龄、成绩等不同类型的数据不同类型的数据作为一个有机的作为一个有机的整体,就需要一种新的构造类型整体,就需要一种新的构造类型结构类结构类型型。l结构类型变量中的各个数据项各自独立存放。结构类型变量中的各个数据项各自独立存放。3l结构类型需要自定义,结构类型需要自定义,先定义结构类型后,先定义结构类型后,再定义结构变量再定义结构变量。l结构类型定义包含:各个成员的名称、类型。结构类型定义包含:各个成员的名称、类型。l结构变量定义包含:结构类型、结构体变量结构变量定义包含:结构类型、结构体变量名称。名称。48.1.1 结构类型
3、的定义结构类型的定义一般格式:一般格式:struct 结构类型名结构类型名 类型类型 成员成员1;类型类型 成员成员2;类型类型 成员成员n;;例例8.1:struct Student int number;char name9;int age;char sex;l定义定义结构类型,系统是不会为之分配内存单元。结构类型,系统是不会为之分配内存单元。只有在定义了结构变量后,系统才会分配内存单只有在定义了结构变量后,系统才会分配内存单元给变量。元给变量。l成员名可以与程序中其它变量同名,二者不代表成员名可以与程序中其它变量同名,二者不代表同一对象,但为增强可读性,不提倡这样做。同一对象,但为增强可
4、读性,不提倡这样做。*struct Student int number;char name9;struct Birthday int year;int month;int day;birthday;char sex;例例8.28.2:l成员也可以是一个结构变量。成员也可以是一个结构变量。l可以用可以用sizeofsizeof运算符计运算符计算结构类型的长度。算结构类型的长度。sizeof(struct Student)的值是的值是18numbername9birthdaysex 2 9 6 1 68.1.2 结构变量的定义结构变量的定义(1)先定义结构类型,再定义结构变量先定义结构类型,再定
5、义结构变量struct Student int number;char name9;int age;char sex;struct Student student1;结构类型只是模型,结结构类型只是模型,结构变量才是可操作的实构变量才是可操作的实体体应区分结构类型名与结构变量名。应区分结构类型名与结构变量名。三种方式三种方式7(2)(2)在定义结构类型的同在定义结构类型的同时定义结构变量时定义结构变量 struct Student int number;char name9;int age;char sex;student1;结构变量的定义结构变量的定义(3)(3)定义结构类型但不命名定义结构
6、类型但不命名,同时定义结构变量同时定义结构变量struct int number;char name9;int age;char sex;student1;无名无名结构结构体体8结构变量的初始化结构变量的初始化 struct Student int number;char name9;struct int year;int month;int day;birthday;char sex;student1=1101,lilin,1985,8,1,M;birthday各成员的初值 如:如:98.1.3 8.1.3 结构成员的引用结构成员的引用引用结构成员引用结构成员的一般形式如下:的一般形式如下:
7、结构变量名结构变量名.成员名成员名 例如:例如:struct Student int number;char name9;int age;char sex;student1;各成员的引用:各成员的引用:student1.number,student1.name,student1.age,student1.sex成员运算符成员运算符:.功能功能:访问结构体变量中访问结构体变量中指定的成员指定的成员优先级优先级1 1,左结合性,左结合性不能用不能用 Student.numberStudent.number 等等10允许对结构变量进行整体赋值操作。允许对结构变量进行整体赋值操作。如:如:studen
8、t2=student1;student1、student2为类型相同的结构体变量为类型相同的结构体变量不允许将一组常量直接赋给一个结构变量。不允许将一组常量直接赋给一个结构变量。如:如:student2=1101,lilin,1985,8,1,M;错误错误!不允许对结构变量进行整体输入输出,而只能对不允许对结构变量进行整体输入输出,而只能对结构变量中各个成员分别进行输入输出。结构变量中各个成员分别进行输入输出。如:如:printf(,student1);错误错误!结构变量引用注意事项结构变量引用注意事项11如果成员本身又是一个结构,欲对最后一级成如果成员本身又是一个结构,欲对最后一级成员进行访
9、问,必须通过多级成员运算符。员进行访问,必须通过多级成员运算符。如:如:student1.birthday.year结构变量的成员其作用和地位相当于普通变量,结构变量的成员其作用和地位相当于普通变量,可以像普通变量一样进行各种运算。可以像普通变量一样进行各种运算。可以引用成员的地址,也可以引用结构变量的可以引用成员的地址,也可以引用结构变量的地址。如:地址。如:&student1表示结构变量表示结构变量student1的首地址的首地址&student1.age 表示结构变量表示结构变量student1的成员的成员age的地址的地址结构变量引用注意事项结构变量引用注意事项12 结构类型定义:结构
10、类型定义:struct Employee long code;char name20;float salary;char address50;char phone11;例例8.4 职职工工数数据据包包括括职职工工编编号号、姓姓名名、工工资资、地地址址、电电话话,定定义义职职工工类类型型并并用用它它来来声声明明职职工工变变量,然后访问其各个成员。量,然后访问其各个成员。举例举例1 结构类型及变量定义、成员访问结构类型及变量定义、成员访问13用用2个结构变量存放个结构变量存放2个职工记录个职工记录:#include#include void main()struct Employee ps1=12
11、3,chen,2000.0,泉州泉州,2699999,ps2;/*/*以下以下给结构变量给结构变量ps2各成员输入值或赋值各成员输入值或赋值*/printf(code:);scanf(%ld,&ps2.code);printf(name:);scanf(%s,ps2.name);printf(phone:);scanf(%s,ps2.phone);strcpy(ps2.address,ps1.address);ps2.salary=ps1.salary*1.5;可改用:可改用:getchar();gets(ps2.name);getchargetchar()()用来用来“吃掉吃掉”作为作为co
12、decode输入结束符输入结束符的回车键;的回车键;getsgets函数可输入函数可输入含空格的姓名。含空格的姓名。14/*/*以下以下输出结构变量输出结构变量ps1、ps2各成员的值各成员的值*/printf(ncode:%ldn,ps1.code);printf(name:%s=n,ps1.name);printf(salary:%6.2fn,ps1.salary);printf(address:%sn,ps1.address);printf(phone:%sn,ps1.phone);printf(ncode:%ldn,ps2.code);printf(name:%sn,ps2.name)
13、;printf(salary:%6.2fn,ps2.salary);printf(address:%sn,ps2.address);printf(phone:%sn,ps2.phone);15举例举例2 结构类型及变量定义、成员访问结构类型及变量定义、成员访问#include void main()struct Student int number;char name9;struct Birthday int year;int month;int day;birthday;char sex;s;numbername9birthdaysexs scanf(%d,&s.number);scanf(
14、%s,s.name);scanf(%d-%d-%d,&s.birthday.year,&s.birthday.month,&s.birthday.day);scanf(%c,&s.sex);printf(%d,%s,%d-%d-%d,%cn,s.number,s.name,s.birthday.year,s.birthday.month,s.birthday.day,s.sex);168.2 8.2 结构数组结构数组如:方式如:方式(2)(2)struct Student int number;char name20;struct int year;int month;int day;birt
15、hday;char sex;student2=1101,lilin,1985,8,1,M,1102,wangjing,1985,7,1,F;结构数组初始化结构数组初始化 结构数组的定义也有三种方式结构数组的定义也有三种方式student0numbername9birthdaystudent1sex17结构数组应用举例结构数组应用举例例例8.5 计算学生的平均年龄计算学生的平均年龄#include struct Student int number;char name20;int age;stu4;void main()int i;float ave,s=0;for(i=0;i4;i+)scan
16、f(%d%s%d,&stui.number,stui.name,&stui.age);for(i=0;i 成员名成员名二、通过指针引用结构变量成员二、通过指针引用结构变量成员+pman-name 等同于等同于 +(pman-name)*pman-name 等同于等同于 *(pman-name)指向运算符:指向运算符:-功能功能:对指针所指向的结构的成员进行访问对指针所指向的结构的成员进行访问优先级优先级1 1,左结合性,左结合性20举例举例 用结构指针间接访问结构变量成员用结构指针间接访问结构变量成员#include#include struct Student long num;char n
17、ame20;int age;void main()struct Student student,*p=&student;strcpy(p-name,Wang Li);p-num=89101;p-age=18;printf(name:%snnumber:%ldnage:%dn,(*p).name,(*p).num,(*p).age);类例类例8.7 *类例类例8.98.9 学生类型结构数组中存放若干学生的数据,学生类型结构数组中存放若干学生的数据,通过结构指针输出各个学生的数据。通过结构指针输出各个学生的数据。举例举例 用结构指针间接访问结构数组元素的成员用结构指针间接访问结构数组元素的成员#i
18、nclude struct Student int number;char name20;int age;void main()struct Student stu2=10101,li lin,18,10102,zhang fan,19;struct Student*p;printf(No.Name agen);for(p=stu;pnumber,p-name,p-age);p+后,后,p指指向下一个结向下一个结构数组元素构数组元素 *三、指针变量作为结构成员三、指针变量作为结构成员输出:输出:lililili例8.8#include struct Student int number;cha
19、r*name;/*成员name为指针变量*/;void main()struct Student stu=1101,lili;puts(stu.name);如果没有给结构变量如果没有给结构变量stustu初初始化,而是通过始化,而是通过scanfscanf来输入来输入各个成员的值,则指针各个成员的值,则指针namename没没有明确指向,无法输入字符串。有明确指向,无法输入字符串。了解了解23四、结构指针作为函数参数四、结构指针作为函数参数 允允许许用用结结构构变变量量作作函函数数参参数数,但但数数据据传传递递方方式式是是逐逐个个成成员员传传递递,特特别别是是成成员员为为数数组组时时将将会会使
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 新教材 PPT 课堂 课件 结构 枚举
限制150内