构造数据类型.ppt

上传人:石*** 文档编号:39349739 上传时间:2022-09-07 格式:PPT 页数:31 大小:1.90MB
返回 下载 相关 举报
构造数据类型.ppt_第1页
第1页 / 共31页
构造数据类型.ppt_第2页
第2页 / 共31页
点击查看更多>>
资源描述

《构造数据类型.ppt》由会员分享,可在线阅读,更多相关《构造数据类型.ppt(31页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、构造数据类型现在学习的是第1页,共31页在实际问题中,一组数据往往具有不同的数据类型。例如,在学生登记表中:为更好地解决此类问题,语言采用构造数据类型,通过构造数据类型可以很好地将一些不同类型的数据作为一个整体进行处理。姓名:字符型;学号:整型或字符型;年龄:整型;性别:字符型;成绩:整型或实型。因为一个数组中只能存放同一种数据类型的数据,故不能用一个数组来存放这一组数据;如单独定义为互相独立的简单变量,难以反映它们之间的内在联系。现在学习的是第2页,共31页9.1 结构体结构体“结构”是一种构造类型,它是由若干“成员”组成的。每一个成员可以是一个基本数据类型,或者又是一个构造类型。结构体类型

2、的定义结构体变量的说明结构体变量的引用 结构体先定义,后使用现在学习的是第3页,共31页9.1 结构体结构体9.1.1结构类型定义和结构变量说明结构类型定义和结构变量说明 struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;成员类型可以是基本数据类型或构造数据类型struct是关键字,不能省略合法标识符可省:无名结构体一、结构体的定义 现在学习的是第4页,共31页例 struct student int num;char name20;char sex;int age;float score;char addr30;namenumsexagescoreaddr4字节4字节20字

3、节1字节4字节30字节.结构体类型定义描述结构的组织形式,不分配内存n 结构是一种复杂的数据类型,是数目固定,类型不同的若干有序变量的集合。n 结构定义之后,即可进行变量说明。括号后的分号不可省现在学习的是第5页,共31页二、结构体变量说明(1)先定义结构体类型,再定义结构体变量一般形式:struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;struct 结构体名 变量名表列;例#define STUDENT struct student STUDENT int num;char name20;char sex;int age;float score;char addr30;ST

4、UDENT stu1,stu2;例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;现在学习的是第6页,共31页(2)定义结构体类型的同时定义结构体变量定义结构体类型的同时定义结构体变量一般形式:struct 结构体名 类型标识符 成员名;类型标识符 成员名;.变量名表列;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu

5、2;现在学习的是第7页,共31页(3)直接定义结构体变量直接定义结构体变量一般形式:struct 类型标识符 成员名;类型标识符 成员名;.变量名表列;例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;用无名结构体直接定义变量只能一次现在学习的是第8页,共31页w 说明结构体类型与结构体变量概念不同类型类型:不分配内存;变量变量:分配内存类型类型:不能赋值、存取、运算;变量变量:可以结构体成员名与程序中变量名可相同,不会混结构体可嵌套例 struct date int month;in

6、t day;int year;struct student int num;char name20;struct date birthday;stu;numnamebirthdaymonthdayyear例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu;numnamebirthdaymonthdayyear现在学习的是第9页,共31页9.1.2 结构体变量的引用引用规则 结构体变量不能整体引用,只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级

7、引用引用方式:结构体变量名结构体变量名.成员名成员名例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);()s

8、tu1=101,“Wan Lin”,M,19,87.5,“DaLian”;()例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu2=stu1;()例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;例 struct student

9、 int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;if(stu1=stu2).()成员(分量)运算符优先级:1结合性:从左向右现在学习的是第10页,共31页练习1.设有以下语句:struct S char ch;int a4T;则下面叙述中正确的是()S是struct类型的变量 T是struct S类型的结构体变量 可以用S定义结构体变量 A.可以用T定义结构体变量现在学习的是第11页,共31页练习2.设有如下定义:struct sk int a;float sex;data;int*p;若要使p指向

10、data中的a域,正确的赋值语句是()Ap=&a;B.p=data.a;C.p=&data.a;D.*p=data.a现在学习的是第12页,共31页struct 结构体名 类型标识符 成员名;类型标识符 成员名;.;struct 结构体名 结构体变量=初始数据;例 struct student int num;char name20;char sex;int age;char addr30;struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;二、结构体变量的初始化形式一:现在学习的是第13页,共31页形式二:struct 结构体

11、名 类型标识符 成员名;类型标识符 成员名;.结构体变量=初始数据;例 struct student int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;现在学习的是第14页,共31页形式三:struct 类型标识符 成员名;类型标识符 成员名;.结构体变量=初始数据;例 struct int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Ro

12、ad”;现在学习的是第15页,共31页注:结构体变量是全局变量或静态变量,才可对它进行初始化赋值,局部或自动结构体变量,不能进行初始化赋值。结构体变量的初始化现在学习的是第16页,共31页9.1.3 结构体数组结构体数组结构体数组的定义三种形式:形式一:struct student int num;char name20;char sex;int age;struct student stu2;形式二:struct student int num;char name20;char sex;int age;stu2;形式三:struct int num;char name20;char sex;

