第08章结构体、共用体和枚举类型

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第8章第8章结构体、共用体和枚举类型问题的提出,二维表格:学号姓名年龄性别成绩1成绩2平均成绩1AA19M8090852BB18F7870743CC17M8175734DD18F8060705EE19M768882…………每行的数据类型不相同,如何表示此二维数据?如何交换两行值?能否将一行看成一个整体?8.1结构体的定义及应用概念行:对象。列:属性。用具体属性值描述一个具体对象。定义一种类型,用于描述一类对象,第8章structstud{intnum;//学号charname[20];//姓名intage;//年龄charsex;//性别intscore;//成绩};保留字结构体名一种新的数据类型,类型标识符为structstud或stud构造类型:由基本类型派生出来,如数组、结构体、共用体8.1.1结构体类型的定义一般形式:struct结构体名{类型名1成员变量1;类型名2成员变量2;....................................类型名n成员变量n;};5个成员第8章说明:(1)结构体类型是一种构造数据类型,它与int,char,float等系统定义的基本数据类型具有同等地位,是由用户自行定义的。(2)系统在使用用户自定义的数据类型的变量时,会根据类型为其分配存储空间。第8章8.1.2结构体类型变量的定义(三种方法)1.在定义结构体类型的同时定义变量structstud{intnum;charname[20];intage;charsex;intscore;}stud1,stud2;2.在结构体类型已定义之后定义变量structstud{intnum;charname[20];intage;charsex;intscore;};[struct]studstud3,stud4;num(4字节)name(20字节)age(4字节)sex(1字节)score(4字节)变量stud1的存储分配占用33字节第8章3.缺省结构体名,直接定义struct{intnum;charname[20];intage;charsex;intscore;}stud5,stud6;特点:只能定义一次此种类型的结构体变量,之后该结构体类型定义就无用了,除非重新定义结构体类型。类型与变量是完全不同的概念。类型:抽象概念,不可赋值、存贮、运算;系统不分配空间。变量:具体对象,可赋值、存贮、运算;系统为其分配空间。应先定义结构类型,再定义该类型的变量。第8章结构体变量的初始化structstudstud1={1000,Wu,19,'M',80},stud2={2000,Li,18,’F',80};8.1.3结构体变量及其成员的使用1.引用整体,如整体赋值structstudstud3,stud4;stud3=stud1;2.引用成员,对于一个具体的结构体变量来说stud1.num---相当于一个整型变量stud1.name--------------字符串stud1.age--------------整型变量stud1.sex--------------字符型变量stud1.score-------------整型变量第8章整体赋值相当于成员逐个赋值stud3.num=stud1.numstrcpy(stud3.name,stud1.name)stud3=stud1;stud3.age=stud1.agestud3.sex=stud1.sexstud3.score=stud1.score3.使用结构体变量的成员,就象使用一个简单变量一样cinstud3.num;//输入coutstud3.numstud3.name;//输出stud3.age=stud2.age+1;//数学运算strcpy(stud3.name,Cheng);//字符串赋值stud3.sex='F';//字符赋值注意:结构体变量不能进行整体输入输出,只能对其基本类型成员输入输出。若要整体输入输出,需用到面向对象部分介绍的运算符重载技术。第8章#includeiostream.hstructcomplex{doublereal;doubleimage;};voidmain(void){complexa={1.0,2.0},b={1.0,2.0},c;couta=(a.real','a.image)\n;coutb=(b.real','b.image)\n;c.real=a.real+b.real;c.image=a.image+b.image;couta+b=(c.real','c.image)\n;}例:定义复数,实现复数加法(请记录)结构体类型的变量也可以作为函数的参数及返回值。改写本例,见下页输出结果:a=(1,2)b=(1,2)a+b=(2,4)第8章#includeiostream.hstructcomplex{doublereal;doubleimage;};complexadd(complexa,complexb)//注意:形参及返回值{complexx;x.real=a.real+b.real;x.image=a.image+b.image;returnx;}voidmain(void){complexa={1.0,2.0},b={1.0,2.0},c;couta=(a.real','a.image)\n;coutb=(b.real','b.image)\n;c=add(a,b);//注意:实参及调用形式couta+b=(c.real','c.image)\n;}例:定义复数,实现复数加法(请记录)结构体类型的变量,可以作为函数的参数和返回值。第8章8.1.4结构体数组1.定义结构体数组一个班30个学生studstuds[30];//stud为已定义的结构体类型含义:30个元素,每个元素都是一个结构体变量studs[0],studs[1],……studs[29]2.结构体数组的初始化studstuds[30]={{1000,Wu,19,'M',80},{2000,Li,18,'F',90},……{2900,Cheng,18,'M',80}};structstud{intnum;/*学号*/charname[20];/*姓名*/intage;/*年龄*/charsex;/*性别*/intscore;/*成绩*/};第8章studs[1]2900“Cheng”‘M’18802000“Li”‘F’18901000“Wu”‘M’1980studs[0]studs[2]…...…...存储状况第8章3.结构体数组元素的引用(1)整体赋值studstud1={…},stud3={…};studstuds[30];studs[0]=stud1;studs[i]=stud3;(2)对每个元素成员的引用studs[0].name,studs[0].agestuds[i].num,studs[i].sex第8章structstud{intnum;charname[20];intage;charsex;intscore;};voidmain(void){studstuds[30]={{1000,Wu,19,'M',80},{2000,Li,18,'F',90},……{2900,Cheng,18,'M',80}};inti,aver=0;for(i=0;i30;i++)aver+=studs[i].score;aver/=30;coutaverendl;}例:求一个班学生的平均成绩第8章★结构体类型数组及数组元素的使用:与一般数据类型相同,可以作为函数的参数及返回值。例:8.2建立一个学生档案的结构体数组,P127输入并输出学生的数据。#includeiostream.hstructstudent{intnum;charname[20];floatscore;};studentInput()//返回结构体变量{studentstud;cout请输入学号、姓名和成绩:;cinstud.numstud.namestud.score;returnstud;}第8章voidOutput(studentstud)//结构体变量做参数{cout学号为stud.num'\n‘姓名为stud.name'\n'成绩为stud.scoreendl;}voidmain(){studentstuds[3];for(inti=0;i3;i++)studs[i]=Input();//返回结构体变量for(i=0;i3;i++)Output(studs[i]);//结构体变量做参数coutendl;}第8章改写例8.2P128#includeiostream.hstructstudent{intnum;charname[20];floatscore;};voidInput(student&stud)//结构体变量的引用做参数{cout请输入学号、姓名和成绩:;cinstud.numstud.namestud.score;}//不需要return语句第8章voidOutput(student&stud)//结构体变量的引用做参数{cout学号为stud.num'\n‘姓名为stud.name'\n'成绩为stud.scoreendl;}//不需要return语句voidmain(){studentstuds[3];for(inti=0;i3;i++)Input(studs[i]);//注意实参for(i=0;i3;i++)Output(studs[i]);//注意实参coutendl;}第8章#includeiostream.hstructstudent{intnum;charname[20];floatscore;};voidInput(studentstuds[],intn){//结构体数组做参数,注意形参的写法for(inti=0;in;i++){cout请输入学生i的成绩:;cinstuds[i].score;//输入部分值}}doubleAverage(studentstuds[],intn)//注意形参{doubleav=0;for(inti=0;in;i++)av+=studs[i].score;return(av/n);}★结构体类型数组做函数的参数:第8章voidOutput(studentstuds[],intn)//注意形参{for(inti=0;in;i++){coutstuds[i].num'\t'studs[i].name'\t'studs[i].scoreendl;}}voidmain(){studentstuds[4]={{101,“Wang”},//初始化部分值{102,Zhang},{103,Cheng},{104,Liu}};doubleaver;Input(studs,4);//结构体数组做参数,注意实参的写法aver=Average(studs,4);Output(studs,4);coutAverage=averendl;}第8章运算符sizeof(类型标识/变量名)—求某类变量所占字节数例shorti;floatx;structstudstud1;sizeof(short)sizeof(i)结果均为2sizeof(float)sizeof(x)结果均为4sizeof(structstud)sizeof(stud)sizeof(stud1)结果均为33实际运行输出36(4的倍数)structstud{intnum;/*学号*/charname[20];/*姓名*/intage;/*年龄*/charsex;/*

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功