欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第7章自定义数据类型.08.ppt

    • 资源ID:5656250       资源大小:244.51KB        全文页数:44页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第7章自定义数据类型.08.ppt

    1,第7章 自定义数据类型,2,本章内容,结构体类型共用体枚举类型用typedef声明类型,3,教学目标,了解结构体类型、共用体类型、枚举类型的概念;掌握结构体类型、共用体类型和枚举类型的定义与方法;会用结构体类型、共用体类型与枚举类型定义变量;会用结构体类型、与枚举类型解决实际问题;,4,定义:,将不同种类型的数据有序地组合在一起,构造出一个新的数据类型,这种形式称为结构体。,结构体是多种类型组合的数据类型。,5,struct 结构体名 成员列表;,struct student int num;char name20;char sex;char addr30;,结构体名,关键字,不同数据类型组成的成员,分号不能少,6,定义结构体类型变量的方法,一、先定义结构体类型再定义变量名,struct student int num;char name20;char sex;int age;float score;char addr30;,student student1,student2;,结构体类型名,变量1,变量2,结构体类型只是一种数据类型,不占内存空间,只有定义结构体类型变量时才开辟内存空间。,7,二、在定义类型的同时定义变量,struct student int num;char name20;char sex;int age;float score;char addr30;student1,student2;,struct 结构体名 成员列表 变量名列表;,紧接着定义变量,8,三、直接定义结构体类型变量(不提倡),struct int num;char name20;char sex;int age;float score;char addr30;student1,student2;,struct 成员列表 变量名列表;,不出现结构体名。,9,2、在编译时,仅对变量分配空间,不对类型分配空间。,1、结构体类型的变量在内存依照其成员的顺序顺序排列,所占内存空间的大小是其全体成员所占空间的总和。,3、对结构体中各个成员可以单独引用、赋值,其作用与变量等同。,格式:变量名.成员名 student1.num,“.”是成员运算符,它在所有运算符中优先级别最高,因此可以把student1.num当作一个整体来看待。,10,4、结构体的成员可以是另一个结构体类型。,struct date int month;int day;int year;,struct student int num;char name20;date birthday;,成员类型,成员名,5、成员名可以与程序中的变量名相同,二者分占不同的内存单元,互不干扰。例如,在程序中仍可以定义变量 int num;,11,对局部变量类型的结构体变量初始化,void main(void)struct student long int num;char name20;char sex;char addr30;student1=9063101,“Li Lin”,M,“123 Beijing Road”;coutstudent1.nameendl;,对变量初始化,一一赋值,(1)在定义时给变量赋初值,(2)也可以用声明类型与定义变量分开的形式,在定义变量时进行初始化;,student student1=9063110,”wang hong”,F,”chang zhou”;,12,结构体类型变量的引用(P205),1、不能对结构体变量整体输入或输出,只能分别对各个成员引用。,cinstudent1;,cinstudent1.num;student1.num=100;,可以将一个结构体变量整体赋给另外一个相同类型的结构体变量。student2=student1;,2、嵌套的结构体变量必须逐层引用。,student1.birthday.day=25;,3、结构体变量中的成员可以同一般变量一样进行运算。,student1.birthday.day+;student1.score+=60;,错误,必须用成员名引用,“.”是成员运算符,它在所有运算符中优先级别最高,因此可以把student1.num当作一个整体来看待。,13,引用结构体变量中的成员(应用),#include using namespace std;struct Date int month;int day;int year;struct Student int num;char name20;char sex;Date birthday;float score;student1,student2=10002,Wang Li,f,5,23,1982,89.5;,int main()student1=student2;coutstudent1.numendl;coutstudent1.nameendl;coutstudent1.sexendl;coutstudent1.birthday.month/student1.birthday.day/;coutstudent1.birthday.yearendl;coutstudent1.scoreendl;return 0;,14,关于结构类型变量的使用,说明以下几点:1、同类型的结构体变量之间可以直接赋值。这种赋值等同于各个成员的依次赋值。2、结构体变量不能直接进行输入输出,它的每一个成员能否直接进行输入输出,取决于其成员的类型,若是基本类型或是字符数组,则可以直接输入输出。3、结构体变量可以作为函数的参数,函数也可以返回结构体的值。当函数的形参与实参为结构体类型的变量时,这种结合方式属于值调用方式,即属于值传递。,15,结构体数组,结构体数组中的每个元素都是一个结构体类型的变量,其中包括该类型的各个成员。数组各元素在内存中连续存放。,16,一、结构体数组的定义,struct student int num;char name20;char sex;int age;float score;char addr30;student stu30;,struct student int num;char name20;char sex;int age;float score;char addr30;stu30;,直接定义,17,二、结构体数组的初始化,struct student int num;char name20;char sex;stu3=1011,Li Lin,M,1012,Wang Lan,F,1013,Liu Fang,F;,指定元素个数,给数组初始化,18,struct student int num;char name20;char sex;stu=1011,Li Lin,M,1012,Wang Lan,F,1013,Liu Fang,F;,不指定元素个数,给数组初始化,一个结构体常量应该包括结构体中全部成员的值。,19,以下程序的结果是:,/ceshi7-1int main(void)struct date int year,month,day;today;coutsizeof(date)endl;coutsizeof(today)endl;return 0;,12,20,根据下面的定义,能打印出字母M的语句是:,struct person char name9;int age;person class4=“Jone”,17,“Paul”,19,“Mary”,18,“Adam”,16;coutclass3.nameendl;coutclass3.name1endl;coutclass2.name1endl;coutclass2.name0endl;,输出:Adam,输出:d,输出:a,输出:M,21,例7.2 对候选人得票统计程序。设有3个人,最终只能1人当选为领导。今有10人参加投票,从键盘输入10人所投的候选人的姓名,要求最后输出这3个候选人的得票结果。(使用字符数组),#include#include using namespace std;struct Person char name20;int count;int main()Person leader3=Li,0,Zhang,0,Fu,0;int i,j;char leader_name20;,for(i=0;ileader_name;for(j=0;j3;j+)if(strcmp(leader_name,leaderj.name)=0)leaderj.count+;coutendl;for(i=0;i3;i+)cout leaderi.name:“leaderi.count endl;return 0;,22,例7.2 对候选人得票统计程序。设有3个人,最终只能1人当选为领导。今有10人参加投票,从键盘输入10人所投的候选人的姓名,要求最后输出这3个候选人的得票结果。(使用字符串),#include#include using namespace std;struct Person string name;int count;int main()Person leader3=Li,0,Zhang”,0,Fan,0;int i,j;string leader_name;,for(i=0;ileader_name;for(j=0;j3;j+)if(leader_name=leaderj.name)leaderj.count+;coutendl;for(i=0;i3;i+)cout leaderi.name:“leaderi.count endl;return 0;,23,指向结构体变量的指针,一个结构体变量的指针就是该变量所占据的内存段的起始地址.可以用一逐步形成指针变量,用来指向一个结构体变量。通过指针变量引用结构体变量中的成员;(*指针变量).成员 指针变量成员,24,例7.3指向结构体变量的应用,#include#include using namespace std;int main()struct student int num;string name;char sex;float score;student stu;student*p=,stu.name=Wang Fun;stu.sex=f;stu.score=89.5;coutnumnamesexscoreendl;return 0;,25,共用体(不作介绍),C+语言中,允许不同的数据类型使用同一存储区域,即同一存储区域由不同类型的变量共同表示。这种数据类型就是共用体。,union 共用体名 成员表列;变量表列;,union data int i;char ch;float f;a,b,c;,union data a,b,c;,这几个成员在共用体变量中存放在同一地址,相互覆盖,其长度为最长的成员的长度。,26,共用体变量的引用,不能整体引用共用体变量,只能引用变量中的成员。,a.i 表示为整型a.ch 表示为字符型a.f 表示为符点型,27,共用体变量的特点,1、共用体的空间在某一时刻只有一个成员在起作用。,2、共用体变量中的成员是最后一次放入的成员。,3、共用体变量不能在定义时赋初值。,4、共用体变量不能作为函数的参数或函数值,但可使用指向共用体的指针变量。,5、共用体可以作为结构体的成员,结构体也可以作为共用体的成员。,28,union un int i;double y;struct st char a10;union un b;coutsizeof(struct st)endl;,18,29,/ceshi7-2union un short int a;char c2;w;w.c0=A;w.c1=a;coutoctw.aendl;cout decw.aendl;,低字节低地址高字节高地址,a,A,w.c1,w.c0,2000H,2001H,输出:060501,a,65?,56?,30,int main(void)union EXAMPLE struct int x;int y;in;int a,b;e;e.a=1;e.b=2;e.in.x=e.a*e.a;e.in.y=e.b+e.b;coute.in.xte.in.yendl;return 0;,in,x,y,a,b,b,1,2,4,8,输出:4 8,31,枚举类型,如果一个变量只有几种可能的值,可以定义为枚举类型。,枚举类型就是将变量的值一一列举出来,变量的值仅限于列举出来的值的范围内。,32,enum weekday sun,mon,tue,wed,thu,fri,sat;,weekday workday,weekend;,workday 和 weekend 值只能是sun 到 sat 其中之一。,enum sun,mon,tue,wed,thu,fri,sat workday,weekend;,其中sun,mon,.,sat称为枚举元素或枚举常量,为用户定义的标识符,所代表的意义由用户决定,在程序中体现出来。,数据类型,可能取的值,变量,另一种定义变量的方法,33,1、枚举元素为常量,不可赋值运算。sun=0;mon=1;,2、在定义枚举类型的同时,编译程序按顺序给每个枚举元素一个对应的序号,序号从0开始,后续元素依次加1。,enum weekday sun,mon,tue,wed,thu,fri,sat;0,1,2,3,4,5,6,3、可以在定义时人为指定枚举元素的序号值。,enum weekday sun=9,mon=2,tue,wed,thu,fri,sat;9,2,3,4,5,6,7,4、只能给枚举变量赋枚举值,若赋序号值必须进行强制类型转换。,day=mon;day=1;day=weekday(1);,34,5、枚举元素可以用来进行比较判断。,if(workday=mon)if(workdaysun),6、枚举值可以进行加减一个整数n的运算,得到其前后第n个元素的值。,workday=sun;workday=(weekday)(workday+2);,workday=tue,7、枚举值可以按整型输出其序号值。,workday=tue;coutworkday;,2,35,/ceshi7-3int main(void)enum team qiaut,cubs=4,pick,dodger=qiaut-2;coutqiauttcubst;coutpicktdodgerendl;return 0;,输出:0,4,5,-2,36,例7-8 口袋中有红、黄、蓝、白、黑5种颜色的球若干个。每次从口袋中任意取出3个球,问得到3种不同颜色的球的可能取法,输出每种排列情况。,分析:球的颜色只有5种,每一个球的颜色只能是这5种中的一种,因此可以用枚举类型来处理。设每次取出的球的颜色分别是i,j,k,显然I,j,k都是以上5种颜色之一,根据题意,要求I,j,k三者互不相同,可以用穷举法,对每一种颜色分别进行测试,看哪一组符合条件。,37,例7-8(续),#include#include using namespace std;int main()enum color red,yellow,blue,white,black;color pri;int i,j,k,n=0,loop;for(i=red;i=black;i+)for(j=red;j=black;j+)if(i!=j)for(k=red;k=black;k+)if(k!=i),for(loop=1;loop=3;loop+)switch(loop)case 1:pri=color(i);break;case 2:pri=color(j);break;case 3:pri=color(k);break;default:break;switch(pri)case red:cout setw(8)red“;break;case yellow:cout setw(8)yellow“;break;case blue:cout setw(8)blue“;break;case white:cout setw(8)white“;break;case black:cout setw(8)black“;break;default:break;,38,例7-8(续),coutendl;couttotal:nendl;return 0;,39,本章小结,结构体是由若干个数据成员导出 的自定义数据类型,声明结构时不产生内存空间的分配,只在定义变量时,才分配内存空间;一般格式:struct 结构体名 成员列表;枚举类型 是某种数据可能的取值的集合;每个元素都有一个序号值与之对应,该序号值可以在定义枚举类型时赋给元素,也可取其默认序号,默认序号从0开始依次加1。枚举类型变量可进行赋值运算与比较运算。枚举类型变量不能用cin输入赋值,只能用赋值运算符给其赋值;可以用cout输出其值,输出的是其序号而不是元素值。,40,实验6 自定义数据类型,一、实验目的:掌握结构体类型、结构体变量、结构体数组的定义格式;学会使用结构体变量与结构体数组处理如投票、学生成绩处理等问题;初步学会用枚举类型变量处理有限元素组成的集合问题;二、实验内容题1:模仿例7.2处理4个候选人得票统计情况。假设四名候选人姓名分别是“Wang”、”Liu”、”Fang”、”Hu”等,有15人投票,请统计出各人的得票数。题2:(P227)课后习题5题3:模仿例7.8:从A、B、C、D四个字母中任取3个不同的字母;共有多少种取法?编写程序,输出所有字母排列。,41,实验题1:,#include#include using namespace std;struct person char name10;int count;int main()person leader4=Wang“,0,Liu“,0,Fang“,0,Hu“,0;int i,j;string leader_name;,for(i=1;ileader_name;for(j=0;j4;j+)if(leader_name=leaderj.name)leaderj.count+;cout endl;for(j=0;j4;j+)cout leaderj.name:“leaderj.count endl;return 0;,42,实验题2:(课后习题5),#include#include using namespace std;const int n=10;struct student char num6;char name8;int score4;float avr;stun;,int main()int i,j,max,maxi,sum;float average;for(i=0;istui.num;coutstui.name;for(j=0;jstui.scorej;coutendl;,43,average=0;max=0;maxi=0;for(i=0;imax)max=sum;maxi=i;average/=n;,cout NO.name score1 score2 score3 averageendl;for(i=0;in;i+)coutsetw(8)stui.num setw(10)stui.name;for(j=0;j3;j+)coutsetw(3)stui.scorej;coutstui.avrendl;coutaverage=averageendl;coutThe highest score is:stumaxi.name,score total:maxendl;return 0;,44,实验题3:,#include#include using namespace std;int main()enum letter A,B,C,D;letter let;int i,j,k,n=0,loop;for(i=A;i=D;i+)for(j=A;j=D;j+)if(I!=j)for(k=A;k=D;k+)if(i!=k),for(loop=1;loop=3;loop+)switch(loop)case 1:let=letter(i);break;case 2:let=letter(j);break;case 3:let=letter(k);break;default:break;switch(let)case A:coutsetw(5)A;break;case B:coutsetw(5)B;break;case C:coutsetw(5)C;break;case D:coutsetw(5)D;break;default:break;coutendl;couttotal:nendl;return 0;,

    注意事项

    本文(第7章自定义数据类型.08.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开