C语言数组.ppt
《C语言数组.ppt》由会员分享,可在线阅读,更多相关《C语言数组.ppt(55页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、本章要点本章要点 什么是数组什么是数组? ? 为什么要使用数组为什么要使用数组? ? 如何定义数组如何定义数组? ? 如何引用数组元素如何引用数组元素? ? 数组元素在内存中按什么方式存放数组元素在内存中按什么方式存放? ? 什么是字符串什么是字符串? ? 字符串结束符的作用是什么字符串结束符的作用是什么? ? 如何实现字符串的存储和操作,包括字符串的输入如何实现字符串的存储和操作,包括字符串的输入和输出和输出? ? 怎样理解怎样理解C C语言将字符串作为一个特殊的一维字符语言将字符串作为一个特殊的一维字符数组数组? ? 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字
2、符数组和字符串问题的提出问题的提出n输入输入10个数,之后再将他们输出。个数,之后再将他们输出。main( ) int a0,a1,a2,a3,a4,a5,a6,a7,a8,a9; scanf(“%d”,&a0); scanf(“%d”,&a1); scanf(“%d”,&a2); scanf(“%d”,&a3); scanf(“%d”,&a4); scanf(“%d”,&a5); scanf(“%d”,&a6); scanf(“%d”,&a7); scanf(“%d”,&a8); scanf(“%d”,&a9);printf(“%d”,a0);printf(“%d”,a1);printf(“
3、%d”,a2);printf(“%d”,a3);printf(“%d”,a4);printf(“%d”,a5);printf(“%d”,a6);printf(“%d”,a7); printf(“%d”,a8);printf(“%d”,a9); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串问题的提出问题的提出n我们希望我们希望main( ) 一下定义一下定义10个整数个整数 a10; 循环输入循环输入 scanf(“%d”,&ai); 循环输出循环输出 printf(“%d”,ai); 一批相同类型的变量使用同一个数组变量名,用下一批相同类型的变量使用同
4、一个数组变量名,用下标来相互区分。标来相互区分。优点:表述简洁,可读性高;便于使用优点:表述简洁,可读性高;便于使用循环循环结构结构 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串数组的概念数组的概念n数组:数组:相同类型相同类型变量的集合,共用一个名字,用变量的集合,共用一个名字,用下标区别。下标区别。n按照下标递增在内存中连续存放。按照下标递增在内存中连续存放。n数组元素:数组中的变量。数组元素:数组中的变量。n每个元素都属于同一类型。每个元素都属于同一类型。n由由数组名数组名和和下标下标唯一标识。唯一标识。 5.1 一维数组一维数组5.2 二维数组
5、二维数组5.3字符数组和字符串字符数组和字符串第五章数组第五章数组5.1 一维数组一维数组5.2 二维数组二维数组5.3 字符数组和字符串字符数组和字符串l 一维数组好比数学中的数列,各个元素排成一排。一维数组好比数学中的数列,各个元素排成一排。l二维数组好比数学中的矩阵,各个元素先站成排,二维数组好比数学中的矩阵,各个元素先站成排,各个排再站成列。各个排再站成列。l字符数组也是一维或二维数组,它的元素都是字符字符数组也是一维或二维数组,它的元素都是字符型变量。型变量。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1 一维数组一维数组n一维数组是一
6、种构造数据类型。一维数组是一种构造数据类型。学习如下:学习如下:n5.1.1 一维数组定义一维数组定义n5.1.2 一维数组元素的引用一维数组元素的引用n5.1.3 一维数组的初始化一维数组的初始化 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.1 一维数组的定义一维数组的定义n一维数组的定义形式:一维数组的定义形式: 数据类型数据类型 数组名数组名常量表达式常量表达式合法标识符合法标识符数组元素个数,数组长度数组元素个数,数组长度数组元素的类型数组元素的类型2004 a0 a1 a2 a920002008内存内存2036例例 int a10;一
7、批相同类型的变量一批相同类型的变量使用同一个数组名使用同一个数组名, ,用下标来相互区分。用下标来相互区分。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.1 一维数组的定义一维数组的定义l 数组名遵循标识符的命名规则。数组名遵循标识符的命名规则。l注意使用注意使用 l数据类型可以是任何类型,如数据类型可以是任何类型,如int,float,charl常量表达式说明数组元素个数定义后不允许改变。常量表达式说明数组元素个数定义后不允许改变。n正确的定义方式正确的定义方式n int b2+3;n int c10;n错误的定义方式错误的定义方式 n in
8、t x=10,ax;n int a(10);n int a1.0; 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串n数组元素必须先定义,后使用数组元素必须先定义,后使用n不能一次使用整个数组,只能使用元素。不能一次使用整个数组,只能使用元素。n使用数组元素与使用使用数组元素与使用一般变量一般变量方法完全相同。方法完全相同。n形式:数组名形式:数组名下标下标例如例如 int a10 ;/10个变量:个变量:a0、a1、 a9 scanf(“%d”,&a0); a1=10* *a0; printf(“%d”,a1);n下标不要越界,不能使用下标不要越界,不能
9、使用a105.1.2 一维数组元素的引用一维数组元素的引用 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.3 一维数组的初始化一维数组的初始化n (1)对全部数组元素赋初始值对全部数组元素赋初始值 int a5=1,2,3,4,5;a12345 a0 a1 a2 a3 a4n(2)对部分数组元素赋初始值对部分数组元素赋初始值 int a5=1,2,3;n(3)可以省略数组长度,系统自动计算。可以省略数组长度,系统自动计算。 int a =1,2,3,4,5; /长度就是长度就是5 a12300 a0 a1 a2 a3 a4 5.1 一维数组一维数
10、组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.3 一维数组的初始化一维数组的初始化n 问题问题1,例如,例如int a5; printf(“%d”,a0); 会输出什么?会输出什么?随机数随机数n 问题问题2,要定义,要定义100个整型变量,初值都为个整型变量,初值都为0,怎么写?,怎么写?int a100=0; 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 只能逐个对数组元素进行操作(字符数组例外)只能逐个对数组元素进行操作(字符数组例外)输入方法:输入方法:int a10,i;输入第输入第i个数组元素:个数组元素:scan
11、f(%d,&ai);输入所有数组元素:输入所有数组元素:for (i=0;i10;i+) scanf(%d,&ai);输出方法:输出方法:输出第输出第i个数组元素:个数组元素:printf(%d,ai);输出所有数组元素:输出所有数组元素:for (i=0;i10;i+) printf(%d,ai);5.1.4 5.1.4 一维数组应用举例一维数组应用举例n一维数组的输入和输出一维数组的输入和输出 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.1.4 5.1.4 一维数组应用举例一维数组应用举例例例5.1 建立一个存放建立一个存放10个数据的数组,数
12、组元素值为数个数据的数组,数组元素值为数组元素下标的组元素下标的10倍,然后按正序和逆序输出。倍,然后按正序和逆序输出。010 2090807060504030正序输出正序输出逆序输出逆序输出a a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串变量变量 i i 既做既做 数组下标,又做数组下标,又做 循环变量;循环变量;通过循环,逐个处理数组元素通过循环,逐个处理数组元素 。5.1.4 5.1.4 一维数组应用举例一维数组应用举例n int a10,i;n 对于对于i从从0到到9循环循环 ai=1
13、0* *i;n 对于对于i从从0到到9循环循环 printf(“%d“,ai);n 对于对于i从从9到到0循环循环 printf(“%d“,ai);void main() int a10 ,i; for(i=0;i10;i+) /*赋值赋值*/ ai=i* *10; for(i=0;i=0;i-) /*逆序输出逆序输出*/ printf(%5d,ai); 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例 5.3 用数组求用数组求Fibonacci数列前数列前20个数个数f0f1f2f3f4f5f19.11f19014523192355.1.4 5.1.
14、4 一维数组应用举例一维数组应用举例1, 1, 2, 3, 5, 8, 13, f0=1f1=1fn=fn-1+fn-2 (n=2) 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串void main( ) int i; int f 20 = 1, 1; /* 数组初始化数组初始化 */ for(i = 2; i 20; i+) /*计算数列存到数组计算数列存到数组*/ f i = f i - 1 + f i - 2; for(i = 0; i max) max=ai;nsum+=ai;nave=sum/10;n输出最大值,总和,分均值输出最大值,总和,分
15、均值void main()int a10,i,max ; for(i=0;i10;i+) scanf(%d,&ai); max=a0; for(i=0;i10;i+) if(maxa1a0a1,则交,则交换;然后比较第二个数与第三个数;依次类推,直至第换;然后比较第二个数与第三个数;依次类推,直至第n-1n-1个数和第个数和第n n个数比较为止个数比较为止第一趟冒泡排序,结果最大的第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上。数被安置在最后一个元素位置上。(2 2)对前)对前n-1n-1个数进行第二趟冒泡排序,结果使次大的数被个数进行第二趟冒泡排序,结果使次大的数被安置在第安置在第n
16、-1n-1个元素位置。个元素位置。(3 3)重复上述过程,共经过)重复上述过程,共经过n-1n-1趟冒泡排序后,排序结束。趟冒泡排序后,排序结束。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 3 4 4冒泡排序过程冒泡排序过程a0a1a2a3 第一趟排序第一趟排序 1 3 2 1 3 2 4 4 第第 二趟排序二趟排序 2 1 3 4 第第 三趟排序三趟排序 1 2 3 4结果结果 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串main() int a10,i,j,t; for(i=0;i10;i+)/*输入输
17、入*/ scanf(%d,&ai); printf(n); for(j=1;j=9;j+) /*排序排序*/ for(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; for(i=0;i10;i+) /*输出输出*/printf(%d ,ai);步骤步骤: :n输入输入: : for for循环输入循环输入1010个整数个整数n2.2.处理处理: :排序排序 循环做循环做9 9趟:趟: 两两比较九次,找出两两比较九次,找出数中最大数。数中最大数。( (循环循环) )3.3.输出输出: : for循环输入循环输入10个整数个整数 例例5.4输入输入10个数,对其进行从小到大排序
18、个数,对其进行从小到大排序找出最大数找出最大数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串 例例: 最小值交换输入最小值交换输入10个数个数,将最小值与第一个数交将最小值与第一个数交换,输出交换后的换,输出交换后的10个数。个数。1)用)用k记录最小值对应的下标记录最小值对应的下标 for(j=1;j=9;j+) if(aja0) k=j; ak就是最小值就是最小值2)最小值与第一个数交换)最小值与第一个数交换 ak a0 x=a0; a0=ak; ak=x;5.1一维数组一维数组-应用举例应用举例 5.1 一维数组一维数组5.2 二维数组二维数组5
19、.3字符数组和字符串字符数组和字符串5.1一维数组一维数组-应用举例应用举例n例例5.6输入输入10个数,对其进行从小到大排序个数,对其进行从小到大排序用选择法排序排序过程:排序过程:(1 1)首先通过)首先通过n-1n-1次比较,从次比较,从n n个数中找出最小的,个数中找出最小的, 将将它与第一个数交换。它与第一个数交换。 第一趟选择排序,结果最小的数被安置在第一个元第一趟选择排序,结果最小的数被安置在第一个元素位置上。素位置上。(2 2)再通过)再通过n-2n-2次比较,从剩余的次比较,从剩余的n-1n-1个数中找出关键字个数中找出关键字次小的记录,将它与第二个数交换。次小的记录,将它与
20、第二个数交换。 第二趟选择排序第二趟选择排序, ,结果第二小的数被安置在第一个元结果第二小的数被安置在第一个元素位置上。素位置上。(3 3)重复上述过程,共经过)重复上述过程,共经过n-1n-1趟排序后,排序结束。趟排序后,排序结束。 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例初始:初始: 49 38 65 97 76 13 27 kji=11349一趟:一趟: 13 38 65 97 76 49 27 i=22738二趟:二趟: 13 27 65 97 76 49 38 三趟:三趟: 13 27 38 97 76 49 65 四趟:四趟: 13
21、 27 38 49 76 97 65 五趟:五趟: 13 27 38 49 65 97 76 六趟:六趟: 13 27 38 49 65 76 97 kkkkjjjjjjjjjji表示趟数表示趟数 k表每趟中最小数的下标表每趟中最小数的下标 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串例例5.6输入输入10个数,对其进行从小到大排序个数,对其进行从小到大排序void main() int a11,i,j,k,x; for(i=1;i11;i+) scanf(%d,&ai); for(i=1;i10;i+) k=i; for(j=i+1;j=10;j+)
22、 if(ajak) k=j; if(i!=k) x=ai; ai=ak; ak=x; for(i=1;i11;i+) printf(%d ,ai);步骤步骤: :输入输入: : for for循环输入循环输入1010个整数个整数2. 2. 排序处理排序处理: : 循环做循环做9 9次:次: 找出数中第找出数中第i i小数小数( (循环循环) )3. 3. 输出输出: : for for循环输入循环输入1010个整数个整数找出找出10个数中个数中第第i小数小数 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组多维数组的空间想象多维数组
23、的空间想象二维数组:二维数组: 一个表格或一个平面矩阵一个表格或一个平面矩阵一维数组:一维数组: 一列长表或一个向量一列长表或一个向量三维数组:三维数组: 三维空间的一个方阵三维空间的一个方阵 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串n5个学生,个学生,5门课程,求每个学生的门课程,求每个学生的5门课程的平均门课程的平均成绩,求每门课程的成绩,求每门课程的5个同学的平均成绩,如何处个同学的平均成绩,如何处理?理?n int stu15,stu25,stu45;n思考:求每门课程的平均成绩遇到什么问题?思考:求每门课程的平均成绩遇到什么问题?5.2
24、二维数组二维数组问题的提出问题的提出 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n1 二维数组的定义二维数组的定义n 定义方式:定义方式: 类型名类型名 数组名数组名行长度行长度列长度列长度 例如:例如:int a23; int a34; float b52; int c234; int a3,4; ( ) 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n 1 二维数组的定义二维数组的定义n 存储方式:按行存储存储方式:按行存储int a23;01201内存地址内
25、存地址200020002004200420082008201220122016201620202020a01a10a11a12a00a02a0a1a0a1每个元素每个元素ai又是一个包含又是一个包含3个元素的一维数组个元素的一维数组a由由2个元素组成个元素组成a0,a1是行名是行名,每行首地址每行首地址 5.1 一维数组一维数组5.2 二维数组二维数组5.3字符数组和字符串字符数组和字符串5.2 二维数组二维数组n1.先定义后使用先定义后使用 若有若有int a35 ;int a35 ; 则则a02a02表示引用二维数组中第表示引用二维数组中第0 0行第行第2 2列元素列元素n2.下标可以是整
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 数组
限制150内