kj-第6章数组课件.ppt
《kj-第6章数组课件.ppt》由会员分享,可在线阅读,更多相关《kj-第6章数组课件.ppt(65页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第1页第第6章章 数组数组 本章概述 本章的学习目标主要内容第2页本章概述本章概述l本章主要介绍了一维数组、二维数组、字本章主要介绍了一维数组、二维数组、字符数组的定义和使用方法符数组的定义和使用方法l结合大量程序实例介绍了常用的应用数组结合大量程序实例介绍了常用的应用数组的算法的算法第3页本章的学习目标本章的学习目标l本章教学目的本章教学目的:l 掌握一维数组的定义和使用方法掌握一维数组的定义和使用方法l 掌握二维数组的定义和使用方法掌握二维数组的定义和使用方法l 掌握字符数组的定义和使用方法掌握字符数组的定义和使用方法l 能使用数组编写程序并掌握常用的算法能使用数组编写程序并掌握常用的算法
2、l本章教学重点本章教学重点:数组的定义和使用方法数组的定义和使用方法l本章教学难点本章教学难点:使用数组的常用算法使用数组的常用算法第4页主要内容主要内容6.1 一维数组一维数组6.2 二维数组二维数组6.3 字符数组与字符串字符数组与字符串 6.4 本章小结本章小结 第5页6.1 一维数组一维数组定义一维数组的形式如下:定义一维数组的形式如下: 类型说明符类型说明符 数组名数组名常量表达式常量表达式; 例如:例如: int a10;定义了有定义了有10个元素的整型数组个元素的整型数组a; 例如:例如: float score80,sum30;定义了有定义了有80个元素的实型数组个元素的实型数
3、组score ,有,有30个元素的实型数组个元素的实型数组sum; 例如:例如: char str60,name8,num10;定义了有定义了有60个元素的字符型数组个元素的字符型数组str,有,有8个元素的字符型数组个元素的字符型数组name,有有10个元素的字符型数组个元素的字符型数组num。6.1.1 一维数组的定义一维数组的定义第6页一维数组的几点说明一维数组的几点说明(1 1)数组名的命名规则与变量名的命名规则相同。)数组名的命名规则与变量名的命名规则相同。(2 2)常量表达式的值表示数组元素的个数,即数组长度。)常量表达式的值表示数组元素的个数,即数组长度。例如定义例如定义“int
4、 a10int a10;”后,表示数组后,表示数组a a长度为长度为1010,数组,数组a a有有1010个元素,个元素,1010个数组元素的下标取个数组元素的下标取0 0、1 1、2 2、3 3、4 4、5 5、6 6、7 7、8 8、9 9这这1010个整数,个整数,即数组即数组a a的的1010个元素分别表示为:个元素分别表示为: a0a0、a1a1、a2a2、a3a3、a4a4、a5a5、a6a6、a7a7、a8a8、a9a9。(3)一个数组的所有元素是同种类型的一组变量。例如定义)一个数组的所有元素是同种类型的一组变量。例如定义“float s5;” 后,相当于定义了一组后,相当于定
5、义了一组float型变量,即型变量,即s0、s1、s2、s3、s4中中 的每一个都是的每一个都是float型变量。型变量。(4)在同一个函数中,数组名不能与其它变量名相同。下面是错误的:)在同一个函数中,数组名不能与其它变量名相同。下面是错误的: main()() int a; float a5; 第7页(6 6)方括号中的常量表达式,可以包括常量和符号常量,但不能是变量名,即)方括号中的常量表达式,可以包括常量和符号常量,但不能是变量名,即C C语言不允许对数组的大小作动态定义。例如下面定义是错误的:语言不允许对数组的大小作动态定义。例如下面定义是错误的: int mainint main(
6、)() int nint n; scanfscanf(“%d”%d”,&n&n);); float anfloat an; 下面定义是可以的:下面定义是可以的: # define N 5# define N 5 int main int main()() float aN float aN,b3+Nb3+N; (5)允许在同一个类型说明中定义多个数组和变量,例如:)允许在同一个类型说明中定义多个数组和变量,例如: int i,j,k,a6,b8,c9;(7)系统为数组元素所分配的内存空间是连续的。)系统为数组元素所分配的内存空间是连续的。第8页一维数组元素的引用和初始化一维数组元素的引用和初始
7、化 1.一维数组元素的引用必须先定义数组,然后才可以引用数组元素。必须先定义数组,然后才可以引用数组元素。数组元素的表示形式为:数组元素的表示形式为: 数组名数组名 下标下标 下标可以是整型常量或整型表达式,下标取值下标可以是整型常量或整型表达式,下标取值范围是范围是0 0到到“数组长度数组长度-1”-1”范围内的整数范围内的整数 第9页例6.1 求一维整型数组元素值的总和以及平均值 输入:10 30 50 70 90 110 #include int main()() int n,sum=0,a6; float aver; for ( n=0;n=5;n+) scanf(“%d”,&an);
8、); sum=sum+ an; aver =sum/6.0; for ( n=0;n6;n+) printf(“%d,”,an);printf(“%d,%fn”, sum,aver) ; return 0; 输出:输出:1010,3030,5050,7070,9090,110110,360360,60.00000060.000000 第10页2.2.一维数组元素的初始化一维数组元素的初始化 lint a6;数组元素是没有初始值,数组元素值是不确定的。lint x6=1,3,5,7,9,11;上面定义将数组初始化为:x0=1、x1=3、x2=5、x3=7、x4=9、x5=11 lint x6=1
9、,3;可以只给数组的一部分元素赋初值,其它值为0。 lint x =1,3,5,7,9,11;对全部数组元素赋初值时,允许省略数组长度 。l若数组元素的初值全为零,可以写成 :lint x6=0 ; 第11页例例6.2 从键盘输入一个数,在数组中按顺序查找与该数相等的从键盘输入一个数,在数组中按顺序查找与该数相等的数,输出其所在位置。数,输出其所在位置。# include # define N 10int main()() int n,m,sign=0;int numN=16,35,48,29,56,43,93,64,90,48;printf(“Please input the number:
10、”) ;scanf(“%d”,&n););for ( m=0;mN;m+) if (n=numm) printf(“%d,%d n”,m,numm);sign=1; if(sign=0)printf(“Have no this number。”) ;return 0;第12页例例6.2 从键盘输入一个数,在数组中按顺序查找与该数相等从键盘输入一个数,在数组中按顺序查找与该数相等的数,输出其所在位置。的数,输出其所在位置。若输入:若输入:48输出为:输出为:2,48 9,48若输入:若输入:93输出为:输出为:6,93若输入:若输入:123输出为:输出为:Have no this number。
11、第13页例例6.3 将随机产生的将随机产生的100个整数存储在数组中,找出其中最大的数及其个整数存储在数组中,找出其中最大的数及其在数组中的下标(若有多个相同的最大数,则取第一个的下标)。在数组中的下标(若有多个相同的最大数,则取第一个的下标)。# define N 10# include # include int main()int k, max, loca=0, aN; srand(time(NULL); /*设置随机数种子为当前时间*/ for (k=0;kN;k+) ak=rand(); /*产生随机数*/ for (k=0;kN;k+) printf(%d,ak); printf(
12、n); max=a0; for(k=1;kmax) max=ak; loca=k; printf(%d,%dn,max,loca); return 0; 函数srand()是设置随机数种子,每次执行程序时该函数产生不同的整数序列,也就是传递给srand()一个整数,以便决定rand()函数从何处开始生成随机数。函数srand()调用time(NULL)返回一个自1970年1月1日以来经历的秒数。 函数rand()的值是取值为0到32767之间的随机整数。第14页例例6.4 对从键盘输入的对从键盘输入的10个整数,用选择排序法将个整数,用选择排序法将它们由大到小排序。它们由大到小排序。 第第1次
13、找到次找到10个数中的最大数,查找的范围是下个数中的最大数,查找的范围是下标为标为0到到9范围内的所有数组元素,记住存储这个最大范围内的所有数组元素,记住存储这个最大数的数组元素的下标,将该下标对应的数组元素与下数的数组元素的下标,将该下标对应的数组元素与下标为标为0的数组元素的值对换,使下标为的数组元素的值对换,使下标为0的数组元素中的数组元素中存储最大数,即下标为存储最大数,即下标为0的数组元素中存储的是:下的数组元素中存储的是:下标为标为0到到9范围内的所有数组元素中的最大数。范围内的所有数组元素中的最大数。 第第2次找到剩余的次找到剩余的9个数(除去第个数(除去第1次找到最大数)次找到
14、最大数)中的最大数,查找的范围是下标为中的最大数,查找的范围是下标为1到到9范围内的所有范围内的所有数组元素(除去下标为数组元素(除去下标为0的数组元素),记住存储这的数组元素),记住存储这个最大数的数组元素的下标,将该下标对应的数组元个最大数的数组元素的下标,将该下标对应的数组元素与下标为素与下标为1的数组元素的值对换,使下标为的数组元素的值对换,使下标为1的数组的数组元素中存储这个范围内的最大数,即下标为元素中存储这个范围内的最大数,即下标为1的数组的数组元素中存储的是:下标为元素中存储的是:下标为1到到9范围内的所有数组元素范围内的所有数组元素中的最大数。中的最大数。第15页 第第3 3
15、次找到剩余的次找到剩余的8 8个数(除去第个数(除去第1 1次找到最大数、除去第次找到最大数、除去第2 2次找次找到最大数)中的最大数,查找的范围是下标为到最大数)中的最大数,查找的范围是下标为2 2到到9 9范围内的所有范围内的所有数组元素(除去下标为数组元素(除去下标为0 0和和1 1的数组元素),记住存储这个最大数的数组元素),记住存储这个最大数的数组元素的下标,将该下标对应的数组元素与下标为的数组元素的下标,将该下标对应的数组元素与下标为2 2的数组的数组元素的值对换,使下标为元素的值对换,使下标为2 2的数组元素中存储这个范围内的最大的数组元素中存储这个范围内的最大数,即下标为数,即
16、下标为2 2的数组元素中存储的是:下标为的数组元素中存储的是:下标为2 2到到9 9范围内的所范围内的所有数组元素中的最大数。有数组元素中的最大数。 依次类推。依次类推。 直到第直到第9次找到剩余的次找到剩余的2个数中的最大数,查找的范围是下标为个数中的最大数,查找的范围是下标为8和和9对应的两个数组元素,记住存储这个最大数的数组元素的下对应的两个数组元素,记住存储这个最大数的数组元素的下标,将该下标对应的数组元素与下标为标,将该下标对应的数组元素与下标为8的数组元素的值对换,使的数组元素的值对换,使下标为下标为8的数组元素中存储这个范围内的最大数,即下标为的数组元素中存储这个范围内的最大数,
17、即下标为8的数的数组元素中存储的是:下标为组元素中存储的是:下标为8和和9两个数组元素中的最大数。剩下两个数组元素中的最大数。剩下的一个数放在下标为的一个数放在下标为9的数组元素中,显然是最小的数。的数组元素中,显然是最小的数。 这种排序方法称为选择排序法。这种排序方法称为选择排序法。第16页例例6.4 对从键盘输入的对从键盘输入的10个整数,用选择排序法将个整数,用选择排序法将它们由大到小排序。它们由大到小排序。# define N 10# include int main ( ) int i, j, m, temp, aN; for (i=0; iN; i+) scanf (%d, &ai
18、); for(i=0;i=N-1;i+) printf(%5d, ai); printf(n); for (i=0; i=N-2; i+) m=i; for (j=i+1; jam) m=j; temp=ai; ai=am; am=temp; for (i=0; i=N-1; i+) printf (%5d, ai); printf(n); return 0;第17页例6.4 对从键盘输入的10个整数,用选择排序法将它们由大到小排序。若输入:若输入:4 9 1 3 0 5 7 2 8 6输出为:输出为:4 9 1 3 0 5 7 2 8 6 9 8 7 6 5 4 3 2 1 0第18页例例6
19、.5 数组数组x的的10个数已经按从大到小的顺序存放好了,从键盘输入数个数已经按从大到小的顺序存放好了,从键盘输入数y,将,将y插入数组插入数组x中,使插入后的数组中,使插入后的数组x中的中的11个数仍按从大到小的顺序存放。个数仍按从大到小的顺序存放。# define N 11# include int main() int i,k,y; int xN= 98,96,87,78,72,64,56,51,43,36; for (k=0;k=N-2;k+) printf(“%d ,”,xk); printf(“n input the number insertedn”); scanf(“%d”,&
20、y); if (y=xN-2) xN-1=y; /*若若y小于或等于小于或等于xN-2,*/ /* 则将则将y插在最后插在最后 */ else i=0; while (ixi) /*若若y大于大于xi,则将,则将y */ /* 插在下标为插在下标为i的位置的位置 */ for (k=N-2;k=i;k-) xk+1=xk; /*下标大于或等于下标大于或等于i的元素的元素*/ /* 依次向后移动一个位置依次向后移动一个位置*/ xi=y; break; i+; for (k=0;kbott为止。为止。 注意注意:使用折半查找法,要求数组一定是有序的。:使用折半查找法,要求数组一定是有序的。第21
21、页例6.6 数组数组b中的中的10个数按从个数按从小到大的顺序存放,现从键小到大的顺序存放,现从键盘输入一个数盘输入一个数a,请使用折半,请使用折半查找法,在数组查找法,在数组b中查找与数中查找与数a相同的数的位置。相同的数的位置。# define N 10# include int main() int top, bott, mid, loca, a, bN=1,2,3,4,5,6,7,8,9,10; scanf(%d,&a); top=0; bott=N-1; loca=-1; while (top=bott) mid=(top+bott)/2; if (a=bmid) printf(%d
22、,%dn, a, mid); loca=mid; break; else if (abmid) bott=mid-1; else top=mid+1; if (loca=-1) printf(Did not find out %dn,a); return 0; 第22页6.2.1 二维数组的定义二维数组的定义 二维数组定义的一般形式为:二维数组定义的一般形式为: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式1 1 常量表达式常量表达式22 例如下面定义了二维数组例如下面定义了二维数组scorescore和和areaarea,scorescore有有2424(4 4行行6 6列)列)
23、个数组元素,个数组元素,areaarea有有2121(3 3行行7 7列)个数组元素,每个数组元素列)个数组元素,每个数组元素是一个是一个floatfloat型变量:型变量: float score46float score46,area37area37; 例如下面定义了二维数组例如下面定义了二维数组a a、b b和和numnum,a a有有6 6(2 2行行3 3列)个数组元素,列)个数组元素,b b有有1212(3 3行行4 4列)个数组元素,列)个数组元素,numnum有有3030(3 3行行1010列)个数组元素,列)个数组元素,每个数组元素都是一个每个数组元素都是一个intint型变
24、量:型变量: int a23,b34int a23,b34,num310num310;第23页 二维数组中的元素在内存中是按行顺序存放的,系统为二维数组中的元素在内存中是按行顺序存放的,系统为它们分配连续的内存空间,即先放第一行的元素,再放第二它们分配连续的内存空间,即先放第一行的元素,再放第二行的元素,行的元素, 。 例如,上面定义的数组例如,上面定义的数组a的的6个元素在内存中按如下顺序个元素在内存中按如下顺序排列:排列: a00,a01,a02,a10,a11,a12 可以把二维数组看成是一种特殊的一维数组,这个一维数可以把二维数组看成是一种特殊的一维数组,这个一维数组中的每个元素又是一
25、个一维数组。例如,可以把上面定义组中的每个元素又是一个一维数组。例如,可以把上面定义的二维数组的二维数组num看成是一维数组,这个一维数组有看成是一维数组,这个一维数组有num0、num1、num2三个元素。每个元素(三个元素。每个元素(num0或或num1或或num2)都是包含)都是包含10个元素的一维数组,个元素的一维数组,num0、num1和和num2分别是三个一维数组的名称。分别是三个一维数组的名称。 如下所示:如下所示: 第24页 也可以定义二维以上的多维数组,也可以定义二维以上的多维数组, 例如例如“int x342;”, 定义了有定义了有24个数组元素的三维数组个数组元素的三维数
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- kj 数组 课件
限制150内