1、,Visual C+程序设计,第7章 结构体,7.1 结构体类型的概念及定义 7.2 结构体类型变量的定义及初始化 7.3 结构体类型变量及其成员的使用 7.4 结构体类型的数组,第7章 结构体,7.1.1 结构体类型(结构体)的概念像数组一样,结构体类型是一种导出型数据类型,与数组不同的是,其组成部分(数组中称为元素,结构体中称为成员)的数据类型可以不同。结构体类型简称结构体。 7.1.2 结构体的定义 1. 定义格式 struct 结构体名称 成员列表 ;成员列表由组成结构体的各个成员组成,每个成员都是一条变量说明语句。,7.1 结构体类型的概念及定义,2. 定义时注意: (1)定义结构体
2、的关键字是struct; (2)结构体名称应为合法标识符; (3)每条成员说明语句都包含成员的数据类型和名称; (4)除static类型外,不能指定成员的存储类型; (5)成员不能初始化; (6)成员应包含在一对 “ ” 内,并且 不要遗漏“ ”后的 语句结束符(“ ;”)。 例7-1 定义一个描述学生信息的结构体student,学生信息包含学号、姓名、性别、英语和数学成绩。,7.1 结构体类型的概念及定义,7.1 结构体类型的概念及定义,struct studentint id;char name17;char sex;float english,math; ;,例7-1 定义一个描述学生信
3、息的结构体student,学生信息包含学号、姓名、性别、英语和数学成绩。,结构体是一种数据类型,不能存储数据,数据应该 保存在结构体类型的变量(简称结构体变量)中。 7.2.1 结构体变量的定义格式 结构体变量的定义格式与基本变量相似: 存储类型 数据类型(结构体) 结构体变量名称; 7.2.2 结构体变量的定义方法 1. 先定义结构体,再定义结构体变量。如: struct Point /定义结构体Point float x,y; ;Point p1; /定义结构体变量p1 Point p2,p3; /定义结构体变量p2、p3,7.2 结构体类型变量的定义及初始化,2. 在定义结构体的同时定义
4、结构体变量。如: struct Date int y,m,d; d1,d2; 在定义结构体Date的同时定义了结构变量d1、d2。3. 不指出结构体的名称,直接定义结构体变量。如: suruct float real,image; r1,r2;结构体变量的存储空间,7.2 结构体类型变量的定义及初始化,d1的存储空间 y m d,7.2.3 结构体变量的初始化 与基本变量一样,在定义结构体变量时,可以对其初始化,方法有: 1. 用数据列表初始化。如: Date d1=2010,10,21;,7.2 结构体类型变量的定义及初始化,d1的初始化 y m d,2010 10 21,2. 用同类型变量
5、初始化。如: Date d2=d1;,d2的初始化 y m d,2010 10 21,结构体变量除了可以进行同类型变量的整体赋值外, 只能使用其成员(面向成员)。 7.3.1 结构体变量的成员使用格式 结构体变量名成员名 7.3.2 结构体变量的使用方法 1. 同类型变量之间的赋值。如: Date d1=2010,10,21,d2; d2=d1; 注意,如下的使用都是错误的: d2=2010,10,21; cind2; coutd1; /不能整体输入输出 struct int y,m,d;d3; d3=d1; /d1和d3是两个不同类型的变量,7.3 结构体类型变量及其成员的使用,2. 通过成
6、员使用结构体变量。如: d2.y=2010; d2.m=10; d2.d=21; cind2.yd2.md2.d; coutd2.y/d2.m/d2.dn;3. 结构体可以像基本类型一样作为函数的类型或函数参数的类型。例7-2 设计一个程序求三维空间两点之间的距离,要求如下: (1)用实型变量x、y、z表示三维空间点Point的坐标; (2)定义函数Point input()输入点的坐标; (3)定义函数void print(Point p)输出点的坐标; (4)定义函数double distance(Point p1,Point p2)求两点之间的距离。,7.3 结构体类型变量及其成员的使用
7、,#include #include struct Pointdouble x,y,z; ; Point input() Point p;coutp.xp.yp.z;return p; ,void print(Point p) cout“点的坐标为:“; ;cout(p.x,p.y,p.z“)n“; ,7.3 结构体类型变量及其成员的使用,double distance(Point p1,Point p2) double dx=p1.x-p2.x; double dy=p1.y-p2.y; double dz=p1.z-p2.z; double d=sqrt(dx*dx+dy*dy+dz*dz
8、); return d; ,void main(void) Point p1,p2; p1=input(); p2=input(); print(p1); print(p2); cout“两点之间的距离为:“; coutdistance(p1,p2)n; ,7.3 结构体类型变量及其成员的使用,结构体数组是指每个元素都是结构体变量的数组, 其使用应遵循数组和结构体的规则。与基本类型一样,结构体变量作为函数参数属于值传递,而结构体数组作为函数参数属于地址传递。例7-3 设计一个程序,用结构体数组管理容量为100个学生的档案。具体要求如下: (1)学生(student)档案信息包含姓名(name)
9、、性别(sex)、年龄(age)和成绩(score); (2)定义函数void input(student s,int n)输入档案; (3)定义函数void print(student s,int n)输出档案; (4)在主函数中定义结构体数组stu,输入学生人数num,并通过调用input和print函数完成档案的输入、输出管理。,7.4 结构体数组,#include struct studentchar name17;char sex4;int age;float score; ;,void input(student s,int n) coutsi.namesi.sexsi.agesi.score; coutn; ,7.4 结构体数组,void print(student s,int n) cout“学生信息如下:n“;cout“姓名t性别t年龄t成绩:n“;for(int i=0;in;i+) coutsi.nametsi.sextsi.agetsi.scoren; ,void main(void) student stu100;int num;coutnum;input(stu,num);print(stu,num); ,P.135 6. 7.,作业,