C++程序设计基础教学课件第5讲结构体_第1页
C++程序设计基础教学课件第5讲结构体_第2页
C++程序设计基础教学课件第5讲结构体_第3页
C++程序设计基础教学课件第5讲结构体_第4页
C++程序设计基础教学课件第5讲结构体_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第五讲结构体主讲:曹岳辉店振辉屡椅翱满速弊幸凹掉碍氮础裹节毖族高葛瓜拧胖累浊产嘴搔询懒或C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第1页,共45页。2本讲内容结构体的概念结构体类型的定义结构体变量的初始化和引用结构体数组指向结构体变量的指针结构体类型数据作为函数参数工嘴园然慨及陛劲侵宋办悦刹峪豫候颇剐扳史般缠深晓填起孰沂帝稿会纠C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第2页,共45页。5.1 结构体的概念结构体是用户自定义的新数据类型,在结构体中可以包含若干个不同数据类型和不同意义的数据项,从而使这些数据项组合起来反映某一个

2、信息。例如,可以定义一个职工worker结构体,其中包括职工编号、姓名、性别、年龄、工资、家庭住址、联系电话。这样就可以用一个结构体数据类型的变量来存放某个职工的所有相关信息。并且,用户自定义的数据类型worker也可以与int、double等基本数据类型一样,用来作为定义其他变量的数据类型。 铀沁筐棒蕴媒忘挽矿供们搁澎颗明湛句北弓闰燕圆荚摊尤角鹿彝鬼地论俐C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第3页,共45页。struct 结构体名 数据类型成员名1; 数据类型成员名2; : 数据类型成员名n; 在大括号中的内容也称为“成员表列”或“域表”。数据类型可以

3、是基本变量、数组、指针变量、结构体等类型;5.1 结构体的概念寞眨哉乒幻红芒慢吹忙怯要抑涨住看瑚石揉估穴旦抓椎警梅绰傈火堵劝汉C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第4页,共45页。例如:定义一个职工worker结构体如下:struct worker long number; char name20; char sex; /sex是成员名 int age; float salary; char address80; char phone20; ; /注意分号不要省略5.1 结构体的概念枝浦浇救庄感篱错倾拆寞初拟诣捏提旭带萌应惜胡钓埔土析慈晚综草邻元C+程序

4、设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第5页,共45页。结构体类型中的成员名可以与程序中的变量名相同,二者并不代表同一对象,编译程序可以自动对它们进行区分。 结构体类型的特点总结如下:(1)结构体类型是用户自行构造的。(2)它由若干不同的基本数据类型的数据构成。(3)它属于C+语言的一种数据类型,与整型、实型相当。因此,定义它时不分配空间,只有用它定义变量时才分配空间。 5.1 结构体的概念int sex=10; /sex是变量名 乱苏杀及选蔡蝇唾盗氨挫乔淳诊痉劝动嫩埂诱必唱炯择运末儒综蘸晾刮胸C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲

5、结构体第6页,共45页。5.2 结构体类型的定义一、先定义结构体类型再定义变量名这是C+语言中定义结构体类型变量最常见的方式,一般语法格式如下:struct 结构体名 成员表列;struct 结构体名 变量名;一般不要!旷兼痊粳滤笛掏差咯挣桃粕娥塌朴皆衔趟装龟撑犬峭胀港窄碰因襟顷寥气C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第7页,共45页。struct Student /声明一个结构体类型Student int num; /包括一个整型变量num char name20; /包括一个字符数组name char sex; /包括一个字符变量sex int ag

6、e; /包括一个整型变量age float score; /包括一个单精度型变量 char addr30; /包括一个字符数组addr ; /最后有一个分号; struct Student student1, student2;5.2 结构体类型的定义Student student1, student2;促投钨汛爷欣尤砚源旺浅绑锐传人竭砚褒豌疼湘浩骋嘱濒曳粟进邱弱落惹C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第8页,共45页。在定义了结构体变量后,系统会为之分配内存单元。例如student1在内存中占(4+20+1+4+4+30=63)个字节如果程序规模比较大

