第十章-用户自定义数据类型课件.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《第十章-用户自定义数据类型课件.ppt》由会员分享,可在线阅读,更多相关《第十章-用户自定义数据类型课件.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十章第十章 用户自定义数据类型用户自定义数据类型结构体数据类型概述结构体数据类型概述1结构体数据类型的定义及其变结构体数据类型的定义及其变量的声明和引用量的声明和引用2共用体数据类型定义与共用体共用体数据类型定义与共用体变量的声明于引用变量的声明于引用4结构体变量的应用结构体变量的应用3为数据类型能够定义新的数据为数据类型能够定义新的数据类型名类型名52/12/2023前面学习的数据类型都属于简单数据类型,前面学习的数据类型都属于简单数据类型,实际问题的结构是复杂、多样的,仅用内建实际问题的结构是复杂、多样的,仅用内建的简单数据类型进行问题描述是不够的。的简单数据类型进行问题描述是不够的。C
2、语言没有提供表达复杂问题结构的公共数语言没有提供表达复杂问题结构的公共数据类型,但它提供了由用户根据不同问题结据类型,但它提供了由用户根据不同问题结构定制相应数据类型描述的技术机制。构定制相应数据类型描述的技术机制。由用户定制的数据类型称为用户自定义数据由用户定制的数据类型称为用户自定义数据类型类型(User Definition Data Type)。2/12/202310.1 结构体数据类型概述结构体数据类型概述数组数组是一种构造数据类型,其所有元素的数是一种构造数据类型,其所有元素的数据类型相同。据类型相同。结构体结构体是另一种构造数据类型,是另一种构造数据类型,它它将具有多个属性的对象
3、作为一个整体来描将具有多个属性的对象作为一个整体来描述述。如商品的描述包括商品的编号、名称、。如商品的描述包括商品的编号、名称、价格、生产日期和生产厂商等属性。用基本价格、生产日期和生产厂商等属性。用基本数据类型来定义和描述商品对象需要设置若数据类型来定义和描述商品对象需要设置若干个简单变量或数组变量,它不利于对实际干个简单变量或数组变量,它不利于对实际问题求解过程的描述与实现。问题求解过程的描述与实现。结构体结构体提供了一个变量名下引用多种数据类提供了一个变量名下引用多种数据类型的机制型的机制以便把与对象描述相关的各类数据以便把与对象描述相关的各类数据信息组合到一起进行管理。它克服了只用简信
4、息组合到一起进行管理。它克服了只用简单数据类型和数组进行表述的缺陷。单数据类型和数组进行表述的缺陷。2/12/202310.2 结构体类型定义及其变量的声明和引用结构体类型定义及其变量的声明和引用u10.2.1 结构体数据类型的定义结构体数据类型的定义 struct 结构体数据类型名结构体数据类型名 类型标识符类型标识符 成员变量名;成员变量名;类型标识符类型标识符 成员变量名;成员变量名;结构体数据类型名和关键字结构体数据类型名和关键字struct一起构一起构成成结构体数据类型标识符结构体数据类型标识符。结构体数据类型标识符结构体数据类型标识符用于声明用于声明结构体数结构体数据类型变量据类型
5、变量(简称简称结构体变量结构体变量)struct不能不能省略省略基本数据类型或已定基本数据类型或已定义的构造数据类型义的构造数据类型结构体数据结构体数据类型标识符类型标识符2/12/2023例如:例如:struct student int nStNo;char cName20;char cSex;int nAge;float fScore;char cAddr30;保留关键字保留关键字结构体结构体类型名类型名成成员员列列表表分号分号结构体数据类型的信息存储结构体数据类型的信息存储结构体数据类型的信息存储结构体数据类型的信息存储结构映射实例结构映射实例结构映射实例结构映射实例cNamecName
6、nStNonStNocSexnAgenAgefScorefScore cAddr cAddr2 2字节字节字节字节2 2字节字节字节字节2020字节字节字节字节1 1字节字节字节字节4 4字节字节字节字节3030字节字节字节字节2/12/2023用用结构体数据类型标识符结构体数据类型标识符声明的变量称为声明的变量称为结结构体变量构体变量。注意:注意:遵守先声明、后定义,再遵守先声明、后定义,再使用的基本原则。使用的基本原则。1.先定义结构体类型,再声明结构体变量先定义结构体类型,再声明结构体变量struct 结构体数据类型名结构体数据类型名 类型标识符类型标识符 成员变量名成员变量名;类型标识
7、符类型标识符 成员变量名成员变量名;struct 结构体数据类型名结构体数据类型名 变量名列表变量名列表;u10.2.2 结构体变量的声明结构体变量的声明例如:例如:struct student int nStNo;char cName20;char cSex;int nAge;float fScore;char cAddr30;struct student struStu1,struStu2;2/12/20232.在定义结构体数据类型在定义结构体数据类型的同时声明结构变量的同时声明结构变量struct 结构体数据类型名结构体数据类型名 类型标识符类型标识符 成员变量名成员变量名;类型标识符类
8、型标识符 成员变量名成员变量名;变量名表列变量名表列;例如:例如:struct student int nStNo;char cName20;char cSex;int nAge;float fScore;char fAddr30;struStu1,struStu2;2/12/20233.不定义结构体数据类型不定义结构体数据类型名,直接声明结构体变量名,直接声明结构体变量struct 类型标识符类型标识符 成员变量名成员变量名;类型标识符类型标识符 成员变量名成员变量名;变量名表列变量名表列;例如:例如:struct int nStNo;char cName20;char cSex;int n
9、Age;float fScore;char cAddr30;struStu1,struStu2;由于无数据类型名,本方法只能在此声明结由于无数据类型名,本方法只能在此声明结构体变量,不能在其它地方。构体变量,不能在其它地方。在不同地方出现的完全相同的结构体数据类在不同地方出现的完全相同的结构体数据类型定义,本质上属于不同的用户自定义数据类型定义,本质上属于不同的用户自定义数据类型,其声明的变量也属于不同数据类型。型,其声明的变量也属于不同数据类型。2/12/2023说明说明结构体数据类型与结构体变量的区别:结构体数据类型与结构体变量的区别:结构体数据类型不涉及内存分配问题结构体数据类型不涉及内
10、存分配问题,结构体变量涉及内存分配问题。结构体变量涉及内存分配问题。结构体数据类型只是定义数据类型,不结构体数据类型只是定义数据类型,不涉及赋值、存取、运算等操作行为涉及赋值、存取、运算等操作行为;结结构体变量涉及操作行为。构体变量涉及操作行为。结构体数据类型的定义可嵌套结构体数据类型的定义可嵌套结构体内部的成员变量名与外部的其它变结构体内部的成员变量名与外部的其它变量名可相同,量名可相同,不会混淆不会混淆(同名屏蔽同名屏蔽)结构体数据类型及变量的作用域与生存期结构体数据类型及变量的作用域与生存期例如:例如:struct date int month;int day;int year;stru
11、ct student int num;char name20;struct date birthday;stu;num namebirthdaymonth day year又如:又如:struct student int num;char name20;struct date int month;int day;int year;birthday;stu;num namebirthdaymonth dayyear2/12/2023struct student int nStNo;char cName20;char cSex;int nAge;float fScore;char cAddr30;
12、struStud;例例10-1 测试结构体数据类型存储空间长度。测试结构体数据类型存储空间长度。int main(void)/*两种方法计算两种方法计算*/int nSizeStud;printf(Size of struStud are%d and%d.n,sizeof(struct student),sizeof(struStud);nSizeStud=sizeof(struStud.nStNo)+sizeof (struStud.cName)+sizeof(struStud.cSex);nSizeStud+=sizeof(struStud.nAge)+sizeof (struStud.f
13、Score)+sizeof(struStud.cAddr);printf(Total size is%dn,nSizeStud);return 0;/*End of main()*/不能省略不能省略struct运行结果为:运行结果为:Size of struStud are 59 and 59.Total size is 592/12/2023u10.2.3 结构体变量的初始化结构体变量的初始化对结构体变量初始化的方法:对结构体变量初始化的方法:按照所定义结构体变量中的成员数据类型依按照所定义结构体变量中的成员数据类型依顺序对各成员变量赋以初值。编译时系统会将顺序对各成员变量赋以初值。编译时系
14、统会将声明初始化值赋值给各个成员变量。声明初始化值赋值给各个成员变量。struct date int month,day,year;birthday=12,15,1974;实例:实例:2/12/2023形式形式一一struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;struct 结构体名结构体名 结构体变量结构体变量=初始数据初始数据;例如:例如:struct date int month;int day;int year;struct date birthday=12,15,1974;2/12/2023形式二形式二struct 结构体名
15、结构体名 类型标识符类型标识符 成员名成员名;类型标识符类型标识符 成员名成员名;结构体变量结构体变量=初始数据初始数据;例如:例如:struct person long lPersonNo;char cName20;char cSex;struct date birthday;struPerson=10001,ZhangLi,W,12,13,1988;struPerson=10001,ZhangLi,W,12,13,1988;struPerson=10001,ZhangLi,W,struPerson=10001,ZhangLi,W,12,13,198812,13,1988;展开成单层展开成单
16、层层次化列表层次化列表2/12/2023形式三形式三struct 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;结构体变量结构体变量=初始数据初始数据;例如:例如:struct int num;char name20;char sex;int age;char addr30;stu1=112,Wang Lin,M,19,200 Beijing Road;stu1=112,Wang Lin,M,19,200 Beijing Road;2/12/2023注意:注意:初始化列表中值的个数少于结构体成初始化列表中值的个数少于结构体成员变量个数时,余下的成员变量自动初始化员
17、变量个数时,余下的成员变量自动初始化为为0 或或NULL。反之,将出现编译型错误:。反之,将出现编译型错误:Too many initializers。例如:例如:struct score_type long lStNo;float fScore;stuScore1=1;stuScore1=1;struct score_type struct score_type struScore2=1,100,2,200;struScore2=1,100,2,200;例例10-2 无初始化列表的自动、外部和静态结无初始化列表的自动、外部和静态结构体变量的初值对比。构体变量的初值对比。(P277-278)2
18、/12/2023引用规则:引用规则:既可以访问结构体中的成员变量,既可以访问结构体中的成员变量,也可以将结构体变量作整体引用。也可以将结构体变量作整体引用。1.结构体变量成员的引用结构体变量成员的引用格式:格式:结构体变量名结构体变量名.成员变量名成员变量名对成员变量进行访问的逻辑示意图对成员变量进行访问的逻辑示意图 struStud先定位到结构体变量先定位到结构体变量先定位到结构体变量先定位到结构体变量再定位到成员变量再定位到成员变量再定位到成员变量再定位到成员变量100010001002100210041004int nStNo;int nStNo;int nAge;int nAge;fl
19、oat fScore;float fScore;图图图图1 10 0-5 5 结结结结构构构构体体体体变变变变量量量量及及及及其其其其成成成成员员员员访访访访问问问问过过过过程程程程示示示示意意意意图图图图u10.2.4 结构体变量及其成员引用结构体变量及其成员引用2/12/2023例例10-3 输入并输出学生的成绩记录数据。输入并输出学生的成绩记录数据。#include struct score_type int nStNo,int nAge;float fScore;int main(void)struct score_type struStud;printf(Enter nStNo,nA
20、ge,fScore:);scanf(%d,%d,%f,&(struStud.nStNo),&struStud.nAge,&struStud.fScore);printf(nStNo=%d,nAge=%d,fScore=%.1f n,struStud.nStNo,struStud.nAage,struStud.fScore);return 0;/*End of main()*/运行结果为:运行结果为:EnternStNo,nAge,fscore:1,20,95.5nStNo=1,nAge=20,fScore=95.5 2/12/2023(1)结构体变量之间的整体赋值结构体变量之间的整体赋值变量类
21、型相同才可以变量类型相同才可以变量类型相同才可以变量类型相同才可以进行整体赋值进行整体赋值进行整体赋值进行整体赋值(2)结构体变量的整体输入输出问题结构体变量的整体输入输出问题不能不能不能不能进行进行进行进行整体输入输出整体输入输出整体输入输出整体输入输出,只能只能只能只能进行进行进行进行成员级成员级成员级成员级引用,引用,引用,引用,且要求成员是基本数据类型且要求成员是基本数据类型且要求成员是基本数据类型且要求成员是基本数据类型利用利用利用利用scanfscanf()()和和和和printfprintf()()函数完成函数完成函数完成函数完成含字符型数据的输入格式要严格对齐,否则易含字符型数
22、据的输入格式要严格对齐,否则易含字符型数据的输入格式要严格对齐,否则易含字符型数据的输入格式要严格对齐,否则易错位。错位。错位。错位。例如:例如:例如:例如:scanf(%dscanf(%d%c,&i,&chc,&i,&ch););执行时,执行时,执行时,执行时,如果键盘输入:如果键盘输入:如果键盘输入:如果键盘输入:30 A30 A。chch接收的是接收的是接收的是接收的是空格空格空格空格字符,字符,字符,字符,不是不是不是不是AA。利用利用利用利用gets()gets()和和和和puts()puts()函数完成函数完成函数完成函数完成gets()gets()可以获取有空格的字符串数据项。可
23、以利可以获取有空格的字符串数据项。可以利可以获取有空格的字符串数据项。可以利可以获取有空格的字符串数据项。可以利用字符串函数截取相应数据项串,利用用字符串函数截取相应数据项串,利用用字符串函数截取相应数据项串,利用用字符串函数截取相应数据项串,利用atoiatoi()()、atolatol()()和和和和atofatof()()等函数将数据项串分别转化为整型、等函数将数据项串分别转化为整型、等函数将数据项串分别转化为整型、等函数将数据项串分别转化为整型、长整型和浮点数等数据类型值。长整型和浮点数等数据类型值。长整型和浮点数等数据类型值。长整型和浮点数等数据类型值。例例10-4例例10-52.结
24、构体变量的整体引用结构体变量的整体引用2/12/2023(3)结构体变量的其他整体引用情形:结构体变量的其他整体引用情形:将结构体变量将结构体变量作为函数参数作为函数参数使用使用将结构体数据类型将结构体数据类型作为函数名类型作为函数名类型使用使用并由函数名返回结构体数据类型值并由函数名返回结构体数据类型值获取获取结构体变量结构体变量地址地址和结构体变量和结构体变量存储存储空间大小空间大小用结构体指针变量用结构体指针变量引用引用整个结构体整个结构体及其及其成员变量成员变量。2/12/2023u10.3.1 结构体数组结构体数组(struct array)一个简单结构体变量只能表示一个对象,表一个
25、简单结构体变量只能表示一个对象,表示多个同类型对象要用多个变量名。示多个同类型对象要用多个变量名。0.结构体数组:结构体数组:数组的数组的元素数据类型元素数据类型为为结构结构体数据类型体数据类型的数组。的数组。1.结构体数组的声明:结构体数组的声明:(1)先定义类型,再声明结构体数组先定义类型,再声明结构体数组(2)定义类型的同时声明结构体数组定义类型的同时声明结构体数组(3)不定义类型名的情况下直接声明结构不定义类型名的情况下直接声明结构体数组体数组10.3 结构体变量的应用结构体变量的应用struct student int nStNo,nAge;float fScore;char cNa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第十 用户 自定义 数据类型 课件
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内