您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > c++4自定义数据类型信息学竞赛、C++编程初学者
自定义数据类型C++程序设计—函数和编译预处理2C++程序设计2013.7目录结构体类型共用体类型枚举类型自定义类型C++程序设计—函数和编译预处理3C++程序设计2013.73结构体类型结构体的概念结构体类型的定义结构体变量的定义结构体变量的初始化和引用结构体数组结构体与函数链表C++程序设计—函数和编译预处理4C++程序设计2013.75.1.1结构体的概念一个学生的信息有学号、姓名、性别、年龄、住址、成绩等。一个教师的信息有职工编号、姓名、性别、年龄、职称、工资等。如何描述这些类型不同的相关数据?结构体——一种构造类型数据结构体由若干不同类型的数据项组成,构成结构体的各个数据项称为结构体成员。C++程序设计—函数和编译预处理5C++程序设计2013.7struct结构体类型名{数据类型成员名1;数据类型成员名2;:数据类型成员名n;};结构体类型名是用户定义的任何一个有效的标识符,它的作用就如同任何一个基本类型名,利用它能够定义具有该结构类型的变量或函数;5.1.2结构体类型的定义结构体类型定义的形式:定义结构体类型的关键字,不能省略注意分号不要省略C++程序设计—函数和编译预处理6C++程序设计2013.7structstudent{charid[7];//长度为7的字符数组id,表示学号charname[10];//长度为10的字符数组name,表示姓名floatscore;//单精度实数类型score,表示入学分数};//注意分号不要省略例:用结构体类型来描述学生的学籍信息(学号、姓名和入学分数)C++程序设计—函数和编译预处理7C++程序设计2013.7结构体类型的特点总结如下:(1)结构体类型是用户自行构造的。(2)它由若干不同的基本数据类型的数据构成。(3)它属于C++语言的一种数据类型,与整型、实型相当。因此,定义它时不分配空间,只有用它定义变量时才分配空间。C++程序设计—函数和编译预处理8C++程序设计2013.75.1.3结构体变量的定义一、先定义结构体类型再定义变量名这是C++语言中定义结构体类型变量最常见的方式,一般语法格式如下:struct结构体类型名{成员说明列表;};struct结构体类型名变量名;在C++中,一般可以省略C++程序设计—函数和编译预处理9C++程序设计2013.7structstudent{charid[7];charname[10];floatscore;};structstudentst1,st2;例:定义描述学生的学籍信息(学号、姓名和入学分数)的变量在C++中,一般写成:studentst1,st2;C++程序设计—函数和编译预处理10C++程序设计2013.7二、在声明类型的同时定义变量struct结构体名{成员说明列表;}变量名表列;structstudent{charid[7];charname[20];floatscore;}st1,st2;C++程序设计—函数和编译预处理11C++程序设计2013.7三、直接定义结构体类型变量struct{成员说明列表;}变量名表列;注意:•该方式没有结构体类型名,这种形式虽然简单,但不能在再次需要定义该类型的变量时,使用所定义的结构体类型。struct{charname[10];charid[7];floatscore;}st1,st2;C++程序设计—函数和编译预处理12C++程序设计2013.7(1)类型与变量是不同的概念,不要混淆。对结构体变量来说,在定义时一般先定义一个结构体类型,然后定义该类型的变量。在编译时,是不会为类型分配空间的,只为变量分配空间。关于结构体变量的几点说明:C++程序设计—函数和编译预处理13C++程序设计2013.7(2)结构体变量的存储空间理论上,是结构体变量各成员所占内存空间的总和。例如:结构体变量st1在内存中占(7+10+4=21)个字节,但系统通常为一个结构体变量分配整数倍大小的机器字长(对32位机而言,一个字长占4个字节),所以,实际上系统为st1分配了24个字节的内存空间。但一般情况下,对于结构体类型变量的内存空间,只讨论其理论值。结构变量占实际内存大小可用sizeof运算:sizeof(运算量)structstudent{charid[7];charname[10];floatscore;}st1;C++程序设计—函数和编译预处理14C++程序设计2013.7structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];charsex;datebirthday;charaddr[40];}stu1,stu2;date是结构体类型,birthday是date类型的成员(3)成员也可以是一个结构体变量,即结构体嵌套定义。C++程序设计—函数和编译预处理15C++程序设计2013.75.1.4结构体变量的引用和初始化一、用结构体变量名引用其成员格式:结构体变量名.成员名structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];charsex;datebirthday;charaddr[40];}stu1,stu2;stu1.num=20312;stu1.num表示引用结构体变量stu1中的num成员C++程序设计—函数和编译预处理16C++程序设计2013.75.1.4结构体变量的引用和初始化注意:1.如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。stu1.birthday.month=5;C++程序设计—函数和编译预处理17C++程序设计2013.72.对结构体变量的成员可以像普通变量一样进行各种运算stu2.num=stu1.num;stu1.birthday.day++;由于“.”运算符的优先级最高,因此stu1.birthday.day++;相当于(stu1.birthday.day)++;5.1.4结构体变量的引用和初始化structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];charsex;datebirthday;charaddr[40];}stu1,stu2;C++程序设计—函数和编译预处理18C++程序设计2013.73.属于同一结构体类型的各个成员之间可以相互赋值。stu2=stu1;4.不能将一个结构体变量作为一个整体进行输入和输出,只能对结构体变量中的各个成员分别进行输入和输出。coutstu1;//错误coutstu1.num;//正确5.1.4结构体变量的引用和初始化structdate{intmonth;intday;intyear;};structstudent{intnum;charname[20];charsex;datebirthday;charaddr[40];}stu1,stu2;C++程序设计—函数和编译预处理19C++程序设计2013.7structnode{floatx,y;}p,u,*pt;二、用指向结构体变量的指针引用其成员格式:指针变量名-成员名一个指向结构体变量的指针就是该变量所占据的内存段的起始地址。如果要通过结构体变量的指针来引用结构体变量的成员,必须使用“-”运算符。p.x=23.7;p.y=3.5pt=&u;pt-x=12.2;pt-y=24.3;5.1.4结构体变量的引用和初始化C++程序设计—函数和编译预处理20C++程序设计2013.7“*指针变量”表示指针变量所指对象,所以通过指向结构体的指针变量引用结构体成员也可写成以下形式:(*指针变量).结构体成员名(*pt).x=12.2这里圆括号是必须的,因为运算符“*”的优先级低于运算符“.”。5.1.4结构体变量的引用和初始化structnode{floatx,y;}p,u,*pt;C++程序设计—函数和编译预处理21C++程序设计2013.7①结构体变量.成员名。如:stu.num②(*p).成员名。如:(*p).num③p-成员名。如:p-num。①p-n②p-n++③++p-n三种形式等价请分析以下几种运算:①得到p指向的结构体变量中的成员n的值。②p指向的结构体变量中的成员n的值,用完该值后使它加1。③p指向的结构体变量中的成员n的值,并使之加1,然后再使用它。结构体成员的三种表示方法:C++程序设计—函数和编译预处理22C++程序设计2013.7结构体变量初始化的方式和数组类似,也是在定义后面用花括号括起来structStudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}student1={10001,Zhangin,'M',19,90.5,Shanghai″};Studentstudent2={10002,WangLi“,'F',20,98,Beijing};也可以采取声明类型与定义变量分开的形式,在定义变量时进行初始化5.1.4结构体变量的引用和初始化C++程序设计—函数和编译预处理23C++程序设计2013.7【例】结构体变量的引用与初始化示例#includeiostream.hstructstudent{intnum;charname[10];charsex;floatscore;};voidmain(){studentst1,st2={1001,Linqiang,'m',95.5},*p;p=&st1;//p指向结构体变量st1st1=st2;coutst1.numendl;//输出st1中的num成员的值coutp-nameendl;//输出p所指变量st1中的name成员的值coutp-sexendl;//输出p所指变量st1中的sex成员的值coutst1.scoreendl;//输出st1中的score成员的值}运行结果如下:1001Linqiangm95.5C++程序设计—函数和编译预处理24C++程序设计2013.7一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于:每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。5.1.5结构体数组C++程序设计—函数和编译预处理25C++程序设计2013.7structstudent//声明结构体类型{intnum;charname[20];charsex;intage;floatscore;charaddr[30];};studentstu[3];//定义student类型的数组stu一.定义结构体数组5.1.5结构体数组C++程序设计—函数和编译预处理26C++程序设计2013.7数组各元素在内存中连续存放5.1.5结构体数组C++程序设计—函数和编译预处理27C++程序设计2013.7structstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}stu[3]={{10101,LiLin,'M',18,87.5,103BeijingRoad},{10102,ZhangFun,'M',19,99,130ShanghaiRoad},{10104,WangMin,'F',20,78.5,1010,ZhongshanRoad}};二.结构体数组的初始化结构体数组初始化的一般形式是在所定义的数组名的后面加上={初值表列};5.1.5结构体数组C++程序设计—函数和编译预处理28C++程序设计2013.7设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投
本文标题:c++4自定义数据类型信息学竞赛、C++编程初学者
链接地址:https://www.777doc.com/doc-6184930 .html