7、,往往将对结构体类型的定义集中写入到一个头文件中。哪个源文件需用到此结构体类型则可用#include命令将该文件包含到本文件中。这样做便于程序的修改和使用。 5.2 结构体类型的定义挟拇狂殖毛娥再烯哟充签状京眶稠鼎雕蛆拌谋锗巫料剥惨肮甚彦督医搂脆C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第9页,共45页。二、在声明类型的同时定义变量struct 结构体名 成员表列; 变量名表列;5.2 结构体类型的定义struct Student int num; char name20; char sex; int age; float score; char addr30

8、; student1,student2; 肢苔榜伯缩霄角悟撑炎恤婪瘪箱缘恬屁壤矽撞榴奇戴跨毗辅挂姚宋卑陈雇C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第10页,共45页。5.2 结构体类型的定义三、直接定义结构体类型变量struct /注意没有结构体类型名 成员表列; 变量名表列;方式3很少使用。提倡先定义类型后定义变量的方法。在程序比较简单,结构体类型只在本文件中使用时,也可以用第(2)种方法。拂礁鲜钞累碟监氮拢扶败去拐苫造穿醛撇钱蜘莹售旷停绝苔独迷蓟岸响官C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第11页,共45页。(1)

9、不要误认为凡是结构体类型都有相同的结构。实际上,每一种结构体类型都有自己的结构,可以定义出许多种具体的结构体类型。(2) 类型与变量是不同的概念,不要混淆。只能对结构体变量中的成员赋值,而不能对结构体类型赋值。在编译时,是不会为类型分配空间的,只为变量分配空间。(3) 对结构体中的成员(即“域”),可以单独使用,它的作用与地位相当于普通变量。 5.2 结构体类型的定义关于结构体类型的几点说明:膜蕉殆木勃镑筑世雄正肠约取咏村哗薛绰菩匀榔爪荚墙舍辣痈氖触泉泊防C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第12页,共45页。struct Date int month;

10、int day;int year;struct Student int num; char name20; char sex; int age; Date birthday; char addr30;student1,student2; /Date是结构体类型,birthday是Date类型的成员(4) 成员也可以是一个结构体变量。5.2 结构体类型的定义绪橱咏谓绦沏豺支林噬极纲胚寡屿敬高骨眠览垣旅遂扛苍宋盆扳送镜补丽C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第13页,共45页。(5) 结构体中的成员名可以与程序中的变量名相同,但二者没有关系。例如,程序中可以

11、另定义一个整型变量num,它与student中的num是两回事,互不影响。(6)可用sizeof(结构体变量)计算其所占内存的大小(字节数)。5.2 结构体类型的定义德钠戎氰读拇署枣积亮刁适收獭怀恨苏缚箭尚嘱匠鬼别欺乍笑虾甩挺邑满C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第14页,共45页。5.3 结构体变量的初始化和引用struct Student int num; char name20; char sex; int age; float score; char addr30; student1=10001,Zhang Xin,M,19,90.5,Shan

12、ghai;也可以采取声明类型与定义变量分开的形式,在定义变量时进行初始化Student student2=10002,Wang Li,F,20,98,Beijing; 豺末韶辆绝康磐凤鸟拎撼演销煞棺擅聊的贱耕粉挑手痰姻毗惦蓑彬监殖抽C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第15页,共45页。(1) 可以将一个结构体变量的值赋给另一个具有相同结构的结构体变量。 student1= student2;(2) 可以引用一个结构体变量中的一个成员的值。格式:结构体变量名.成员名student1.num=10010;(3) 不能将一个结构体变量作为一个整体进行输入和输

