预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共106页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第7章构造类型数据主要内容7.1结构体类型例如,在学生成绩管理信息系统中,一个学生的信息可以包括姓名、性别、年龄、成绩等数据项,这些数据类型不同,可以将其定义成一个结构体类型。用户可以根据需要定义自己的结构体类型。定义结构体类型时应注意以下几点:(1)结构体类型成员可以是任何基本数据类型的变量,如int、char、float和double型等。(2)结构体类型成员也可以是数组、指针型变量。structlist{intdata[2];charc1;char*next;};(3)在C++中,定义结构体类型时其各个成员所占空间的大小必须是确定的,从而相应类型的结构变量所占空间的大小相对确定的。结构体类型student的长度为:20+1+4+4=29,但由于计算机是按“字长”分配存储空间,字长是16/32的倍数。(4)在同一结构体类型内各成员的名称不能相同。但不同结构体类型中的成员名可以相同,并且结构体类型的成员名可以与程序中的变量名相同。定义结构体类型其实只是构造一种特定数据类型,没有占用实际的内存空间,更不能作为数据在表达式中使用。可以使用相应的结构体类型变量来处理数据。系统为变量分配存储单元。结构体类型变量的定义有以下几种方法:1.先定义结构体类型,然后这种结构体类型的变量2.在声明类型的同时定义变量3.在声明类型的同时定义变量,但没有结构体类型名类型与变量的概念说明:(1)类型与变量是不同的概念。对变量赋值、存取、运算,不能对一个类型操作。在编译时,对类型不分配内存空间,只对变量分配内存空间。(2)结构体类型变量可以是全局型、自动型、静态型3种存储类别,没有register存储类别。(3)对结构体类型变量的成员分配存储空间时,是按结构体类型说明的成员顺序进行的。但这些成员的实际存储单元之间有可能是不连续的,这与机器结构有关。变量占用内存的字节数可以用sizeof求出。(4)结构体类型中的成员也可以是一个结构体类型变量。7.1.3结构体类型变量的初始化7.1.4结构体类型变量成员的引用stu1中的成员引用:stu1.namestu1.name[i]stu1.score&stu1.name[i]&stu1.score若成员本身又属一个结构体类型,系统只能对最低级成员进行赋值或存取以及运算。结构体类型成员可像普通变量一样进行各种运算。stu2.score=stu1.score+10.0;sum=stu2.score+stu1.score;注意:两个同类型的结构型变量可以直接互相赋值。stu1=stu2;stu1.birthday=stu2.birthday【例7.1】建立一个简单的学生信息表,包括:姓名、性别、年龄及一门课程的成绩,并显示出来。voidmain(){cout<<"inputname:";cin>>stu.name;cout<<"inputsex:";stu.sex=getchar();cout<<"inputage:";cin>>stu.age;cout<<"inputscore:";cin>>stu.score;cout<<"name:"<<stu.name<<",sex:"<<stu.sex<<",age:"<<stu.age<<",score:"<<stu.score<<endl;7.1.5结构体类型数组的定义和初始化7.1.5结构体类型数组元素的引用voidmain(){inti,n=0;floatave,sum=0.0;for(i=0;i<3;i++){sum+=stu[i].score;if(stu[i].score<60){cout<<stu[i].name<<"不及格"<<endl;n++;}}7.2指向结构体类型数据的指针变量关于结构体类型变量的指针说明如下:2.结构体类型指针变量的引用假设,student型指针变量pstu已指向结构体类型变量stu,则通过pstu可以对stu的成员进行引用pstu->namepstu->name[i]pstu->age&pstu->agepstu->score&pstu->score(*pstu).name(*pstu).name[i](*pstu).age&(*pstu).age(*pstu).score&(*pstu).score总结,引用结构体类型变量的成员的3种方法:结构体类型变量.成员名(*结构体类型指针).成员名结构体类型指针->成员名#include<iostream>#include<iomanip>#include<cstring>usingnamespaces