c语言第7章 数组.ppt

上传人:思*** 文档编号:1080207 上传时间:2019-09-22 格式:PPT 页数:36 大小:439.50KB
返回 下载 相关 举报
c语言第7章 数组.ppt_第1页
第1页 / 共36页
c语言第7章 数组.ppt_第2页
第2页 / 共36页
点击查看更多>>
资源描述

《c语言第7章 数组.ppt》由会员分享,可在线阅读,更多相关《c语言第7章 数组.ppt(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第七章 数 组,第七章 数组,C语言中除了基本类型(整型、实型、字符型)的数据之外,还有构造类型的数据。构造型数据由基本类型数据按一定的规则组成,因此也称“导出类型”。它们有:数组类型、结构体类型、共用体类型等。 数组 : 是有序数据的集合,数组中的每一个元素都属于同一个数据类型。一个数组用一个统一的名称数组名表示。数组中的元素由数组名和下标来唯一地确定。数组有一维数组、二维数组等。,7.1 一维数组的定义和引用,7.1.1 一维数组的定义定义方式: 类型说明符 数组名常量表达式;例如: int a10; 表示数组名为 a 、含有10个整型元素的数组。注意:1. 数组名的命名方式和变量名相同,

2、遵循标识符的命名规则。2. 数组名后面是用 “ ”括起来的常量表达式,不能用“( )”。3. 常量表达式表示元素的个数,即数组长度。数组的下标从 0 开始。,例#define M 100int aM ; /* M为符号常量 */,int n ;int an ; /* n 是变量 */,合法,不合法,scanf(%d , ,常量表达式可以是常量或符号常量,但不能是变量。C不允许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。,7.1.2 一维数组元素的引用 数组必须先定义后使用。 C语言中规定只能逐个引用数组元素而不能一次引用整个数组。 数组元素的表示形式 : 数组名下标,例

3、 7.1 数组元素的引用。main( ) int i , a10 ; for(i=0 ; i=0; i- -) /* 倒序输出数组元素值 */ printf(%d , ai ) ; 运行结果:9 8 7 6 5 4 3 2 1 0,可以是整型常量或整型表达式,例如: a0=a5+a7+a2*3 ;,可以用赋值语句或输入函数使数组中的元素得到值,也可以在程序运行之前对数组进行初始化,即 对数组元素赋初值。 数组元素的初始化有以下几种方法: 1. 在定义数组的同时对数组元素赋初值。例如: int a10= 0,1,2,3,4,5,6,7,8,9 ;相当于:a0=0 , a1=1 , , a9=9

4、2. 可以只给一部分元素赋值。例如: int a10=0,1,2,3,4 ; 表示只对前面 5 个元素赋初值,后5个元素值为0。,7.1.3 一维数组的初始化,3. 如果一个数组中全部元素赋同一个初值,也必须逐个写出。如 int a10=0,0,0,0,0,0,0,0,0,0; 不能写成int a10=0*10;注意:不能给数组整体赋值。4. 对全部数组元素赋初值时可以不指定数组长度。例如: int a =1,2,3,4,5; 系统自动将 a 的长度定义为 5。 但是,当数组长度与初值个数不相同时必须写出数组长度。,7.1.4 一维数组程序举例,main( ) int i; int f20=1

5、,1; /* 处理前20项,并对第一、第二项赋初值1 */ for (i=2; i20; i+) /* i=2 表示从第三项开始 */ fi=fi-2+fi-1; for (i=0;i2),例7.3 用冒泡法对10个数排序(从小到大) 冒泡法的基本思想: 将相邻两个数比较,小的调到前面,大的调到后面,就象气泡一样,小的往上升,大的往下沉,所以称为“冒泡排序”。 第一次,从第一个数开始相互比较相邻的两个数,直到最后一个数, 则小的数上升,最大数沉底。 第二次,从第一个数开始相互比较相邻两个数,直到倒数第二个数, 则小的数又上升,而次大的数下沉到倒数第二位。,如此进行下去。,分析:1. 对6个数排

6、序,要比较 5 趟。2. 每一趟中作两两比较的次数为:5,4,3,2,13. 如果有n个数,则要进行n-1趟比较。在第1趟中要进行n-1次两两比较,在第j 趟中要进行n-j 次两两比较。,程序 一:(用冒泡法对10个数排序)main( ) int a10 , i , j ,t ; printf(Input 10 numbers:n) ; for(i=0 ;iai+1) t=ai; ai=ai+1 ; ai+1=t ; printf( The sorted number : n) ; for(i=0 ;i a00 , a01 , a02 , a03 a1 - a10 , a11 , a12 ,

7、a13 a2 - a20 , a21 , a22 , a23C语言中的二维数组元素排列顺序是: 按行存放 a00 , a01 , a02 , a03 , a10 , a11 , a12 , a13 , .C语言允许使用多维数组,例如:float a234 ;,二维数组的元素表示形式: 数组名下标下标 1. 下标可以是整型常量或整型表达式。 2. 数组元素可以出现在表达式中,也可以被赋值。 例如: a24=35 ; a12=a01+a02 ;注意 : 数组下标的值必须在数组定义时的大小范围内。 例如 :int a23 ; a23=35 ; /* 出错 */ 强调一点:定义数组 a23 中的2和3

8、表示行数和列数,而引用数组元素a23时,2和3 表示第 3行第 4个元素(下标从 0 开始)。,7.2.2 二维数组元素的引用,1. 分行给二维数组赋初值 ( 即按行赋初值 )例如: int a34= 1,2,3,4, 5,6,7,8, 9,10,11,12 将第一个“ ”内的数据赋给第一行的元素, .,不直观,容易出错,7.2.3 二维数组的初始化,2. 可以将所有数据写在一个“ ”内,系统自动按数组元素 的排列顺序赋初值。 例如: int a34=1,2,3,4,5,6,7,8,9,10,11,12 ;,如果对全部元素赋值,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省略,系统

9、按数据总个数和每行的列数确定出行数。例如: int a 4=1,2,3,4,5,6,7,8,9,10,11,12 ;若每一行都清楚地进行了初始化(分行赋初值),也可以省略行下标: 例如: int a 4=0,0,3, ,0,10;,C语言在定义数组和表示数组时采用 a 这种两个方括弧的方式,对数组初始化时十分有用,它使概念清楚,使用方便,不容易出错。,这种方法对非0元素少时比较方便, 不必将所有的0都写出来, 只需输入少量数据,main( ) int a23=1,2,3,4,5,6; int b32 , i , j ; printf(array a:n) ; for(i=0 ; i2 ;i+)

10、 for(j=0 ; j3 ; j+) printf(%5d, aij);printf(n) ; for(i=0 ; i2 ; i+) for(j=0 ; j3 ; j+) bji=aij ; printf(array b:n) ; for(i=0 ; i3 ; i+) for(j=0 ; jb00a01-b10a02-b20a10-b01 a11-b11a12-b21,即: bji=aij i=0: j=0,1,2; i=1: j=0,1,2;,7.3 字符数组,字符数组 用来存放字符数据的数组。字符数组中的一个元素存放一个字符。7.3.1 字符数组的定义 char 数组名常量表达式 ;由于

11、字符型与整型相互通用,因此也可以定义为整型。 int 数组名常量表达式 ;例如:char c10; c0=I; c1= ; c2=a; c3=m; c4= ; c5=h; c6=a; c7=p; c8=p; c9=y;,逐个将字符赋给数组中的元素。例如: char c5=C, h, i, n, a; 如果花括弧中提供的初值个数(字符个数)大于数组长度 , 则按语法错误处理。 如果初值字符个数小于数组长度, 则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符(即0)。如 char c10= c, , p, r, o, g, r, a, m;,7.3.2 字符数组的初始化,如果初值个

12、数与数组长度相同,定义时可省略数组长度,系统会根据初值个数确定数组长度。例如char c =C,h,i,n,a; 数组c的长度为5。 二维字符数组的定义与赋初值也与其它类型的数组相同。,例7.6 输出一个字符串。 main( ) char c10=I, , a, m, , a, , b, o, y; int i ; for(i=0 ; i10 ; i+) printf(%c, ci) ; printf(n) ;,7.3.3 字符数组的引用 可以引用字符数组中的一个元素,得到一个字符。,运行结果:I am a boy,例7.7 输出一个图形。,main( ) int i , j ; char d

13、iamond 5= , , *, , *, , *,*, , , , *, , *, , *, , , * ; for(i=0 ; i5 ; i+) for(j=0 ; j5 ; j+) printf(%c,diamondij) ; printf(n) ; ,运行结果: * * * * * * * *,7.3.4 字符串和字符串结束标志,C语言中将字符串作为字符数组来处理。由于字符串的实际长度可能与定义的字符数组长度不同,因此为了测定字符串的实际长度,在C语言中规定了一个“字符串结束标志”,用字符0 代表。0 代表ASCII码为 0 的字符,即“空操作符”,因此用0来作为字符串结束标志 不会产

14、生任何附加的动作。 对于字符串常量,系统自动加上一个0作为结束符。 例如:I am a boy,有了0,对于存放字符串的字符数组的长度就显得不太重要了,只要保证数组长度大于字符串长度即可。可以用字符串常量 对字符数组初始化: 例如: char c =I am happy; 也可省去,直接写成 char c =I am happy;,注意:用字符串常量作为初值时,字符数组的长度是字符串的长度 再加上结束符0的长度(即加1)。如 char c =I am happy ; 相当于: char c =I, ,a,m, ,h,a,p,p,y, 0 但不同于:char c =I, ,a,m, ,h,a,p

15、,p,y,c 的长度是 11,c 的长度是 10,字符数组并不一定要求最后一个字符为0,甚至可以不包含0。如 char c5=C,h,i,n,a; 是合法的。而是否要加0,完全根据需要决定。由于系统对字符串常量自动加一个0,因此,人们为了使处理方法一致,便于测定字符串的实际长度, 以及在程序中作相应的处理,在字符数组中也常常人为地加上一个0 。如 char c6=C,h,i,n,a,0;,7.3.5 字符数组的输入输出(两种方法),1. 用格式符 %c 逐个字符输入输出。 例如 int i;char c5;for (i=0;ithat, 1 字符串2, 函数值为一正整数 如果字符串1 0) strcpy(string , str2) ; printf(n The largest string is :n %sn, string) ; ,运行结果:输入:CHINA HOLLAND AMERICA输出:The largest string is:HOLLAND,例7.9 有三个字符 串,要 找出三个字符串中最大的一个 。,

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

当前位置:首页 > 教育专区 > 高考资料

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

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