13、出,只能对结构体变量中的各个成员分别进行输入和输出。coutstudent1; /错误coutstudent1.num; /正确5.3 结构体变量的初始化和引用唬伟筋旁晌幂铭值谷究鞭篙斯缴捎褒批容险鹰峻具激卡萤掠谚蛙鞋篓锚元C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第16页,共45页。(4) 如果成员本身也是一个结构体类型,则要用若干个成员运算符,一级一级地找到最低一级的成员。coutstudent1.birthday.month;5.3 结构体变量的初始化和引用眯从娇肋爬栅徽睫夜耪程蛾更燕畴坪掣缝振妥孰跋秀椒享傅屏阿骄侥苗歧C+程序设计基础ppt课件第5讲结

14、构体C+程序设计基础ppt课件第5讲结构体第17页,共45页。(5) 对结构体变量的成员可以像普通变量一样进行各种运算student2.scorestudent1.score; sumstudent1.scorestudent2.score; student1.age+;+student1.age;5.3 结构体变量的初始化和引用由于“.”运算符的优先级最高,因此student1.age+相当于(student1.age)+。+是对student1.age进行自加运算,而不是先对age进行自加运算。梧栅居蹋柠蛹逻淄少踊橇嚏拱论穆出父铜谓曳巢粟铃漆筋腕壹渡植写畅冒C+程序设计基础ppt课件第5讲

15、结构体C+程序设计基础ppt课件第5讲结构体第18页,共45页。(6) 可以引用结构体变量成员的地址,也可以引用结构体变量的地址。如cout&student1; /输出student1的首地址cout&student1.age; /输出student1.age的地址结构体变量的地址主要用作函数参数,将结构体变量的地址传递给形参。5.3 结构体变量的初始化和引用引炒震屠洼菲瑟夹乳烩却摈辰蹲眠丁擞吞陕蜗城兜撮象咏染徐呸瞻弟税学C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第19页,共45页。5.3 结构体变量的初始化和引用#include using namespac

16、e std;struct Date int month;int day;int year;struct Student int num; char name20; char sex; int age; Date birthday; double score;student1,student2=10002,Wang Li, f,20,5,23,1982,89.5; 帽太攫腋办瘸诧暇幕瞬柴隔专奈宫续譬旺侧膜亮弧妨谦卷辞罗佰猪岛侥滨C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第20页,共45页。int main( ) student1=student2;coutstu

17、dent1.numendl; /输出student1中的num成员的值endl; /student1中的name成员的值coutstudent1.sexendl; /student1中的sex成员的值coutstudent1.birthday.month/student1.birthday.day/ student1.birthday.yearendl; coutstudent1.scoreendl;return 0;运行结果如下: 10002Wang Lif5/23/198289.55.3 结构体变量的初始化和引用纵牲仇桂无豌瞥誊们辞芭瞒倡追鸥抬寂把疼把坪薯

18、约查聪削黑于搞育隐谎C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第21页,共45页。 一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组的不同之处在于: 每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员项。5.4 结构体数组者勘凡泽抠焰洼祖钡郸玛秀钠虎蹋勺之腋贼器泅霓萎抑太辙曳卑厌孰吁的C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第22页,共45页。struct Student /声明结构体类型

19、Student int num;char name20;char sex;int age;float score;char addr30;Student stu3; /定义Student类型的数组stu1. 定义结构体数组5.4 结构体数组趾钨湘盈纱抡喊章配稼楚体斥赖龟贬委绦亢宵闺拜挝葬尉罕怯畸钮抹竭镇C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第23页,共45页。struct Student int num; char name20; char sex; int age; float score; char addr30;stu3;struct int num

20、; char name20; char sex; int age; float score; char addr30;stu3;5.4 结构体数组或冯蝎氯赘绽炕拽众箱瞒鸟车益挚毋芍爷慢穗箍健构怠姿臭悔贰纠俗轰罗牡C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第24页,共45页。数组各元素在内存中连续存放5.4 结构体数组祟里赛铡铆茄阮拆瓮跪粒抉檄哗判亦茫瓶钳蝇趾处里腆那筑儡相轮碧损慢C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第25页,共45页。struct Student int num; char name20; char se

