C数组及自定义数据类型.ppt

上传人:tia****nde 文档编号:11495253 上传时间:2020-04-25 格式:PPT 页数:57 大小:480.50KB
返回 下载 相关 举报
C数组及自定义数据类型.ppt_第1页
第1页 / 共57页
C数组及自定义数据类型.ppt_第2页
第2页 / 共57页
C数组及自定义数据类型.ppt_第3页
第3页 / 共57页
点击查看更多>>
资源描述
2020年4月25日9时34分,1,C+面向对象程序设计,普通高等教育“十一五”国家级规划教材中国高等院校计算机基础教育课程体系规划教材,谭浩强编著,2020年4月25日9时34分,2,第5讲C+数组及自定义数据类型,5.1授课内容C+数组及自定义数据类型的使用。主要包括:1一维和二维数组;2字符数组与字符串;3字符串函数;4结构体的定义;5结构变量的定义、初始化、结构成员的访问等;6结构体与数组;7结构与链表;8共用体和枚举类型。,2020年4月25日9时34分,3,第5讲C+数组及自定义数据类型,5.2授课要求1掌握数组的基本概念;2掌握一维数组和二维数组的使用;3掌握字符数组与字符串的关系以及字符串变量的表示;4掌握结构体的概念和结构类型的定义;5掌握结构体变量的定义和初始化;6掌握结构体成员的访问、结构体赋值的含义以及结构体与指针的关系;7掌握共用体和枚举类型。,2020年4月25日9时34分,4,第5讲C+数组及自定义数据类型,5.3授课重点1一维数组和二维数组的定义及使用;2结构的定义和使用。5.4授课难点1数组名作函数的参数;2结构体与指针的结合。,2020年4月25日9时34分,5,1一维数组的定义和引用,(1)定义一维数组格式为:类型标识符数组名常量表达式;例如:inta10;它表示数组名为a,此数组为整型,有10个元素。,2020年4月25日9时34分,6,1一维数组的定义和引用,说明:A数组名定名规则和变量名相同,遵循标识符定名规则。B用方括号括起来的常量表达式表示下标值,如下面的写法是合法的:inta10;inta2*5;intan*2;/假设前面已定义了n为常变量,2020年4月25日9时34分,7,1一维数组的定义和引用,C常量表达式的值表示元素的个数,即数组长度。例如:在“inta3;”中,3表示a数组有3个元素,下标从0开始,这3个元素是:a0,a1,a2。注意最后一个元素是a2而不是a3。D常量表达式中可以包括常量、常变量和符号常量,但不能包含变量。即:C+不允许对数组的大小作动态定义。,非法定义数组:intn;cinn;/输入a数组的长度intan;/企图根据n的值决定数组的长度,2020年4月25日9时34分,8,1一维数组的定义和引用,(2)引用一维数组的元素数组必须先定义,然后使用。只能逐个引用数组元素的值而不能一次引用整个数组中的全部元素的值。数组元素的表示形式为:数组名下标下标可以是整型常量或整型表达式。例如a0=a5+a7-a2*3,2020年4月25日9时34分,9,1一维数组的定义和引用,例1数组元素的引用。#includeusingnamespacestd;intmain()inti,a10;for(i=0;i=0;i-)coutai“;cout数组名下标;例如:对一个大小为5的字符型数组a赋值,可以用下列两种方式:chara5;cina;,2020年4月25日9时34分,13,数组的赋值,3.用scanf()函数,其语法格式为:scanf(“类型标识”,数组名);或scanf(“类型标识”,数组元素地址);4.用C+库函数中的strcpy()函数(字符串拷贝函数),其常见语法格式为:strcpy(数组名,字符串);/将一个字符串赋值到一个字符数组中例如:charstr110;strcpy(str1,”hello”);注意,此例不能写为:str1=”hello”;/不合法另一种常见的语法格式为:strcpy(数组名1,数组名2);/将数组2中的字符串赋值到数组1中例如:strcyp(str1,str2);注意,上例不能写为:str1=str2;/不合法,2020年4月25日9时34分,14,数组越界,在给数组元素赋值或对数组元素进行引用时,一定要注意下标的值不要超过数组的范围,否则会产生数组越界问题。因为当数组下标越界时,编译器并不认为它是一个错误,但这往往会带来非常严重的后果。例如:定义了一个整型数组a:inta10;数组a的合法下标为09。如果程序要求给a10赋值,将可能导致程序出错,甚至系统崩溃。,2020年4月25日9时34分,15,数组越界,常用下面的式子确定数组的大小,预防数组越界情况的发生。假定对于一个整型数组a,它的大小为:sizeof(a)/sizeof(int)sizeof(a)表示求数组a在内存中所占字节数,sizeof(int)表示求整型数据在内存中所占字节数。使用上面这个式子,可以使数组大小计算在16位机器和32位机器之间移植。,2020年4月25日9时34分,16,2二维数组的定义和引用,具有两个下标的数组称为二维数组。(1)定义二维数组定义二维数组的一般形式为:类型标识符数组名常量表达式常量表达式例如:floata34,b510;定义a为34(3行4列)的单精度数组,b为510(5行10列)的单精度数组。注意:不能写成“floata3,4,b5,10;”。,2020年4月25日9时34分,17,2二维数组的定义和引用,可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。,例如:可以把a看作是一个一维数组,它有3个元素:a0a1,a2,每个元素又是一个包含4个元素的一维数组,,图1。,2020年4月25日9时34分,18,2二维数组的定义和引用,C+中,二维数组中元素排列的顺序是:按行存放,图2表示对a34数组存放的顺序。,图2,2020年4月25日9时34分,19,2二维数组的定义和引用,C+允许使用多维数组。例如,定义三维数组的方法是:floata234;定义float型三维数组a,它有234=24个元素。,2020年4月25日9时34分,20,2二维数组的定义和引用,(2)二维数组的引用二维数组的元素的表示形式为数组名下标下标例如:B12=a23/2;在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。,2020年4月25日9时34分,21,2二维数组的定义和引用,(3)二维数组的初始化A分行给二维数组赋初值。如:inta34=1,2,3,4,5,6,7,8,9,10,11,12;B可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。如:inta34=1,2,3,4,5,6,7,8,9,10,11,12;效果与前相同。但以第1种方法为好,一行对一行,界限清楚。,2020年4月25日9时34分,22,2二维数组的定义和引用,C可以对部分元素赋初值,其余元素值自动置为0。如:inta34=1,0,6,0,0,11;初始化后的数组元素如下:1000060000110也可以只对某几行元素赋初值:inta34=1,5,6;数组元素为100056000000,第3行不赋初值。也可以对第2行不赋初值:inta34=1,9;,2020年4月25日9时34分,23,2二维数组的定义和引用,D如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。如inta34=1,2,3,4,5,6,7,8,9,10,11,12;可以写成inta4=1,2,3,4,5,6,7,8,9,10,11,12;在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。如inta4=0,0,3,0,10;,数组各元素为:0030000001000,2020年4月25日9时34分,24,2二维数组的定义和引用,(4)二维数组程序举例例2将一个二维数组行和列元素互换,存到另一个二维数组中。例如:a=123b=144562536,2020年4月25日9时34分,25,2二维数组的定义和引用,coutendl;coutarrayb:endl;for(i=0;i=2;i+)for(j=0;j=1;j+)coutbij;coutendl;return0;,程序如下:#includeusingnamespacestd;intmain()inta23=1,2,3,4,5,6;intb32,i,j;coutarraya:endl;for(i=0;i=1;i+)for(j=0;j=2;j+)coutaijai;coutendl;select_sort(a,10);/函数调用,数组名作实参coutthesortedarray:endl;for(i=0;i10;i+)/输出10个已排好序的数coutai;coutendl;return0;,voidselect_sort(intarray,intn)/形参array是数组名inti,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(arrayjarrayk)k=j;t=arrayk;arrayk=arrayi;arrayi=t;,2020年4月25日9时34分,29,3用数组名作函数参数,关于用数组名作函数参数有两点要说明:A如果函数实参是数组名,形参也应为数组名(或指针变量)。实参数组与形参数组类型要一致。B数组名代表数组首元素的地址,并不代表数组中的全部元素。形参数组的长度不要超过实参数组的长度。实参数组必须定义为具有确定长度的数组,而形参数组可以不定义长度,只在数组名后跟一个空的方括号,同时在被调用的函数中另设一个参数用来传递元素的个数。函数首部的下面几种写法都合法,作用相同。voidselect_sort(intarray10,intn)voidselect_sort(intarray,intn)voidselect_sort(intarray5,intn),C+实际上只把形参数组名作为一个指针变量来处理,用来接收从实参传过来的地址。,/指定元素个数与实参数组相同,/不指定元素个数,/指定元素个数与实参数组不同,2020年4月25日9时34分,30,4字符数组,用来存放字符数据的数组是字符数组,字符数组中的一个元素存放一个字符。定义字符数组的方法与前面介绍的类似。例如:charc10;c0=I;c1=;c2=a;c3=m;c4=;c5=h;c6=a;c7=p;c8=p;c9=y;,2020年4月25日9时34分,31,4字符数组,(1)字符串和字符串结束标志C+规定了一个“字符串结束标志,以字符0代表。例如:字符串Iamhappy共有10个字符,但在内存中它共占11个字节,最后一个字节0是由系统自动加上的。如果用以下语句输出一个字符串:coutstring1;coutnum。“-”称为指向运算符。,p,2020年4月25日9时34分,45,6结构体类型,(4)用结构体变量和指向结构体变量的指针构成链表链表是一种常见的重要的数据结构。图6表示最简单的一种链表(单向链表)的结构。,图6,Head为“头指针”,一个结点,NULL:链表结束,2020年4月25日9时34分,46,6结构体类型,例如,可以设计这样一个结构体类型:structStudentintnum;floatscore;Student*next;/next指向Student结构体变量;,参见图7所示。,图7,2020年4月25日9时34分,47,6结构体类型,(5)结构体类型数据作为函数参数将一个结构体变量中的数据传递给另一个函数,有下列3种方法:A用结构体变量名作参数。一般较少用这种方法。B用指向结构体变量的指针作实参,将结构体变量的地址传给形参。C用结构体变量的引用变量作函数参数。,2020年4月25日9时34分,48,7共用体,有时需要使几种不同类型的变量存放到同一段内存单元中。例如,可把一个整型变量、一个字符型变量、一个双精度型变量放在同一个地址开始的内存单元中(见图8)。这就是共用体。,图8,2020年4月25日9时34分,49,7共用体,(1)声明共用体声明共用体类型的一般形式为union共用体类型名成员表列;定义共用体变量的一般形式为:共用体类型名共用体变量名;,比如:uniondatainti;charch;doubled;a,b,c;,2020年4月25日9时34分,50,7共用体,(2)对共用体变量的访问方式不能引用共用体变量,而只能引用共用体变量中的成员。例如:a.i(引用共用体变量中的整型成员i)a.ch(引用共用体变量中的字符型成员ch)a.f(引用共用体变量中的双精度型成员d),不能只引用共用体变量,例如:couta;是错误的,应该写成couta.i;或couta.ch;等。,2020年4月25日9时34分,51,8枚举类型,如果一个变量只有几种可能的值,可以定义为枚举(enumeration)类型。所谓“枚举”是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。(1)声明枚举类型声明枚举类型的一般形式为enum枚举类型名枚举常量表列;,2020年4月25日9时34分,52,8枚举类型,例如:enumweekdaysun,mon,tue,wed,thu,fri,sat;在声明了枚举类型之后,可以用它来定义变量。如:weekdayworkday,week_end;这样,workday和week_end被定义为枚举类型weekday的变量。可以赋值,例如:workday=mon;week_end=sun;是正确的。,2020年4月25日9时34分,53,8枚举类型,说明:A对枚举元素按常量处理,故称枚举常量。B枚举元素作为常量,它们是有值的,C+编译按定义时的顺序对它们赋值为0,1,2,3,。也可以在声明枚举类型时另行指定枚举元素的值。C枚举值可以用来做判断比较。D一个整数不能直接赋给一个枚举变量。,2020年4月25日9时34分,54,9用typedef声明类型,可以用typedef声明一个新的类型名来代替已有的类型名。如:typedefintINTEGER;typedeffloatREAL;这样,以下两行等价:inti,j;floata,b;INTEGERi,j;REALa,b;,2020年4月25日9时34分,55,9用typedef声明类型,也可以声明结构体类型:typedefstructintmonth;intday;intyear;DATE;可以用DATE定义变量:DATEbirthday;DATE*p;/p为指向此结构体类型数据的指针,注意DATE是新类型名,而不是结构体变量名,2020年4月25日9时34分,56,课后总结,(1)一维和二维数组的定义和使用;(2)字符串与字符数组;(3)结构体的定义、使用;(4)链表;(5)共用体的定义、使用;(6)枚举类型的定义、使用。,重要,2020年4月25日9时34分,57,课后作业,P36:14、15、16本讲结束,学好C+的要点:多编程,多上机,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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