C大学基础教程第七章.ppt_第1页
C大学基础教程第七章.ppt_第2页
C大学基础教程第七章.ppt_第3页
C大学基础教程第七章.ppt_第4页
C大学基础教程第七章.ppt_第5页
已阅读5页,还剩62页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+大学基础教程,第7章其它自定义数据类型北京邮电大学电信工程学院计算机技术中心,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-2-,第7章其它自定义数据类型,C+语言不仅有丰富的基本数据类型,而且允许用户自己定义数据类型。,7.1枚举型数据类型7.2结构型数据类型7.3联合型数据类型,第7章C+其他自定义数据类型,7.1枚举类型,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-5-,7.1枚举类型,枚举型数据类型(简称枚举类型)有些问题中所处理数据的取值可以一一列举出来例:一周七天:星期日、星期1、星期2、星期3、星期4、星期5、星期6用户可以自己定义一种数据类型,把这种数据类型的变量的可能值一一列举出来。然后就可以使用这种数据类型来定义变量了。这种新的数据类型称为枚举类型,声明形式为:enum枚举类型名枚举元素列表;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-6-,例如:enumweekdaysun,mon,tue,wed,thu,fri,sat;新的数据类型枚举元素或枚举常量,7.1枚举类型,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-7-,enumweekdaysun,mon,tue,wed,thu,fri,sat;定义一个weekday类型的变量:weekdayday;变量day的取值范围:类型定义时,表里列举出来的七种标识符,把这些标识符看作符号常量。例如:day=sat;,7.1枚举类型,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-8-,在类型定义之后,对枚举元素按常量处理,不能对它们赋值。sat=6;枚举元素具有默认值,它们依次为:0,1,2,。enumweekdaysun,mon,tue,wed,thu,fri,sat;也可以在类型声明时另行指定枚举元素的值。enumweekdaysun=7,mon=1,tue,wed,thu,fri,sat,使用枚举类型时要注意:,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-9-,枚举值可以进行关系运算。整数值不能直接赋给枚举变量;如需要将整数值赋给枚举变量,应进行强制类型转换.例:intx=2;weekdayday;day=x;?day=(weekday)x;?,使用枚举类型时要注意:,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-10-,枚举常量在机器内部仍然是用整型数来存取定义某个枚举类型的变量时,分配几个字节的内存空间呢?(前面我们看到,枚举元素的默认值都是整数,可以给枚举元素指定值,也用整数,所以说,在计算机内部处理时,是把枚举类型按整型(int)对待的。),7.1枚举类型,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-11-,例7.1,读入1-7之间的一个数代表今天,输出明天是星期几。,#includeusingnamespacestd;enumweekdaysun=7,mon=1,tue,wed,thu,fri,sat;voidmain()coutn;weekdaytoday=(weekday)n;weekdaytomorrow=(weekday)(today+1);if(today=sun)tomorrow=mon;,if(today=0)tomorrow=(weekday)-1;switch(tomorrow)casesun:coutTomorrowisSunday.endl;break;casemon:coutTomorrowisMonday.endl;break;casetue:coutTomorrowisTuesday.endl;break;casewed:coutTomorrowisWednesday.endl;break;,casethu:coutTomorrowisThursday.endl;break;casefri:coutTomorrowisFriday.endl;break;casesat:coutTomorrowisSaturday.endl;break;default:coutinputerror!endl;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-15-,例:,口袋中有红、黄、蓝、白、黑五种颜色的球若干个。每次从口袋中取出3个不同颜色的球,问有多少种取法。分析:由于球只能是五种颜色之一,故可用枚举类型表示球的颜色。设取出的球为i、j、k,根据题意,i、j、k分别可以有五种取值,且ijk。可以用穷举法,逐个检验每一种可能的组合,从中找出符合要求的组合并输出。,#includevoidmain()enumcolorred,yellow,blue,white,black;enumcolorprint;intn,loop,i,j,k;charc;n=0;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)/前两个球不同for(k=red;k=black;k+),if(k!=i),switch(print)casered:coutred;break;caseyellow:coutyellow;break;caseblue:coutblue;break;casewhite:coutwhite;break;caseblack:coutblack;break;default:break;/endofforloopcoutendl;/endofif/endofifcouttotal:nendl;,7.2结构类型,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-20-,结构型数据类型(简称结构类型)把现实生活中意义密切相关的一组数据组合成一个整体,即由各种数据类型(可以是基本数据类型或已声明的自定义数据类型)的数据组成一个集合,称为结构类型。,7.2.1结构类型的定义,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-21-,结构的声明形式如下:struct结构类型名数据类型标识符1成员名1;数据类型标识符2成员名2;数据类型标识符n成员名n;;,7.2.1结构类型的定义,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-22-,例如:structstudentlongnum;/学号charname20;/姓名intage;/年龄floatscore;/成绩;,7.2.1结构类型的定义,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-23-,定义结构类型的变量:结构类型名结构变量名;例:定义student类型的变量:studentstu1;,7.2.1结构类型的定义,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-24-,结构类型的变量所占的存储空间是结构中所有成员所占空间的总和例sizeof(student)=sizeof(long)+20*sizeof(char)+sizeof(int)+sizeof(float)sizeof(s1)=sizeof(student),7.2.1结构类型的定义,structstudentlongnum;charname20;intage;floatscore;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-25-,结构成员的访问格式:结构变量名.成员名例:students1;s1.num=1;couts1.numendl;endl;,7.2.1结构类型的定义,如同使用一个变量,如同使用一个数组,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-26-,给结构变量赋初值,可以在变量定义时同时设置初始值:students2=20041118,”LiLi”,18,90;给结构变量赋值,也可以单独给各个成员赋值。例如:s1.num=20041118;strcpy(,”LiLi”);,7.2.1结构类型的定义,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-27-,例7.2结构类型的声明,变量的定义和初始化。,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-28-,/例7.2结构类型的声明,变量的定义和初始化#include#includeusingnamespacestd;structstudent/声明新的数据类型longnum;/学号charname20;/姓名charsex;/性别intage;/年龄stu=20041118,LiLi,F,18;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-29-,voidmain()coutsetw(8)stu.numsetw(10)setw(3)stu.sexsetw(3)stu.ageendl;运行结果:20041118LiLiF18,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-30-,结构体可以由不同数据类型的成员构成,这些成员可能是基本数据类型,也可能是自定义的数据类型,比如已声明的另一个结构类型。例7.3访问带有结构体类型成员的结构体变量。,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-31-,/例7.3结构体定义的嵌套#includeusingnamespacestd;structdateintyear;intmonth;intday;,structWeatherdatetoday;doubletemp;/温度doublewind;/风力;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-32-,voidmain()Weathertoday_weather=2004,11,30,10.0,3.1;couttoday_weather.today.year年today_weather.today.month月today_weather.today.day日的天气是:;cout温度:today_weather.temp;cout度,风力:today_weather.wind级num等价于(*ps).num。注意程序结束之前,释放动态内存分配。deleteps;,7.2.2结构类型的使用,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-39-,使用new操作在堆中给结构指针分配空间。例如:student*ps=newstudent30;deleteps;一般动态内存分配多用于申请一个较大的空间。,7.2.2结构类型的使用,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-40-,实际编程中,经常使用结构表示实际对象,例如:图书管理系统中的图书的表示学生管理系统中的学生的表示公司管理系统中职工的表示模式识别中特征的表示,7.2.2结构类型的使用,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-41-,每个员工的信息包括姓名、工作证号、薪水,定义为结构类型。定义结构指针,通过结构指针访问结构成员,输出显示员工的信息,例7.4结构指针的定义和使用,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-42-,#include#includeusingnamespacestd;structEmployeecharname20;unsignedlongid;floatsalary;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-43-,voidmain()Employeepr1;Employee*prPtr;prPtr=,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-44-,声明一个结构类型后,就可以用来组成更复杂的数据类型。可以象定义基本数据类型的数组一样定义结构类型的数组,称为结构数组。结构数组的每个元素都是该结构类型的变量。,7.2.2结构类型的使用,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-45-,#includeusingnamespacestd;structEmployeecharname20;unsignedlongid;floatsalary;Employeeallone6=zhang,12345,3390.0,wang,13916,4490.0,zhou,27519,3110.0,meng,42876,6230.0,yang,23987,4000.0,chen,12335,5110.0;,例7.5公司有六个员工,把他们按工资由低到高排序。,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-46-,voidmain()Employeetemp;for(inti=1;iallonej+1.salary)/比较工资成员temp=allonej;/结构变量的交换allonej=allonej+1;allonej+1=temp;for(intk=0;k6;k+)/输出allonek.idallonek.salaryendl;,2019/11/25,北京邮电大学电信工程学院计算机技术中心,-47-,结构型变量作函数的形式参数,参数传递方式为值传递,这时实参结构变量中所有成员的值都将被一一复制到形参变量空间中的相应成员。结构型引用变量作函数的形式参数,参数传递方式为地址传递方式,这时仅仅把实参结构变量的地址传递给形参,形参是实参的别名,共用同一地址空间。,7.2.2结构类型的使用,/例7.6用结构变量作为函数参数#includeusingnamespacestd;structEmployeecharname20;unsignedlongid;floatsalary;voidPrint(Employeee)e.ide.salaryendl;,voidmain()Employeeallone4=zhang,12345,3390.0,wang,13916,4490.0,zhou,27519,3110.0,chen,12335,5110.0;for(inti=0;i4;i+)Print(allonei);运行结果:zhang123453390wang139164490zhou275193110chen123355110,/例7.7用结构变量的引用传递函数参数#includeusingnamespacestd;structEmployeecharname20;unsignedlongid;floatsalary;voidPrint(Employee,Employeeallone4=zhang,12345,3390.0,wang,13916,4490.0,zhou,27519,3110.0,chen,12335,5110.0;voidmain()for(inti=0;pi.sexpi.job;if(pi.job=s)cinpi.classes;elseif(pi.job=t)cin

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论