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

    计算机二级C语言程序设计第10讲.ppt

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

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

    计算机二级C语言程序设计第10讲.ppt

    第10讲 结构,为将不同数据类型、但相互关联的一组数据,组合成一个有机整体使用,C语言提供一种称为“结构”的数据结构。10.1 结构类型与结构变量的定义 10.2 结构变量的引用与初始化 10.3 结构数组10.4 指向结构类型数据的指针10.5 共用型和枚举型10.6 定义已有类型的别名,10.1 结构类型与结构变量的定义,C语言中的结构类型,相当于其它高级语言中的“记录”类型。10.1.1 结构类型定义struct 结构类型名/*struct是结构类型关键字*/数据类型 数据项1;数据类型 数据项2;数据类型 数据项;/*此行分号不能少!*/案例10.1 定义一个反映学生基本情况的结构类型,用以存储学生的相关信息。/*案例代码文件名:AL10_1.C。*/*功能:定义一个反映学生基本情况的结构类型*/,struct date/*日期结构类型:由年、月、日三项组成*/int year;int month;int day;struct std_info/*学生信息结构类型:由学号、姓名、性别和生日共4项组成*/char no7;char name9;char sex3;struct date birthday;struct score/*成绩结构类型:由学号和三门成绩共4项组成*/char no7;int score1;int score2;int score3;,(1)“结构类型名”和“数据项”的命名规则,与变量名相同。(2)数据类型相同的数据项,既可逐个、逐行分别定义,也可合并成一行定义。例如,本案例代码中的日期结构类型,也可改为如下形式:struct date int year,month,day;(3)结构类型中的数据项,既可以是基本数据类型,也允许是另一个已经定义的结构类型。例如,本案例代码中的结构类型std_info,其数据项“birthday”就是一个已经定义的日期结构类型date。(4)本书将个数据项称为结构类型的个成员(或分量)。,10.1.2 结构变量定义用户自己定义的结构类型,与系统定义的标准类型(int、char等)一样,可用来定义结构变量的类型。1.定义结构变量的方法,可概括为两种:(1)间接定义法先定义结构类型、再定义结构变量例如,利用案例10.1中定义的学生信息结构类型std_info,定义了一个相应的结构变量student:struct std_info student;结构变量student:拥有结构类型的全部成员,其中birthday成员是一个日期结构类型,它又由3个成员构成。注意:使用间接定义法定义结构变量时,必须同时指定结构类型名。,(2)直接定义法在定义结构类型的同时,定义结构变量例如,结构变量student的定义可以改为如下形式:struct std_info student;同时定义结构类型及其结构变量的一般格式如下:struct 结构类型名 结构变量表;2.说明(1)结构类型与结构变量是两个不同的概念,其区别如同int类型与int型变量的区别一样。(2)结构类型中的成员名,可以与程序中的变量同名,它们代表不同的对象,互不干扰。Return,10.2 结构变量的引用与初始化,案例10.2 利用案例10.1中定义的结构类型struct std_info,定义一个结构变量student,用于存储和显示一个学生的基本情况。#include#include struct.h/*定义并初始化一个外部结构变量student*/struct std_info student=000102,张三,男,1980,9,20;main()printf(No:%sn,student.no);printf(Name:%sn,student.name);printf(Sex:%sn,student.sex);printf(Birthday:%d-%d-%dn,student.birthday.month,student.birthday.day);,程序运行结果:No:000102Name:张三Sex:男Birthday:1980-9-20 1.结构变量的引用规则对于结构变量,要通过成员运算符“.”,逐个访问其成员,且访问的格式为:结构变量.成员/*其中的“.”是成员运算符*/例如,案例中的student.no,引用结构变量student中的no成员;student.name引用结构变量student中的name成员,等等。,如果某成员本身又是一个结构类型,则只能通过多级的分量运算,对最低一级的成员进行引用。此时的引用格式扩展为:结构变量.成员.子成员.最低1级子成员例如,引用结构变量student中的birthday成员的格式分别为:(1)对最低一级成员,可像同类型的普通变量一样,进行相应的各种运算。(2)既可引用结构变量成员的地址,也可引用结构变量的地址。例如,&,&student。,2.结构变量的初始化结构变量初始化的格式,与一维数组相似:结构类型 结构变量=初值表不同的是:如果某成员本身又是结构类型,则该成员的初值为一个初值表。例如,案例10.2中的struct std_info student=000102,张三,男,1980,9,20;注意:初值的数据类型,应与结构变量中相应成员所要求的一致,否则会出错。Return,10.3 结构数组,结构数组的每一个元素,都是结构类型数据,均包含结构类型的所有成员。案例10.3 利用案例10.1中定义的结构类型struct std_info,定义一个结构数组student,用于存储和显示三个学生的基本情况。/*案例代码文件名:AL10_3.C*/#include#include struct.h/*定义并初始化一个外部结构数组student3*/struct std_info student3=“000102”,“张三”,“男”,1980,9,20,“000105”,“李四”,“男”,1980,8,15,“000112”,“王五”,“女”,1980,3,10;,/*主函数main()*/main()int i;/*打印表头:表示1个空格字符*/printf(No.NameSexBirthdayn);/*输出三个学生的基本情况*/for(i=0;i3;i+)printf(%-7s,studenti.no);printf(%-9s,studenti.name);printf(%-4s,studenti.sex);printf(%d-%d-%dn,studenti.birthday.year,studenti.birthday.month,studenti.birthday.day);程序演示,程序运行结果:No.Name Sex Birthday000102 张三 男 1980-9-20000105 李四 男 1980-8-15000112 王五 女 1980-3-10 与结构变量的定义相似,结构数组的定义也分直接定义和间接定义两种方法,只需说明为数组即可。与普通数组一样,结构数组也可在定义时进行初始化。初始化的格式为:结构类型 结构数组n初值表1,初值表2,.,初值表n例如,本案例中的结构数组student3。Return,10.4 指向结构类型数据的指针,结构变量在内存中的起始地址称为结构变量的指针。10.4.1 指向结构变量的指针 案例10.4 使用指向结构变量的指针来访问结构变量的各个成员。/*案例代码文件名:AL10_4.C*/#include“struct.h”struct std_info student=“000102”,“张三”,“男”,1980,9,20;main()struct std_info*p_std=,通过指向结构变量的指针来访问结构变量的成员,与直接使用结构变量的效果一样。一般地说,如果指针变量pointer已指向结构变量var(即pointer=&var),则以下三种形式等价:(1)var.成员(2)pointer-成员(3)(*pointer).成员/*“*pointer”外面的括号不能省!*/注意:在格式(1)中,分量运算符左侧的运算对象,只能是结构变量,;而在格式(2)中,指向运算符左侧的运算对象,只能是指向结构变量(或结构数组)的指针变量,否则都出错。思考题:如果要求从键盘上输入结构变量student的各成员数据,如何修改程序?AL10_4A.C,10.4.2 指向结构数组的指针案例10.5 使用指向结构数组的指针来访问结构数组。/*案例代码文件名:AL10_5.C*/#includestruct.h/*定义并初始化一个外部结构数组student*/struct std_info student3=000102,张三,男,1980,5,20,000105,李四,男,1980,8,15,“000112”,“王五”,“女”,1980,3,10;main()struct std_info*p_std=student;int i=0;/*打印表头*/printf(No.NameSexBirthdayn);,/*输出结构数组内容*/for(;ino,p_std-name,p_std-sex);printf(%4d-%2d-%2dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示如果指针变量p已指向某结构数组,则p+1指向结构数组的下一个元素,而不是当前元素的下一个成员。,10.4.3 指向结构数据的指针作函数参数案例10.6 用函数调用方式,改写案例10.5:编写一个专门的显示函数display(),通过主函数调用来实现显示。/*案例代码文件名:AL10_6.C*/#includestruct.h/*定义并初始化一个外部结构数组student*/struct std_info student3=000102,张三,男,1980,5,20,000105,李四,男,1980,8,15,“000112”,“王五”,“女”,1980,3,10;/*主函数main()*/main()void display();/*函数说明*/int i=0;/*打印表头*/printf(No.NameSexBirthdayn);,/*打印内容*/for(;ino,p_std-name,p_std-sex);printf(%4d-%2d-%2dn,p_std-birthday.year,p_std-birthday.month,p_std-birthday.day);程序演示Return,10.5 共用型简介,共用型 1概念 使几个不同的变量占用同一段内存空间的结构称为共用型。2共用类型的定义与结构类型的定义类似 union 共用类型名 成员列表;3共用变量的定义与结构变量的定义类似(1)间接定义先定义类型、再定义变量例如,定义data共用类型变量un1,un2,un3的语句如下:union data un1,un2,un3;,(2)直接定义定义类型的同时定义变量例如,union data int i;char ch;float f;un1,un2,un3;共用变量占用的内存空间,等于最长成员的长度,而不是各成员长度之和。例如,共用变量un1、un2和un3,在16位操作系统中,占用的内存空间均为字节(不是2+1+4=7字节)。共用变量的引用与结构变量一样,也只能逐个引用共用变量的成员例如,访问共用变量un1各成员的格式为:un1.i、un1.ch、un1.f。,案例10.9共用体变量的引用(AL10_9.C),5特点(1)系统采用覆盖技术,实现共用变量各成员的内存共享,所以在某一时刻,存放的和起作用的是最后一次存入的成员值。例如,执行un1.i=1,un1.ch=c,un1.f=3.14后,un1.f才是有效的成员。(2)由于所有成员共享同一内存空间,故共用变量与其各成员的地址相同。例如,un1un1.iun1.chun1.f。(3)不能对共用变量进行初始化(注意:结构变量可以);也不能将共用变量作为函数参数,以及使函数返回一个共用数据,但可以使用指向共用变量的指针。(4)共用类型可以出现在结构类型定义中,反之亦然。,10.6 定义已有类型的别名,除可直接使用提供的标准类型和自定义的类型(结构、共用、枚举)外,也可使用typedef定义已有类型的别名。该别名与标准类型名一样,可用来定义相应的变量。定义已有类型别名的方法如下:(1)按定义变量的方法,写出定义体;(2)将变量名换成别名;(3)在定义体最前面加上typedef。案例10.10 给实型float定义1个别名REAL。(1)按定义实型变量的方法,写出定义体:float f;(2)将变量名换成别名:float REAL;(3)在定义体最前面加上typedef:typedef float REAL;,案例10.10 给如下所示的结构类型struct date定义1个别名DATE。struct date int year,month,day;(1)按定义结构变量的方法,写出定义体:struct date d;(2)将变量名换成别名:struct date DATE;(3)在定义体最前面加上typedef:typedef struct date DATE;说明:(1)用typedef只是给已有类型增加个别名,并不能创造个新的类型。就如同人一样,除学名外,可以再取一个小名(或雅号),但并不能创造出另一个人来。(2)typedef与#define有相似之处,但二者是不同的:前者是由编译器在编译时处理的;后者是由编译预处理器在编译预处理时处理的,而且只能作简单的字符串替换。Return,2007年4月,1、有以下程序typedef structint b,p;A;void f(A c)/*注意:c是结构变量名*/int j;c.b+=1;c.p+=2;main()int i;A a=1,2;f(a);printf(“%d,%dn”,a.b,a.p);程序运行后的输出结果是()A)2,3 B)2,4 C)1,4 D)1,2,2007年4月,2、有以下程序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(程序运行后的输出结果是()A)1,2,3,4,5,6,7,8,9,10,B)10,9,8,7,6,5,4,3,2,1,C)2,3,1,6,8,7,5,4,10,9,D)10,9,8,7,6,1,2,3,4,5,2007年4月,3、有以下程序struct S int n;int a20;void f(int*a,int n)int i;for(i=0;in-1;i+)ai+=i;main()int i;struct S s=10,2,3,1,6,8,7,5,4,10,9;f(s.a,s.n);for(i=0;is.n;i+)printf(“%d”,s.ai);程序运行后的输出结果是()A)2,4,3,9,12,12,11,11,18,9,B)3,4,2,7,9,8,6,5,11,10,C)2,3,1,6,8,7,5,4,10,9,D)1,2,3,6,8,7,5,4,10,9,2007年4月,4、设有说明struct DATEint year;int month;int day;请写出一条定义语句,该语句定义d为上述结构体变量,并同时为其成员year、month、day 依次赋初值2006、10、1:_,struct DATA d=2006,10,1;,2007年9月,1、以下关于typedef的叙述错误的是A)用typedef可以增加新类型B)typedef只是将已存在的类型用一个新的名字来代表C)用typedef可以为各种类型说明一个新名,但不能用来为变量说明一个新名D)用typedef为类型说明一个新名,通常可以增加程序的可读性,2007年9月,2、有以下程序#includestructttintx;structtt*y;*p;structtta4=20,a+1,15,a+2,30,a+3,17,a;main()inti;p=a;for(i=1;ix);p=p-y;程序的运行结果是A)20,30,B)30,17C)15,30,D)20,15,2007年9月,3、有以下程序#include#includetypedefstructcharname9;charsex;floatscore2;STU;STUf(STUa)STUb=Zhao,m,85.0,90.0;inti;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i2;i+)a.scorei=b.scorei;returna;main()STUc=Qian,f,95.0,92.0,d;d=f(c);printf(%s,%c,%2.0f,%2.0fn,d.name,d.sex,d.score0,d.score1);程序的运行结果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,m,85,90D)Zhao,f,95,92,2007年9月,4、设有以下定义uniondataintd1;floatd2;demo;则下面叙述中错误的是A)变量demo与成员d2所占的内存字节数相同B)变量demo中各成员的地址相同C)变量demo和各成员的地址相同D)若给demo.d1赋99后,demo.d2中的值是99.0,2008年4月,1、以下结构体类型说明和变量定义中正确的是A)typedefstructB)structREC;intn;charc;REC;intn;charc;REC t1,t2;REC t1,t2;C)typedefstructREC;D)structintn=0;char c=A;t1,t2;intn;charc;REC;RECt1,t2;,2008年4月,2、有以下程序#include#includetypedefstructcharname9;charsex;floatscore2;STU;voidf(STUa)STUb=Zhao,m,85.0,90.0;int i;strcpy(a.name,b.name);a.sex=b.sex;for(i=0;i2;i+)a.scorei=b.scorei;main()STUc=Qian,f,95.0,92.0;f(c);printf(%s,%c,%2.0f,%2.0fn,c.name,c.sex,c.score0,c.score1);程序的运行结果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90,2008年4月,3、以下程序中函数fun的功能是:统计person所指结构体数组中所有性别(sex)为M的记录的个数,存入变量n中,并作为函数值返回。请填空。#include#defineN3typedefstructintnum;charnam10;charsex;SS;intfun(SSperson)inti,n=0;for(i=0;iN;i+)if(【14】=M)n+;returnn;main()SSWN=1,AA,F,2,BB,M,3,CC,M;intn;n=fun(W);printf(n=%dn,n);,personi.sex,2008年9月,1、有以下程序#includestructst intx,y;data2=1,10,2,20;main()structst*p=data;printf(%d,p-y);printf(%dn,(+p)-x);程序的运行结果是A)10,1B)20,1C)10,2D)20,2,2008年9月,2、#include main()struct STU charname9;char sex;double score2;struct STUa=Zhao,m,85.0,90.0,b=Qian,f,95.0,92.0;b=a;printf(%s,%c,%2.0f,%2.0fn,b.name,b.sex,b.score0,b.score1);程序的运行结果是A)Qian,f,95,92B)Qian,m,85,90C)Zhao,f,95,92D)Zhao,m,85,90,2009年3月,1、有以下程序#includestructordintx,y;dt2=1,2,3,4;main()structord*p=dt;printf(%d,+p-x);printf(%dn,+p-y);程序的运行结果是A)1,2 B)2,3 C)3,4 D)4,1注意:运算符-的优先级高于+,2009年3月,2、下列程序的运行结果为【1001,ChangRong,1098.0】#include#includestructAinta;charb10;doublec;voidf(structA*t);main()structAa=1001,ZhangDa,1098.0;f(,2009年9月,1、下面结构体的定义语句中,错误的是A)structordintx;inty;intz;structorda;B)structordintx;inty;I ntz;structorda;C)structordintx;inty;intz;n;D)structintx;inty;intz;a;,2009年9月,2、有以下程序#include#includestructAinta;charb10;doublec;structAf(structAt);main()structAa=1001,ZhangDa,1098.0;a=f(a);printf(%d,%s,%6.1fn,a.a,a.b,a.c);structAf(structAt)t.a=1002;strcpy(t.b,ChangRong);t.c=1202.0;returnt;程序运行后的输出结果是A)1001,ZhangDa,1098.0 B)1002,ZhangDa,1202.0C)1001,ChangRong,1098.0 D)1002,ChangRong,1202.0,2009年9月,3、设有定义structpersonintID;charname12;p;请将scanf(%d,【】);语句补充完整,使其能够为结构体变量p的成员ID正确读入数据。4、有以下程序#includetypedefstructintnum;doubles;REC;voidfun1(RECx)x.num=23;x.s=88.5;main()RECa=16,90.0;fun1(a);printf(%dn,a.num);程序运行后的输出结果是【】,&p.ID,16,

    注意事项

    本文(计算机二级C语言程序设计第10讲.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开