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