《C语言》课件-7

上传人:沈*** 文档编号:243975349 上传时间:2024-10-01 格式:PPT 页数:37 大小:1.46MB
返回 下载 相关 举报
《C语言》课件-7_第1页
第1页 / 共37页
《C语言》课件-7_第2页
第2页 / 共37页
《C语言》课件-7_第3页
第3页 / 共37页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,7,章 用户自定义的数据类型,1.,2.,3.,本章讲述内容:,结构式数据类型的定义、变量说明和使用,;,指向结构式数据类型的指针,;,链表及其操作,;,共享式数据类型的定义、变量说明和使用,;,4.,枚举式数据类型的定义、变量说明和使用,;,5.,编译预处理和起别名,。,6.,7.1,结构式数据类型,7.1.1,结构式数据类型的定义,.,所谓“,用户自定义数据类型,”,是指在已有数据类型的基础上,用户自己构造满足需求的数据类型。,C,语言向用户提供了,3,种自定义数据类型的方式:结构式、共享式、枚举式。自定义一种数据类型,先是要给出这种数据类型的定义,再是说明具有这种数据类型的变量,第,3,步才谈得上在程序中使用。,.,根据实际问题的需要,把一些不同数据类型的成员聚集在一起,为它们起一个名字。这就定义了一个所谓“结构式数据类型”。在说明具有这种结构式数据类型的变量后,程序中就可使用这些变量了。,.,定义结构式数据类型的一般格式是:,.,有了如上定义后,“,struct,”,这个整体,就成为程序中可使用的、新定义的一种数据类型的名字了。,struct,;,注意:“,struct,”,只起标识作用,表明现在所定义的是结构式数据类型。,.,结构式数据类型定义中的,由如下形式的“对”组成:,注意:在给出结构式数据类型定义时,必须把整个,括在花括号内,右花括号后面必须跟随一个分号“,;”,,表示整个定义的结束。,.,例:,理解如下定义的结构类型:,.,现在有了名为“,struct,goods(,商品,)”,的数据类型,它有,3,个结构成员:,item(,品名,),,是字符数组;,code(,编号,),是整型;,stock(,库存,),,是整型。,struct,goods,这种数据类型需要的存储空间是,19,个字节,这是因为成员,item,要,15,个字节,,code,要两个字节,,stock,要两个字节。,.,struct,goods,char item15;,int,code;,int,stock;,;,例:,理解如下定义的结构类型:,struct,student,int,num;,char*name;,char sex;,int,age;,;,.,现在有了名为“,struct,student”,的数据类型,它由,4,个结构成员组成:,num(,学号,),整型,,name(,姓名,),字符指针,,sex(,性别,),字符型,,age(,年龄,),整型。,.,由,struct,student,的,4,个成员所需的存储空间,可以计算出该数据结构类型所需的存储空间。,;,每对给出该结构式数据类型中一个成员的数据类型和名称。,例:,理解如下定义的结构类型:,先定义:,struct,birthday,int,year;,int,month;,int,day;,;,再定义:,struct,person,int,num;,char name30;,char sex;,float wage;,struct,birthday,bir,;,;,.,已定义过的结构类型,可成为新定义结构类型的成员。也就是说,结构类型的定义是可以,嵌套,的。,.,在,struct,person,这个结构类型定义里,利用了已定义的结构类型,struct,birthday,的定义:成员名,bir,是“,struct,birthday”,这种数据类型的。,.,struct,person,结构类型占用的存储空间是:,2+30+1+4+6(,字节,),其中最后的,6,个字节是由结构类型,struct,birthday,决定的。,7.1.2,结构类型变量的说明与初始化,.,定义了一个结构类型,只表明这种数据类型的存在,知道这种数据类型所需的存储量。但它不是变量,并不真正占用内存空间。只有说明一个变量具有这种结构类型,系统才会为该变量分配存储空间,程序中才能使用这个变量。,.,先定义结构类型,再说明变量,说明一个结构类型的变量的两种方式,(1),那么语句:,struct,goods biscuit;,说明,biscuit,是,struct,goods,型的一个变量,它由,3,个成员组成。,例:,可以在说明变量的同时,对该变量进行初始化。比如,:,struct,goods biscuit=original,1101,40;,这表示变量,biscuit,的成员,item,取值字符串:,original,;成员,code,取值,1101,;成员,stock,取值,40,。,.,.,该变量在内存中的存储情形,如图所示。,item,biscuit,“original”,code,1101,stock,40,19,个字节,给出结构类型,struct,goods,的定义:,struct,goods,char item15;,int,code;,int,stock;,;,例:,有如下诸结构类型的定义:,struct,birthday ,int,year;,int,month;,int,day;,;,struct,person ,int,num;,char name15;,char sex;,float wage;,struct,birthday,bir,;,;,那么,语句:,struct,person man=10105,Ni,nai,jung,m,2408,1942,9,24;,说明了一个具有,struct,person,型的变量,man,,它的成员,num,取值,10105,,成员,name,取值,Ni,nai,jung,,成员,sex,取值,m,,成员,wage,取值,2408,,成员,bir,的,3,个成员,year,、,month,、,day,分别取值,1942,、,9,、,24,。,.,变量,man,在内存中的存储情形,如图所示。,10105,num,man,“,Ni,nai,jung,”,name,m,sex,2048,wage,year,month,day,bir,28,个字节,1942,9,24,在定义结构类型的同时说明变量的一般格式是:,.,在定义结构类型的同时说明变量,(2),例:,有如下结构类型的定义:,struct,student,int,num;,char*name;,char sex;,int,age;,nhf,zyt,;,这是定义类型,struct,student,的同时,说明,nhf,和,zyt,是这种类型的两个结构变量的情形。注意,成员,name,是指针型的。,例:,也可以定义说明初始化同时进行。比如:,struct,student,int,num;,char*name;,char sex;,int,age;,nhf,=10111,Zeng,jing,yi,f,25,zyt,;,具有指针成员的结构变量在内存中的情形如图所示。,10111,num,nhf,name,f,sex,25,age,Z,e,n,g,j,i,n,g,y,i,0,.,struct,;,定义一结构类型,然后编写程序,测试系统如何给结构变量分配存储区。它各成员的存储区是什么?取值是什么?,7.1.3,结构变量成员的引用,.,对结构变量的使用,其含义是指对它各个成员的引用。,.,引用结构变量成员的一般方式是:,例:,#include,stdio.h,struct,coord,float x,y,;,main(),struct,coord,first;,first.x,=15.12;,first.y,=33.67;,printf,(&first=%,un,printf,(&,first.x,=%,un,&,first.x,);,printf,(&,first.y,=%,un,&,first.y,);,printf,(,first.x,=%5.2fn,first.x,);,printf,(,first.y,=%5.2fn,first.y,);,(1),程序实现,(2),分析与讨论,.,由于说明了变量,struct,coord,first,,因此,first.x,是该变量的成员,x,,,first.y,是成员,y,。,.,程序的一次运行结果如图所示。,first.x,和,first.y,在程序中都是实型变量。,.,.,引用结构变量成员,不能直接写成员名,而是采取“由整体到局部”的层次式,先指明是哪个结构变量,再通过成员运算符“,.,”,,指定所要成员。,.,其中“,.,”,称为,成员运算符,。,7.1.4,结构数组的说明与初始化,以相同结构变量为元素组成的数组,就是“结构数组”。因此,结构数组既具有结构的特点,又具有数组的特点。,.,例:,定义结构类型的同时说明结构数组,struct,goods,char item15;,int,code;,int,stock;,fruit20;,表示,fruit,是一个有,20,个元素的一维数组:,fruit0,到,fruit19,,每一个元素都是,struct,goods,型的。比如,,fruit0.item,、,fruit0.code,和,fruit0.stock,分别是,struct,goods,型变量,fruit0,的成员,item,、,code,和,stock,。,.,在说明了一个结构数组后,系统就会在内存中为其开辟一个连续的存储区存放它的元素,结构数组名就是这个存储区的起始地址。,.,说明结构数组的同时,可以对它进行初始化,即是把每个元素,(,都是一个结构变量,),的初始值放在花括号里,用逗号隔开。,例:,已知某商店销售货物的账单如表所示。,货物名称,单价,(,元,/,公斤,),销售量,(,公斤,),sweets(,糖果,),fruit(,水果,),pastry(,点心,),12.80,15.30,20.00,120,82,44,编写一个程序,求每种货物当天的售出金额及商店的总收入。,(1),程序实现,#include,stdio.h,struct,item char*,pname,;float price;float sales;float income;,main(),float total=0;,int,k;,struct,item check=sweets,12.80,120,fruit,15.30,82,pastry,20.00,44;,for(k=0;k3;k+),checkk.income,=,checkk.price,*,checkk.sales,;total+=,checkk.income,;,printf,(name,tpricetsalestincomen,);,printf,(-n);,for(k=0;k”,。格式是:,指针变量名,-,结构成员名,.,.,访问结构变量成员的,3,种等价形式,(1),直接利用结构变量名。一般格式是:,结构变量名,.,成员名,(2),利用指向结构变量的指针和指针运算符“*”。格式是:,(*,指针变量名,).,成员名,(3),利用指向结构变量的指针和指向成员运算符“,-”,。格式是:,指针变量名,-,成员名,例:,(1),程序实现,(2),分析与讨论,编写一个程序,验证访问结构变量成员的,3,种等价形式。,#include,stdio.h,“,struct,student,int,num;,char*name;,char sex;,int,age;,;,main(),struct,student,nhf,=10111,Zeng,jing,yi,f,25,*,ptr,=&,nhf,;,printf,(,nhf.num,=%,dtnhf.name,=%,st,nhf.num,nhf.name,);,printf,(,nhf.sex,=%,ctnhf.age,=%,dn,nhf.sex,nhf.age,);,printf,(*,ptr).num,=,%,dt,(*,ptr).name,=,%,st,(*,ptr
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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