《C语言程序设计教程(第8章 结构体等构造数据类型).ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教程(第8章 结构体等构造数据类型).ppt(57页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C语言程序设计教程(第8章结构体等构造数据类型)信息科学与工程学院信息科学与工程学院内容安排内容安排 8.1 结构体结构体 8.2 结构体数组结构体数组 8.3 结构体与指针结构体与指针 8.4 结构体与函数结构体与函数 *8.5 联合体联合体 *8.6 枚举枚举 8.7 类型定义类型定义 信息科学与工程学院信息科学与工程学院信息科学与工程学院信息科学与工程学院信息科学与工程学院信息科学与工程学院信息科学与工程学院信息科学与工程学院实例的数据分析实例的数据分析数据特点:数据特点:描述学生基本信息的数据不是一个单独的描述学生基本信息的数据不是一个单独的数值、或者字符或者字符串。而是由学号、数值、
2、或者字符或者字符串。而是由学号、姓名和成绩等多个数据项一起构成的。姓名和成绩等多个数据项一起构成的。信息科学与工程学院信息科学与工程学院基于旧知识的数据对象描述基于旧知识的数据对象描述将学号、姓名和成绩分别定义为互相独立将学号、姓名和成绩分别定义为互相独立的简单变量。的简单变量。缺点:难以反映它们之间的内在联系。从缺点:难以反映它们之间的内在联系。从而导致数据难于理解和处理。而导致数据难于理解和处理。信息科学与工程学院信息科学与工程学院结构体的引入结构体的引入在在C语言中,专门提供语言中,专门提供结构体结构体机制机制来描述和处理这些由多个数据项组来描述和处理这些由多个数据项组成的数据。成的数据
3、。信息科学与工程学院信息科学与工程学院2.结构体类型的声明结构体类型的声明 结构体结构体通常是由多个数据项所组成的通常是由多个数据项所组成的集合体。构成结构体的数据项称之为结构集合体。构成结构体的数据项称之为结构体成员,每一个成员具有各自的名字,可体成员,每一个成员具有各自的名字,可以分别属于不同的数据类型。以分别属于不同的数据类型。信息科学与工程学院信息科学与工程学院structstruct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;成员类型可以是成员类型可以是基本型或结构体型基本型或结构体型structstruct是是关键字关键字,不
4、能省略不能省略合法标识符合法标识符可省可省:无名结构体无名结构体信息科学与工程学院信息科学与工程学院例例 structstruct studentstudent int code;/int code;/学号学号 char name20;char name20;float score;float score;可换成char code13;信息科学与工程学院信息科学与工程学院3 结构体变量的定义和初始化结构体变量的定义和初始化1、结构体变量的定义、结构体变量的定义2、结构体变量的初始化、结构体变量的初始化信息科学与工程学院信息科学与工程学院1、结构体变量的定义、结构体变量的定义定义方法共定义方法共
5、3种种先声明结构体类型,再定义结构体变量先声明结构体类型,再定义结构体变量声明结构体类型的同时定义结构体变量声明结构体类型的同时定义结构体变量使用无名结构体类型直接定义使用无名结构体类型直接定义各种方法的适用情况各种方法的适用情况?信息科学与工程学院信息科学与工程学院a、先声明结构体类型再定义变量、先声明结构体类型再定义变量例例 structstruct studentstudent int code;int code;char name20;char name20;float score;float score;struct struct studentstudent stu1,stu2;s
6、tu1,stu2;structstruct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct struct 结构体名结构体名 变量名列表;变量名列表;信息科学与工程学院信息科学与工程学院b、声明类型的同时定义变量、声明类型的同时定义变量例例 struct struct studentstudent int code;int code;char name20;char name20;float score;float score;stu1,stu2;stu1,stu2;struct struct 结构体名结构体名 类型标识符类型标识符
7、 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名列表;变量名列表;信息科学与工程学院信息科学与工程学院c、使用无名结构体类型直接定义、使用无名结构体类型直接定义例例 struct struct int code;int code;char name20;char name20;float score;float score;stu1,stu2;stu1,stu2;struct struct 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名列表;变量名列表;信息科学与工程学院信息科学与工程学院各种方法的适用情况各种方法的适用情况结构体类型只需使
8、用一次,可以使用结构体类型只需使用一次,可以使用c方法。方法。类型和变量的定义无法放置在一起的情况,类型和变量的定义无法放置在一起的情况,必须使用必须使用a方法。方法。如果变量的定义和类型的声明能够放置在一如果变量的定义和类型的声明能够放置在一起,起,a、b方法都合适。方法都合适。信息科学与工程学院信息科学与工程学院结构体变量的初始化结构体变量的初始化例例 struct student struct student int code;int code;char name20;char name20;float score;float score;struct student stu1=2,st
9、ruct student stu1=2,“WangWuWangWu”,99;,99;struct struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct struct 结构体名结构体名 结构体变量结构体变量=初始数据列表初始数据列表;信息科学与工程学院信息科学与工程学院注意事项注意事项类型和变量是不同的概念,不要混同。变类型和变量是不同的概念,不要混同。变量是一个具体的数据对象,可以参与运算。量是一个具体的数据对象,可以参与运算。而类型不是。而类型不是。成员的类型也可以是一个结构体类型。成员的类型也可以是一个结构体类型。co
10、de namebirthdaymonthdayyear信息科学与工程学院信息科学与工程学院例例 struct date struct date int month;int month;int day;int day;int year;int year;struct student struct student int code;int code;char name20;char name20;struct date birthday;struct date birthday;stu;stu;信息科学与工程学院信息科学与工程学院4 结构体变量及其成员的引用结构体变量及其成员的引用1.结构体变量的
11、引用结构体变量的引用2.结构体变量成员的直接引用结构体变量成员的直接引用3.结构体变量成员的逐级引用结构体变量成员的逐级引用信息科学与工程学院信息科学与工程学院1、结构体变量的引用、结构体变量的引用可以将一个结构体变量作为一个整体赋值可以将一个结构体变量作为一个整体赋值给另一个同类型的结构体变量。给另一个同类型的结构体变量。struct student s1=1,”wangli”,90,s2;s2=s1;不能将一个结构体变量作为一个整体进行不能将一个结构体变量作为一个整体进行输入和输出。输入和输出。只能对结构体变量中的各个只能对结构体变量中的各个成员分别进行输入和输出。成员分别进行输入和输出。
12、printf(%d,%s,%fn,s1);信息科学与工程学院信息科学与工程学院2、结构体变量成员的引用、结构体变量成员的引用成员成员(分量分量)运算符运算符引用方式:结构体变量名.成员名例例 struct student struct student int code;int code;char name20;char name20;float score;float score;s1,s2;s1,s2;s1.code=10;s2.score=85.5;s1.score=s2.score 10;printf(“code=%d,score=%d”,s1.code,s1.score)信息科学与工程
13、学院信息科学与工程学院3、结构体变量成员的逐级引用、结构体变量成员的逐级引用结构体嵌套时需逐级引用例例 struct date struct date int month;int month;int day;int day;int year;int year;struct student struct student int code;int code;struct date birthday;struct date birthday;stu;stu;stu.birthday.month=12;stu.birthday.month=12;信息科学与工程学院信息科学与工程学院8.2 结构体数组结
14、构体数组1.结构体数组的定义结构体数组的定义2.结构体数组的初始化结构体数组的初始化3.结构体数组元素成员的引用结构体数组元素成员的引用信息科学与工程学院信息科学与工程学院1、结构体数组的定义、结构体数组的定义类型说明符类型说明符 数组名常量表达式;数组名常量表达式;int a100;struct student stus20;信息科学与工程学院信息科学与工程学院2、结构体数组的初始化、结构体数组的初始化首先考虑数组的初始化。首先考虑数组的初始化。然后考虑数组中每一个元素的初始化,也然后考虑数组中每一个元素的初始化,也就是对每一个元素进行结构体的初始化。就是对每一个元素进行结构体的初始化。信息
15、科学与工程学院信息科学与工程学院struct studentchar number13;char name20;float Clanguage;struct student s3=01,Wang Xiao 2,78,02,Zhang 3,99,03,Li 4,91 信息科学与工程学院信息科学与工程学院3、结构体数组元素成员的引用、结构体数组元素成员的引用先数组元素再结构体成员先数组元素再结构体成员假如有定义假如有定义struct student stus20;那么那么stus0.code就是引用就是引用stus数组中第数组中第1个个元素中的元素中的code成员。成员。信息科学与工程学院信息科学
16、与工程学院补充:补充:结构体基本应用举例结构体基本应用举例1.需求描述需求描述2.数据结构描述数据结构描述3.程序输入部分程序输入部分4.程序处理部分程序处理部分5.程序输出部分程序输出部分6.程序的整体组合程序的整体组合信息科学与工程学院信息科学与工程学院1、需求描述、需求描述l要求:请求用户输入学生的基本情况,其要求:请求用户输入学生的基本情况,其中包括每位学生的学号、姓名和中包括每位学生的学号、姓名和C语言课程语言课程的成绩,将每位同学的成绩添加的成绩,将每位同学的成绩添加5分,然后分,然后按照以下格式输出学生的成绩列表。按照以下格式输出学生的成绩列表。l格式描述如下:格式描述如下:学号
17、学号 姓名姓名 成绩成绩 1 张三张三 99 2 王五王五 60 。信息科学与工程学院信息科学与工程学院2、数据结构描述、数据结构描述#define NUM 20#define NUM 20structstruct student student int code;int code;char name20;char name20;int score;int score;structstruct student stusNUM;student stusNUM;信息科学与工程学院信息科学与工程学院3、程序输入部分、程序输入部分int i=0;printf(Please input code,nam
18、e,score of student%d:n,i+1);scanf(%d,&stusi.code);scanf(%s,stusi.name);scanf(%d,&stusi.score);for(i=0;iNUM;i+)信息科学与工程学院信息科学与工程学院4、程序处理部分、程序处理部分 stusi.score=stusi.score+5;for(i=0;iNUM;i+)信息科学与工程学院信息科学与工程学院5、程序输出部分、程序输出部分printf(“n%-15s%-20s%-5sn”,“学号学号”,“姓名姓名,C语言成绩语言成绩);printf(“%-15d ,stusi.code);prin
19、tf(%-20s,stusi.name);printf(%-5d,stusi.score);printf(n);for(i=0;iNUM;i+)-代表左对齐,代表左对齐,15代表显代表显示数据用的域宽示数据用的域宽信息科学与工程学院信息科学与工程学院6、程序的整体组合、程序的整体组合#include void main()/*数据结构描述部分数据结构描述部分*/*程序输入部分程序输入部分*/*程序处理部分程序处理部分*/*程序输出部分程序输出部分*/信息科学与工程学院信息科学与工程学院8.3 结构体与指针结构体与指针1.结构体指针结构体指针2.指向结构体数组的指针指向结构体数组的指针信息科学与
20、工程学院信息科学与工程学院1、结构体指针、结构体指针定义:定义:struct 结构体名结构体名 *结构体指针名结构体指针名;numnamesexagestupstruct student int num;char name20;char sex;int age;stu;struct student *p=&stu;信息科学与工程学院信息科学与工程学院如何通过指针访问结构体成员的值?如何通过指针访问结构体成员的值?方法一:使用方法一:使用指针运算符指针运算符*引用结构体成员形式引用结构体成员形式例例 int n;int *p=&n;*p=10;n=10struct student stu1;st
21、ruct student *p=&stu1;stu1.num=101;(*p).num=101()不能省略()不能省略信息科学与工程学院信息科学与工程学院如何通过指针访问结构体成员的值?如何通过指针访问结构体成员的值?方法二:使用方法二:使用指向运算符指向运算符引用结构体成员引用结构体成员 struct student long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;p-sex=M;p-score=89.5;访问访问p指向的结构指向的结构体变量的体变量的sex成员成员信息科学与工程学院信息科学与工程学院2、指向结构
22、体数组的指针、指向结构体数组的指针struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;void main()struct student*p;for(p=stu;pnum,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+1信息科学与工程学院信息科学与工程学院8.4 结构体与函数结构体与函数1.用结构体变量作参数用结构体变量作参数2.用指向结构体变量的指针作参数用指向结构
23、体变量的指针作参数信息科学与工程学院信息科学与工程学院1、用结构体变量作函数参数、用结构体变量作函数参数用结构体变量作为函数参数,可以从调用函用结构体变量作为函数参数,可以从调用函数向被调用函数完整地传递结构体变量中的数向被调用函数完整地传递结构体变量中的所有成员。所有成员。信息科学与工程学院信息科学与工程学院1、用结构体变量作函数参数、用结构体变量作函数参数for(i=0;iNUM;i+)ListStudents(stusi);/实参是结构体变量的名字实参是结构体变量的名字void ListStudents(struct student stu)printf(%-15d,stu.code);
24、printf(%-20s,stu.name);printf(%-5d,stu.score);printf(n);信息科学与工程学院信息科学与工程学院关键问题关键问题结构体数据对象跟数组对象作为参数传递时结构体数据对象跟数组对象作为参数传递时有何不同?有何不同?信息科学与工程学院信息科学与工程学院2、用指向结构体变量的指针作函数参数、用指向结构体变量的指针作函数参数被调用函数获取调用函数数据对象的地址,从被调用函数获取调用函数数据对象的地址,从而可以通过指针访问调用函数中的结构体对象。而可以通过指针访问调用函数中的结构体对象。信息科学与工程学院信息科学与工程学院2、用指向结构体变量的指针作函数参
25、数、用指向结构体变量的指针作函数参数for(i=0;icode);printf(%-20s,pStu-name);printf(%-5d,pStu-score);printf(n);信息科学与工程学院信息科学与工程学院关键问题关键问题传递地址相比较于传递整个数据对象有何优点?传递地址相比较于传递整个数据对象有何优点?开销小,速度快!信息科学与工程学院信息科学与工程学院类型定义的格式如下:类型定义的格式如下:例例2:typedef struct student STUDENT;STUDENT z3;8.7 类型定义类型定义 typedef 原类型名原类型名 新类型名;新类型名;例例1:typed
26、ef int COUNTER;COUNTER i;使用类型定义可以使用类型定义可以提高程序的可读性提高程序的可读性使用类型定义还可使用类型定义还可以简化变量的定义以简化变量的定义信息科学与工程学院信息科学与工程学院struct studentint code;char name20;int score;struct student zhangsan;typedef struct studentint code;char name20;int score;STUDENT;STUDENT zhangsan;信息科学与工程学院信息科学与工程学院struct student;typedef struc
27、t student STUDENT;STUDENT zhangsan;信息科学与工程学院信息科学与工程学院小结小结如何声明一个新的结构体类型?如何声明一个新的结构体类型?定义结构体变量有哪些方法?分别适用什么定义结构体变量有哪些方法?分别适用什么情况?情况?如何初始化结构体变量?如何初始化结构体变量?如何引用结构体变量中的成员变量?如何引用结构体变量中的成员变量?如何定义和使用结构体数组?如何定义和使用结构体数组?信息科学与工程学院信息科学与工程学院小结小结(续续)如何定义结构体类型指针?如何定义结构体类型指针?如何通过结构体指针访问结构体成员?如何通过结构体指针访问结构体成员?结构体实参采用
28、什么方式向形参传递数据?结构体实参采用什么方式向形参传递数据?信息科学与工程学院信息科学与工程学院课堂作业课堂作业请求用户输入学生的基本情况,其中包括每请求用户输入学生的基本情况,其中包括每位学生的学号、姓名和两门课的成绩。然后位学生的学号、姓名和两门课的成绩。然后用下面的格式输出学生的成绩列表。用下面的格式输出学生的成绩列表。格式描述如下:格式描述如下:学号学号 姓名姓名 C语言语言 数学数学 平均成绩平均成绩 1 张三张三 60 70 65 。信息科学与工程学院信息科学与工程学院要求:要求:1.编写编写3个函数,个函数,main函数、函数、input函数、函数、output函数。函数。2.
29、不能在不能在main函数中处理用户的输入和输出。函数中处理用户的输入和输出。3.input函数用来输入函数用来输入一个学生一个学生的信息。的信息。output函函数用来输出数用来输出一个学生一个学生的信息。的信息。信息科学与工程学院信息科学与工程学院上机实验八上机实验八 上机指导实验八上机指导实验八 结构体等构造数据类型结构体等构造数据类型实验内容:课堂作业实验内容:课堂作业实验步骤:实验步骤:(1 1)先自学并完成上机指导实验)先自学并完成上机指导实验8 8 结构体结构体P137-139P137-139内容内容,掌握结构体相关的调试技巧;,掌握结构体相关的调试技巧;(2 2)完成并提交课堂作业的程序,程序源文件的名称为)完成并提交课堂作业的程序,程序源文件的名称为:班级:班级+学号后两位学号后两位+姓名姓名+实验八实验八.cpp.cpp。此此课件下件下载可自行可自行编辑修改,修改,仅供参考!供参考!感感谢您的支持,我您的支持,我们努力做得更好!努力做得更好!谢谢!