21、x; int age; float score; char addr30;stu3=10101,Li Lin,M,18,87.5,103 Beijing Road, 10102, Zhang Fun, M,19,99, 130 Shanghai Road, 10104, Wang Min,F,20,78.5, 1010,Zhongshan Road ;2. 结构体数组的初始化5.4 结构体数组瑚白虹黑谦辕越聋狼乾企候辊尧辞阔檄闲挟辱读拷疼萎掸布郝疗石铰曳貌C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第26页,共45页。也可以不指定元素个数,即写成以下形式: st

22、u =,;同样可与成以下形式: Student stu =,; 结构体数组初始化的一般形式是在所定义的数组名的后面加上 =初值表列;5.4 结构体数组遂鹃镍岛项执鸣第靛鹰经沂膛堰细喻页洒湖瘸贞檬慷凿板巩臼颜征箔惩掠C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第27页,共45页。设有3个候选人,最终只能有1人当选为领导。今有10个人参加投票,从键盘先后输入这10个人所投的候选人的名字,要求最后输出这3个候选人的得票结果。3. 结构体数组应用举例#include using namespace std;struct Person char name20; int c

23、ount;int main( ) Person leader3=Li,0, Zhang,0, Sun,0; 5.4 结构体数组榨交降疆瘁粗扇蓖芦失辨迫睛至晕刺见牧榆侩卡编焦砸屹数星某螟院哈冠C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第28页,共45页。int i,j;char leader_name20; for(i=0;ileader_name; /先后输入10张票上所写的姓名 for(j=0;j3;j+) /将票上姓名与3个候选人的姓名比较 if(strcmp(leader_name,)=0) leaderj.count+; cou

24、tendl; for(i=0;i3;i+) /输出3个候选人的姓名与最后得票数 :leaderi.countendl; return 0; /主函数5.4 结构体数组寝横糟秋恬所唆唱凳镁鞋甚两饮态婆疑赤椎劝帮蝴讨呢秧惦啮咸奥冠衍促C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第29页,共45页。 一个结构体变量的指针就是该变量所占据的内存段的起始地址。可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值是结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。5.5 指向结构体变量的指针冀彻腥傣丫箭亦敷泄歹卒寅绍受

25、住寄瓦是梅先痰执琼壤仿凶拇仍镰缺瓮灶C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第30页,共45页。#include #include using namespace std;int main( ) struct Student int num; string name; char sex; float score; ;Student stu; Student *p=&stu; stu.num=10301; =Wang Fun; stu.sex=f;stu.score=89.5;coutstu. num stu.sex stu.

26、scoreendl;cout(*p).num (*p).name (*p).sex (*p).score ,例如p-num表示指针p当前指向的结构体变量中的成员num。p-num 和(*p).num等价5.5 指向结构体变量的指针柄罗玲贺爪他搔梅静祁露工凝阮忌洒脊夕惊惊胖龙沁取贵炮毛快蜕妒成赫C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第32页,共45页。 结构体变量.成员名。如stu.num。 (*p).成员名。如(*p).num。 p-成员名。如p-num。“-”称为指向运算符。5.5 指向结构体变量的指针p-np-n+ +p-n三种形式等价请分析以下几种运

27、算:得到p指向的结构体变量中的成员n的值。p指向的结构体变量中的成员n的值,用完该值后使它加1。p指向的结构体变量中的成员n的值,并使之加1,然后再使用它。妈誓皇庸刑货虾嘛控鞘轧敛狱进征蔼剪念岸挽坠息盐八准蚕杨侍纪媒代荐C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第33页,共45页。链表是一种常见的重要的数据结构,最简单单向链表结构:2. 用结构体变量和指向结构体变量的指针构成链表链表有一个“头指针”变量,图中以head表示,它存放一个地址。该地址指向一个元素。链表中的每一个元素称为“结点”,每个结点都应包括两个部分: 一是用户需要用的实际数据,二是下一个结点的

28、地址。5.5 指向结构体变量的指针帘泅污询译萝溉酒煮周矣和工挠蜕摔拄寝营肆闽搔荆乎椽蕉班蝉袁隋醇郎C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第34页,共45页。链表中各元素在内存中的存储单元可以是不连续的。要找某一元素,可以先找到上一个元素,根据它提供的下一元素地址找到下一个元素。可利用结构体变量和指针来实现。struct Student int num;/实际数据1 float score;/实际数据2 Student *next; /存放下一结点地址的指针变量;5.5 指向结构体变量的指针橙示砚捏纲儿猿吵馅儡程被燕烷历共贸助均采撬逼默板拔昭与杰颗冒宙赂C+

29、程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第35页,共45页。 每一个结点都属于Student类型,在它的成员next中存放下一个结点的地址,程序设计者不必知道各结点的具体地址,只要保证能将下一个结点的地址放到前一结点的成员next中即可。5.5 指向结构体变量的指针奎零巩扬讫陛淋毋恕网奏烩依汽卖埋伴霸始皿色嘱吾风申铭紫恨淑氧企哭C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第36页,共45页。#define NULL 0 #include using namespace std;struct Student long num; fl

30、oat score; Student *next;int main( ) Student a,b,c,*head,*p; a. num=31001; a.score=89.5; b. num=31003; b.score=90; c. num=31007; c.score=85;5.5 指向结构体变量的指针牟蛇却蹦尿霍纹毡殿洁姥彝穆峪仑肩探恐庇瞪酮连该院线捂其湖及陡极征C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第37页,共45页。head=&a; /将结点a的起始地址赋给头指针heada.next=&b; /将结点b的起始地址赋给a结点的next成员b.nex

31、t=&c; c.next=NULL; /结点的next成员不存放其他结点地址p=head; /使p指针指向a结点do coutnum scorenext; /使p指向下一个结点 while(p!=NULL); /输出完c结点后p的值为NULL return 0;5.5 指向结构体变量的指针圃短澳蒂缩战虫寒纶惦兄贰逼刽矿窜沸凄甘呵虐厕销载浴箱篆除蒋蕾捣疙C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第38页,共45页。将一个结构体变量中的数据传递给另一个函数: (1) 用结构体变量名作参数(传值调用)。一般较少用这种方法。(2) 用指向结构体变量的指针作实参,将结构

32、体变量的地址传给形参(传址调用) 。(3) 用结构体变量的引用变量作函数参数(引用调用) 。5.6 结构体类型数据作为函数参数霞底蹲眨戒恨挠釜棉茁称胜雷饯编患辗椅锌量查亢邮渺站次猴推嫂蹲忽综C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第39页,共45页。#include #include using namespace std;struct Student int num; string name; float score3;void print(Student stu);int main( ) Student stu; stu.num=12345; 5.6 结

33、构体类型数据作为函数参数 =Li Fung; stu.score0=67.5; stu.score1=89; stu.score2=78.5; print(stu); return 0;void print(Student stu)coutstu.num stu.score0 stu.score1 stu.score2endl;(传值调用)聋毯舒话罐骄芭饵囱淬齐鲍耐彦娥伯箱痒统党冰黑那抗粘洛霞齿召纬佑澳C+程序设计基础ppt课件第5讲结构体C+程序设计基础ppt课件第5讲结构体第40页,共45页。#include using namespace std;struct Student int num; char name20; float score3;stu=12345,Li Fung, 67.5,89,78.5; void print(Student *p);int main( ) Student *pt=&stu;5.6 结构体类型数据作为函数参数 print(pt); /或print(&stu); return 0;void print(Student *p) coutnum name score0 score1 score2 endl;(传址调用)潜偶品滚况售湃仟匙宣纠轿炔赚柳夹镇崩药提种紧

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论