结构体、共用体和枚举类型.ppt
《结构体、共用体和枚举类型.ppt》由会员分享,可在线阅读,更多相关《结构体、共用体和枚举类型.ppt(71页珍藏版)》请在三一办公上搜索。
1、第10章 结构体、共用体和枚举类型,本章要点,了解结构了解关于结构的各种操作理解怎样使用结构操作数据理解结构和函数之间的关系、掌握结构作为参数传递与返回结构的函数方法理解结构中数组的用法理解怎样创建结构数组了解共用体的特点了解枚举类型,问题的提出,学号 姓名 年龄 性别 成绩1 成绩2 平均成绩 1 AA 19 M 80 90 90 2 BB 18 F 78 70 73 3 CC 17 M 81 75 79 4 DD 18 F 80 60 75 5 EE 19 M 76 83 83,每行的数据类型不相同,如何表示此二维数据?如何交换两行值?能否将一行看成一个整体?,定义一种类型,把不同的数据作
2、为一个整体来处理结构体,数据类型,数组-有相同类型的数据集合结构体-不同类型的数据集合,构造数据类型:由简单数据类型(int、float、char)组合而成的(有机整体)数据类型。,基本类型:整型、实型、字符型.,主要内容,结构体类型的定义结构体类型的变量和结构体类型数组共用体枚举类型,结构体类型的定义,定义了一种新的数据类型 struct 结构体名或结构体名,struct 结构体名 类型标识符 成员名1 类型标识符 成员名2.类型标识符 成员名n;,可为简单类型也可为构造类型,不能少,例,以学生档案为例,假设包括如下数据项 学号(num):整型 姓名(name):字符串 性别(sex):字符
3、型 出生日期(birthday):date结构体 四门课成绩(sc):一维实型数组,例,依此格式定义上例struct date int year,month,day;struct student int num;char name12;char sex;date birthday;float sc4;,如struct date 没事先说明可写成:struct student int num;char name12;char sex;struct int year;int month;int day;birthday;float sc4;,例,例1:一组相关变量 定义结构体类型,新数据类型,结构
4、体成员,int month;int day;int year;,struct date int year;int month;int day;,不同数据类型的成员,例2:一组相关变量 定义结构体类型,说明,(1)结构体类型是一种构造数据类型,它与int,char,float等系统定义的基本数据类型具有同等地位,是由用户自行定义的。,(2)结构体类型不分配任何存储空间。相应结构体类型的变量、数组及动态开辟的存储单元占存储空间。,构造的数据类型可以用来定义变量,结构体类型的变量和数组的定义方法,先定义结构体类型,再单独进行定义在定义类型的同时定义结构体变量在定义一个无名结构体类型的同时,直接进行定
5、义,方法一,先声明结构体类型再定义结构体变量,struct 结构体名 成员列表;struct 结构体名 变量名列表;或结构体名 变量名列表,例,struct student int num;char name12;char sex;date birthday;float sc4;struct student std,pers3;或student std,pers3;,std:结构体变量pers:结构体数组,(三个元素均为结构体类型变量),变量std的结构,birthday,注意:各成员按顺序排列,方法二,在声明类型的同时定义结构体变量,struct student int num;char n
6、ame12;char sex;struct date birthday;float sc4;std,pers3;,struct 结构体名 成员列表 变量名列表;,struct int num;char name12;char sex;date birthday;float sc4;std,pers3;,方法三,直接定义结构体变量,struct 成员列表 变量名列表;,无结构体名,结构体类型的几点说明,结构体中的成员可以象变量一样使用。,成员名可以与程序中的变量同名,结构体中的成员也可为结构体变量,类型与变量是完全不同的概念。先定义结构类型,再定义变量为该类型。类型:不可赋值、存贮、运算;系统不
7、分配空间。变量:可赋值、存贮、运算;系统要分配空间。,结构体类型变量初值,struct student int num;char name12;char sex;date birthday;float sc4;std=10101,LiMing,M,1962,5,10,88,76,85.5,90;,注意:一一对应赋初值,不允许跳跃赋值。可只给前面的成员赋值,给结构体数组赋初值,数组中的每个元素是一个结构体类型的数据,因此将此成员的值依次放在一对花括号中,例:struct bookcard char num5;float money;bk3=NO.1,35.5,NO.2,25.0,NO.3,66.
8、7;,给二维结构体数组赋初值例,struct char ch;int i;float x;arr23=a,1,3e10,a,2,4e10,a,3,5e10,b,1,6e5,b,2,7e5,b,3,8e5;,结构体类型变量及其成员的引用,两种方式引用成员结构体变量名.成员名引用整体struct t int i,j;char name10;t t1=12,48,LiLi,t2;t2=t1;其中“t2=t1;”等同于:t2.i=t1.i;t2.j=t1.j;strcpy(t2.name,t1.name);,结构体变量的成员可以像普通变量一样进行各种运算,如stud1.num+、stud1.sex=s
9、tud2.sex;,结构体变量不能进行整体输入输出,优先级:1 结合性:左 例:有定义:struct date 对变量today作成员选择运算:int year;today.year int型 int month;today.month int型 int day;today.day int型 today;成员选择运算的结果是得到了该结构变量的某个成员,其数据类型是定义该结构体类型时成员列表中定义的类型。,成员运算符“.”,例,struct data int month;int day;int year;struct student char name20;char sex;data birth
10、day;int sc4;std,arr5;,(1)引用sex std.sex(通过结构体变量引用),引用arr0中的sex:arr0.sex不能写作 arr.sex,例,struct data int month;int day;int year;struct student char name20;char sex;data birthday;int sc4;std,arr5;,(2)引用sc中的元素,如sc1std.sc1(通过结构体变量引用),不能写成std.scC+语言不允许对数组整体访问(字符串除外),例,struct data int month;int day;int year;
11、struct student char name20;char sex;data birthday;int sc4;std,arr5;,(3)成员为字符串如name std.name(通过结构体变量引用)arr0.name,例,struct data int month;int day;int year;struct student char name20;char sex;data birthday;int sc4;std,arr5;,(4)内嵌结构体成员的引用逐层使用成员名定位引用std中的出生年份std.birthday.year,只可引用最低一级成员,例std.name是字符串,可以对
12、它进行对任何字符串允许的操作,包括输入输出。,对结构体变量中的每个成员,可对它进行同类变量所允许的任何操作。,对结构体变量中的成员进行操作,例,struct data int month;int day;int year;struct student char name20;char sex;data birthday;int sc4;std,pers5;,(1)对name的操作cinstd.name;或cin.getline(std.name,80);(2)对sex的操作cinstd.sex;for(i=0;ipersi.sex;std.sex=M;,注意:不能写成std.name=Li M
13、ing,struct data int month;int day;int year;struct student char name20;char sex;data birthday;int sc4;std,pers5;,例,(3)对birthday中year的操作cinstd.birthday.year;std.birthday.year=1962;,结构体数组,struct studentint num;char name20;char sex;int age;float score;char addr30;stud4=23901,Zang Li,F,19,78.5,35 Shangha
14、i Road,23902,Wang Fang,F,19,92,101 Taiping Road,23905,Zhao Qiang,M,20,87,56 Ninghai Road,23908,Li Hai,M,19,95,48 Jiankang Road;,内存存储情况,stud0,stud1,结构体数组的应用,问题:建立一个学生档案的结构体数组,输入并输出学生的信息。#include/li0802_2.cpp 输入输出学生信息#include struct studentchar num16;char name20;float score;student Input(student stud)
15、coutstud.numstud.namestud.score;return stud;,结构体数组的应用,void Output(student stud)coutsetw(10)stud.numsetw(10)stud.name setw(10)stud.scoreendl;void main()student studs3;for(int i=0;i3;i+)studsi=Input(studsi);coutsetw(10)学号setw(10)姓名setw(20)程序设计成绩 endl;for(i=0;i3;i+)Output(studsi);coutendl;,传值调用,演示,引用调用
16、,#include/输入输出学生信息#include struct studentchar num16;char name20;float score;void Input(student,引用调用,void Output(student,求若干学生的平均成绩,struct stud int num;char name20;int age;char sex;int score;,#include float average(stud studs,int n)float aver=0;for(int i=0;in;i+)aver+=studsi.score;aver/=n;return aver
17、;void main(void)stud studs4=020110101,Wu,19,M,80,;float aver;aver=average(studs,4);cout 平均成绩为:aver endl;,结构体变量所占字节数,结果均为2,sizeof(float)sizeof(x),结果均为4,sizeof(struct stud)sizeof(stud)sizeof(stud1),结果均为33 实际运行输出36(4的倍数),struct stud int num;/*学号*/char name20;/*姓名*/int age;/*年龄*/char sex;/*性别*/int score
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 结构 共用 枚举 类型

链接地址:https://www.31ppt.com/p-2204158.html