C语言程序设计教学做一体化-模块9.ppt

上传人:qwe****56 文档编号:70105789 上传时间:2023-01-16 格式:PPT 页数:46 大小:195.50KB
返回 下载 相关 举报
C语言程序设计教学做一体化-模块9.ppt_第1页
第1页 / 共46页
C语言程序设计教学做一体化-模块9.ppt_第2页
第2页 / 共46页
点击查看更多>>
资源描述

《C语言程序设计教学做一体化-模块9.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计教学做一体化-模块9.ppt(46页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言程序设计语言程序设计教学做一体化教学做一体化 主编主编 滕泓虬滕泓虬 中国水利水电出版社中国水利水电出版社 模块九模块九构造数据类型构造数据类型9.1 结构体结构体 l1、掌握结构体类型的定义l2、掌握结构体类型变量的定义、初始化和 应用 本节学习目标:9.1.1结构体类型的定义结构体类型的定义l结构体是由不同数据类型的数据组成的集合体,它包含若干个成员。在说明和使用结构体之前必须先定义它,也就是构造它。结构体定义实际上是说明结构体是由哪些成员所组成,以及成员的数据类型。9.1.1结构体类型的定义结构体类型的定义 l案例9-1:使用结构体类型描述学生的基本信息,需要包含学号、姓名、性别、

2、年龄和入学成绩。lstruct studentll char num11;l char*name;l char sex;l int age;l float score;l;结构体类型名,其中struct是保留字,student 是结构体名 结构体由5个成员组成。第一个成员为num,字符数组;第二个成员为name,字符数组;第三个成员为sex,字符变量;第四个成员为age,整型变量;第五个成员为score,实型变量。提示:提示:在大括号后的分号是不可少知识连接知识连接 l定义一个结构的一般形式为:struct 结构体名 结构体成员表;;9.1.2结构体变量的定义结构体变量的定义l定义结构体类型相

3、当于做了一个模型,但是其中并没有具体数据,系统不对它分配实际的内存单元。为了能在程序中使用结构体类型的数据,就要定义结构体类型的变量,并且在其中存放具体的数据。9.1.2结构体变量的定义结构体变量的定义 l案例9-2:使用结构体student定义结构体变量jack和rose。struct student char num11;char*name;char sex;int age;float score;struct student jack;struct student rose;提示:提示:在这种定义方法中,保留字struct和结构名student必须同时出现。知识连接知识连接l1、结构体变

4、量同其他变量一样,也必须先定义,然后才能使用。首先定义结构类型,然后定义结构变量。l2、结构变量定义的一般形式如下:l struct 结构体名 ll 结构体成员表;l;lstruct 结构体名 结构体变量名;9.1.3结构体变量的初始化结构体变量的初始化 l对结构体变量的初始化,就是在定义该结构体变量的同时,对其成员变量赋初值。l结构体变量初始化的一般形式如下:l struct 结构体名 结构体变量名=初始数据;9.1.3结构体变量的初始化结构体变量的初始化l案例9-3:对结构体student类型的结构体变量jack和rose初始化。l#include lvoid main()ll struc

5、t studentl l int num;l char*name;l char sex;l float score;l ;l struct student jack=2010,jack,M,765.4;l struct student rose=2012,rose,F,876.5;l printf(The message of student jack:n);l printf(Number=%dnName=%sn,jack.num,jack.name);l printf(Sex=%cnScore=%fn,jack.sex,jack.score);l printf(The message of

6、student rose:n);l printf(Number=%dnName=%sn,rose.num,rose.name);l printf(Sex=%cnScore=%fn,rose.sex,rose.score);l知识连接知识连接l1、初始化数据的个数要与成员的个数相同。l2、初始化数据的类型要与相应的成员变量的类型一致。9.1.4结构体变量成员的引用结构体变量成员的引用 l结构体变量被定义之后,就可以在程序中使用它。在对结构体进行引用时,不能对一个结构体变量作为一个整体直接进行操作,一般只能对结构体变量中的各个成员进行直接操作。l结构体变量成员的引用的两种方式:l用结构体成员运算符

7、方式。l 结构变量名结构变量名.成员名成员名 l用指针方式。9.1.4结构体变量成员的引用结构体变量成员的引用l案例9-4:引用结构体student类型的结构体变量jack和jack2的成员。l struct student jack;l struct student jack2;l jack.num=2010;l jack.name=jack;l printf(input sex and score:n);l scanf(%c%f,&jack.sex,&jack.score);9.2指向结构体类型数据的指针指向结构体类型数据的指针l学习目标l1、理解结构体指针变量的定义。l2、掌握结构体指针

8、变量的运用。l3、了解结构体数组变量的定义和初始化。9.2.1指向结构体变量的指针指向结构体变量的指针 l结构体指针变量即指向结构体变量的指针,它是一个指针变量。结构体指针变量中的值是所指向的结构体变量的首地址。通过结构体指针即可访问该结构体变量,这与数组指针和函数指针的情况是相同的。9.2.1指向结构体变量的指针指向结构体变量的指针l定义结构体指针变量的一般形式为:lstruct 结构体名*结构体指针变量名l struct student boy=2010,jack,M,607.3;l struct student*ps;l ps=&boy;9.2.1指向结构体变量的指针指向结构体变量的指针

9、l定义结构体指针变量后,就可以用指针变量来引用结构体变量的各个成员。l用指针变量引用结构体成员的一般形式为:l(*结构体指针变量名).成员名 l或者:l结构体指针变量名-成员名 l例如:l(*ps).numl或者:lps-num 9.2.1指向结构体变量的指针指向结构体变量的指针l#includelstruct studentll int num;l char*name;l char sex;l float score;l;lvoid main()ll struct student boy=2010,jack,M,607.3;l struct student*ps;l ps=&boy;l pr

10、intf(Number=%dnName=%sn,boy.num,boy.name);l printf(Sex=%cnScore=%fnn,boy.sex,boy.score);l printf(Number=%dnName=%sn,(*ps).num,(*ps).name);l printf(Sex=%cnScore=%fnn,(*ps).sex,(*ps).score);l printf(Number=%dnName=%sn,ps-num,ps-name);l printf(Sex=%cnScore=%fnn,ps-sex,ps-score);l提示:提示:(*ps)两侧的括号不可少,因为成

11、员符“.”的优先级高于“*”。如果去掉括号写作*pstu.num则等效于*(pstu.num),这样,意义就完全不对了。9.2.2指向结构体数组的指针指向结构体数组的指针 l结构体数组是其元素都是具有相同结构体类型的结构体变量。与一般数组一样,结构体数组也是要先定义后使用。lstruct student stu5=l 2010,jack,M,523.45,l 2012,tom,M,634.567,l 2013,rose,F,492.7891,l 2014,kate,F,787,l 2015,jim,M,580.9,l ;l案例9-6:用指针变量输出结构体数组。l#includelstruct

12、studentll int num;l char*name;l char sex;l float score;l;lvoid main()ll struct student stu5=l 2010,jack,M,523.45,l 2012,tom,M,634.567,l 2013,rose,F,492.7891,l 2014,kate,F,787,l 2015,jim,M,580.9,l ;l struct student*ps;l printf(No.tNametSextScoretn);l for(ps=stu;psnum,ps-name,ps-sex,ps-score);l在main函数

13、中定义struct student类型结构体数组stu并对其初始化定义了一个指向struct student类型结构体的指针变量ps 知识连接知识连接l1、结构体数组定义的一般格式如下:l struct 结构体名 结构体数组名元素个数;l2、结构体数组与其他类型的数组一样,可以初始化,初始化的一般格式如下:lstruct 结构体名 结构体数组名=初始化数据;l或者是:lstruct 结构体名 ll 结构体成员列表;l结构体数组名=初始化数据;9.3 用指针处理链表用指针处理链表 l学习目标l1、理解链表的概念。l2、了解使用指针和结构体构成链表的方法。l3、掌握单链表的建立、插入、删除等算法

14、9.3 用指针处理链表用指针处理链表l单链表分配一些任意的存储单元来存储线性表中的数据元素,这些存储单元可以分散在内存中的任意位置上,它们在物理上可以是一片连续的存储单元,也可以是不连续的。9.3 用指针处理链表用指针处理链表l单链表为了表示线性表每个数据元素ai与数据元素ai1的逻辑关系,在存储元素ai的数据信息时,必须使用一个指针指向它的直接后继ai1。因此单链表的每个结点的存储区分为数据域和指针域两个部分。如图9-1所示。案例案例9-7程序分析:程序分析:l使用结构体struct node来描述单链表的这种结构。struct node类型,里面包含float型数据域data和指向下一个s

15、truct node 结点的指针 next。lstruct node/*结构体node*/l lfloat data;/*定义数据域*/lstruct node*next;/*定义指针域*/l;案例案例9-7程序分析:程序分析:l程序中自定义的insert函数用后插法为带头结点的单链表插入新的结点,从而建立带头结点的单链表。案例案例9-7程序分析:程序分析:l程序中自定义的dele函数实现删除链表结点。如图9-3所示删除单链表中一个已存在的结点的过程。案例案例9-7程序分析:程序分析:lmain函数调用malloc函数为链表的头结点动态的申请了一个struct node类型的内存空间。头结点中

16、的data成员用于记录链表的结点数,next指针指向下一个链表结点。l调用while语句无限循环的让用户选择插入、删除、打印和退出的操作,若选择退出则终止循环结束程序。9.4 共用体共用体 l学习目标l1、掌握共用体类型的定义l2、掌握共用体类型的引用 9.4.1共用体类型的定义共用体类型的定义 l共用体是将不同的数据项放在同一段内存单元的一种构造数据类型。l共用体变量定义的一般形式如下:lunion 共用体名ll成员列表l;9.4.1共用体类型的定义共用体类型的定义l案例9-8:定义共用体类型people,并且使用该类型声明变量a,计算a所占内存长度。l#include lunion peo

17、plelchar name10;llong sno;lchar sex;lfloat score4;l;lmain()l lunion people a;lprintf(The length of a is:%dn,sizeof(a);l案例案例9-8程序分析程序分析:l共用体所需的存储空间的大小则取决于共用体内占用空间最大的成员的大小。l本案例的共用体people有四个成员,其中第四个成员是一个含有4个元素的浮点型数组,该数组每个元素占用4个字节,大小为4416字节,是共用体people占用空间最大的成员,所以共用体people所需的存储空间为16字节,它所定义的变量的大小也就是16字节。9

18、.4.2共用体类型的引用共用体类型的引用 l对共用体变量引用的方式与结构体变量的引用方式类似。但共用体变量不能直接引用,只能引用共用体成员。其引用方式为:共用体变量名共用体变量名.成员名成员名ex.a=4;ex.b=6;9.4.2共用体类型的引用共用体类型的引用l案例9-9:引用共用体类型变量中的成员变量l#include lunion examplell structl int x;int y;in;l int a;l int b;lex;lvoid main()l lex.a=4;l ex.b=6;l ex.in.x=ex.a*ex.b;l ex.in.y=ex.a+ex.b;l prin

19、tf(%d,%dn,ex.in.x,ex.in.y);l共用体是用同一段内存存放不同类型的数据,所以在每一时刻内存只有一成员。案例中先对成员ex.a进行赋值,然后对成员ex.b进行赋值,那么只有ex.b是有效存在的,而之前对成员ex.a的赋值已经被后者ex.b覆盖而不再有效。共用体变量的地址和它所有成员的地址都是相同的。如&ex,&ex.a,&ex.b都是同一个地址。9.5枚举类型枚举类型 l学习目标l1、掌握枚举类型和枚举变量的定义。l2、掌握枚举变量的使用。9.5枚举类型枚举类型l1、若某个变量只有几种可能的值,如人民币的面值只有分,角,元这三种取值,那么就可以把该变量定义为枚举类型。所谓

20、“枚举”是指把变量的值一一列举出来,变量的取值只能是列举出来的某一个值。l2、枚举类型的一般定义格式如下:lenum 枚举类型名ll标识符1,标识符2,标识符nl变量名列表;9.5枚举类型枚举类型l案例9-10:枚举类型的使用。l#include lenum monthJan,Feb,Mar,Apr=8,May,Jun,Jul,Aug,Sept,lOct,Nov,Dev;lvoid main()l lenum month mon1=Mar;l enum month mon2=Jun;l printf(%d,%dn,mon1,mon2);l9.6 用户自定义类型用户自定义类型 l学习目标l掌握用

21、typedef定义类型9.6 用户自定义类型用户自定义类型l1、使用typedef语句的一般形式如下:l typedef 原数据类型 新的数据类型名;l2、使用typedef的目的,一个是给复杂的数据类型 一个易于记忆的名字,另一个是有利于程序的通用和移植。有时候程序会依赖于硬件特性,用typedef便于移植。l案例9-11:使用typedef自定义STU类型。l#include ltypedef struct studentl int num;l char*name;l char sex;l float score;lSTU;lvoid main()ll struct student jac

22、k1=2010,jack,M,987.6;l STU jack2=2010,jack,M,987.6;l printf(The message of student jack1:n);l printf(Number=%dnName=%sn,jack1.num,jack1.name);l printf(Sex=%cnScore=%fn,jack1.sex,jack1.score);l printf(The message of student jack2:n);l printf(Number=%dnName=%sn,jack2.num,jack2.name);l printf(Sex=%cnSc

23、ore=%fn,jack2.sex,jack2.score);l使用typedef声明新的类型名STU代替已有的struct student类型名声明的新类型名STU,它代表上面指定的struct student结构体类型。STU可以声明变量 课后练习课后练习 l选择题选择题l1、若有以下定义:lstruct stlint a;float f;s,*p;lp=&s;l下列通过指针p引用s的成员语句中正确的是()。lA.p.a=10;B.*p.a=10;lC.*p-a=10;D.(*p).a=10l2、若有以下函数:lmain()lunion unsigned int n;lunsigned c

24、harc;l u1;lu1.c=A;lprintf(%cn,u1.n);ll执行后输出结果是()。lA.产生语法错B.随机值lC.A D.65l3、设有以下定义lstruct sslint info;struct ss*link;x,y,z,*px=&x;l且已建立如图9-6所示链表结构:infolink infolinkXYZ如图 9-6 infolinkl则下列语句中不能实现从链表中删除节点y的是()。lA.px-link=&z;B.x.link=y.link;lC.px-link=px-link-link;D.px.link=y.linkl4、若要说明一个类型名STP,使得定义语句STP

25、 s等价于char*s,以下选项中正确的是()。lA.typedef STP char*s;B.typedef*char STP;lC.typedef STP*char;D.typedef char*STP;l程序分析程序分析l分析下面程序的运行结果lstruct STUlchar num10;float score3;lmain()lstruct STU s3=20021,90,95,85,l20022,95,80,75,l20023,100,95,90,*p=s;lint i;float sum=0;lfor(i=0;iscorei;lprintf(%6.2fn,sum);llA.260.00B.270.00lC.280.00D.285.00l动手编程动手编程l 1、有5位教师,每位教师的数据包括姓名、工号和薪酬,从键盘输入这5位教师的数据,要求输出这5位教师的总薪酬,以及薪酬最高的教师的数据(包括姓名、工号和薪酬)。

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

当前位置:首页 > 技术资料 > 其他杂项

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