13、int age;stu2;numnamesexagenumnamesexagestu0stu125B现在学习的是第17页,共31页结构体数组初始化例 struct int num;char name20;char sex;int age;stu=,;顺序初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;例 struct student int num;char name20;cha

14、r sex;int age;stu=,;分行初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;全部初始化时维数可省结构体数组引用引用方式:结构体数组名结构体数组名下标下标.成员名成员名 struct student int num;char name20;char sex;int age;str3;stu1.age+;strcpy(stu0.name,”ZhangSan”);现在学

15、习的是第18页,共31页练习1.设有如下定义:main()struct complex int x;int y;num2=1,3,2,7;printf(“%dn”,num0.y/num0.x*num1.x);程序运行结果是()A0 B.1 C.3 D.6现在学习的是第19页,共31页练习2.设有如下说明:struct STD int n;char c;double x;以下选项中,能正确定义结构体数组并赋初值的语句是()A.struct STD tt2=1,A,62,2,B,75;B.struct STD tt2=1,A,62,2,B,75;C.struct tt2=1,A,2,B;Dstru

16、ct tt2=1,A,62.5,2,B,75.0;现在学习的是第20页,共31页w 9.1.4 结构体和指针结构体和指针指向结构体变量的指针指向结构体变量的指针定义形式:定义形式:struct 结构体名结构体名 *结构体指针名结构体指针名;例例 struct student *p;使用结构体指针变量引用成员形式存放结构体变量在内存的起始地址numnamesexagestupstruct student int num;char name20;char sex;int age;stu;struct student *p=&stu;(*结构体指针名).成员名结构体指针名-成员名结构体变量名.成员名

17、指向运算符优先级:1结合方向:从左向右例 指向结构体的指针变量例 int n;int *p=&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).num=101 pnum=101现在学习的是第21页,共31页main()struct student long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;stu_1.num=101;strcpy(stu_1.name,Li Lin);p-sex=M;p-score=89.5;pr

18、intf(nNo:%ldnname:%sn sex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score);No:101Name:Li LinSex:MScore:89.500000现在学习的是第22页,共31页指向结构体数组的指针例 指向结构体数组的指针struct student int num;char name20;char sex;int age;stu3=10101,Li Lin,M,18,10102,Zhang Fun,M,19,10104,Wang Min,F,20;main()struct student*p;for(p=stu;pnu

19、m,p-name,p-sex,p-age);numnamesexagestu0pstu1stu2p+110101 Li Lin M 1810102 Zhang Fun M 1910104 Wang Min F 20现在学习的是第23页,共31页在上例中,可使用的是(*p).num这样的形式。(*p)表示p指向结构体变量,(*p).num是p指向的结构体变量中的成员num。注意:*p两侧的括弧不可省。请分析以下几种运算:p-n 得到p指向的结构体变量中的成员n的值。p-n+p-n得到p指向的结构体变量中的成员n的值,用完该值后使它加1。得到p指向的结构体变量中的成员n的值使之加1(先加)。现在学

20、习的是第24页,共31页1.有以下程序:#include struct STU int num;float TotalScore;void f(struct STU p)struct STU s2=20044,550,20045,537;p.num=s1.num;p.TotalScore=s1.TotalScore;main()struct STU s2=20041,703,20042,580;f(s0);printf(%d%3.0fn,s0.num,s0.TotalScore);程序运行后的输出结果是()A.20045 537 B.20044 550 C.20042 580 D.20041

21、703练习练习 值传递现在学习的是第25页,共31页2.以下程序运行后输出结果是(以下程序运行后输出结果是()。)。#include#includestruct STU char name10;int num;void f(char*name,int num)struct STU s2=SunDan,20044,Penghua,20045;num=s0.num;strcpy(name,s0.name);main()struct STU s2=YangSan,20041,LiSi,20042,*p;p=&s1;f(p-name,p-num);printf(%s%dn,p-name,p-num);

22、A)SunDan,20042 B)SunDan,20044 C)LiSi,20042 D)YangSan,20041地址传递值传递现在学习的是第26页,共31页3.有以下程序:有以下程序:struct S int n;int a20;void f(struct S*p)int i,j,t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(p-aip-aj)t=p-ai;p-ai=p-aj;p-aj=t;main()int i;struct S s=10,2,3,1,6,8,7,5,4,10,9;f(&s);for(i=0;is.n;i+)printf(%d,s.ai);程序

23、运行后的输出结果是(程序运行后的输出结果是()A.1,2,3,4,5,6,7,8,9,10 B.10,9,8,7,6,5,4,3,2,1C.2,3,1,6,8,7,5,4,10,9 D10,9,8,7,6,1,2,3,4,5现在学习的是第27页,共31页9.2 共用体u 1.定义 union 联合名 成员列表;u 2.存储:各成员共享一段内存空间;一个共用体变量的长度等于各成员中最长的长度。每次只能赋予一个成员值。现在学习的是第28页,共31页struct char name10;char job;union int class;char office10;belong;body2;for(i=0;inext=q-next;B.p-next=p-next-next;C.p-next=r;Dp=q-next;现在学习的是第31页,共31页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 大学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com