《计算机软件技术基础 第10章 数组.ppt》由会员分享,可在线阅读,更多相关《计算机软件技术基础 第10章 数组.ppt(42页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第十章第十章 数组数组10.1 一维数组的定义与引用一维数组的定义与引用一、一维数组的定义一、一维数组的定义n一维数组定义的一般形式为:一维数组定义的一般形式为:类型说明符类型说明符 数组名数组名常量表达式常量表达式;其中,类型说明符是任一种基本数据类型或其中,类型说明符是任一种基本数据类型或构造数据类型,用于说明数组中存放的数据的构造数据类型,用于说明数组中存放的数据的类型。类型。数组名是用户定义的数组标识符。方括号中数组名是用户定义的数组标识符。方括号中的常量表达式表示数据元素的个数,也称为数的常量表达式表示数据元素的个数,也称为数组的长度。组的长度。第十章第十章 数组数组如:如:int
2、a10;float b10,c20;char ch20;10.1 一维数组的定义与引用一维数组的定义与引用一、一维数组的定义一、一维数组的定义对于数组类型定义应注意以下几点:对于数组类型定义应注意以下几点:(1)数组的类型实际上是指数组元素的取值类)数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都型。对于同一个数组,其所有元素的数据类型都是相同的。是相同的。(2)数组名的书写规则应符合标识符的书写规)数组名的书写规则应符合标识符的书写规定。定。第十章第十章 数组数组(3)数组名不能与其它变量名相同。)数组名不能与其它变量名相同。(4)方括号中常量表达式表示数组元素
3、的个数,必须是整)方括号中常量表达式表示数组元素的个数,必须是整数,在编译时用以确定分配给数组存储空间的大小。数,在编译时用以确定分配给数组存储空间的大小。(5)定义数组时不能在方括号中用变量来表示元素的个数,)定义数组时不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。引用数组元素时,但是可以是符号常数或常量表达式。引用数组元素时,方括号中可以使用变量。方括号中可以使用变量。(6)允许在同一个类型定义中,定义多个数组和多个变量。)允许在同一个类型定义中,定义多个数组和多个变量。(7)数组一旦说明,编译系统就要为其分配存储单元。一)数组一旦说明,编译系统就要为其分配存储单元
4、。一维数组的存储结构按数组元素的先后顺序、数据类型分维数组的存储结构按数组元素的先后顺序、数据类型分配一片连续的存储空间。配一片连续的存储空间。10.1 一维数组的定义与引用一维数组的定义与引用一、一维数组的定义一、一维数组的定义第十章第十章 数组数组数组元素也是一种变量,其标识方法为数组数组元素也是一种变量,其标识方法为数组名后跟一个下标。名后跟一个下标。下标表示了元素在数组中的顺序号。数组元下标表示了元素在数组中的顺序号。数组元素的一般形式为:素的一般形式为:数组名数组名下标下标 其中的下标只能为整型常量或整型表达式。其中的下标只能为整型常量或整型表达式。如,如,a5,aij,ai都是合法
5、的数组元都是合法的数组元素。素。10.1 一维数组的定义与引用一维数组的定义与引用二、一维数组元素的引用二、一维数组元素的引用第十章第十章 数组数组数组元素通常也称为下标变量。必须先定义数组元素通常也称为下标变量。必须先定义数组,才能使用下标变量。数组,才能使用下标变量。在语言中只能逐个地使用下标变量,而不在语言中只能逐个地使用下标变量,而不能一次引用整个数组。能一次引用整个数组。如,输出有如,输出有10个元素的数组必须使用循环语句个元素的数组必须使用循环语句逐个输出各下标变量:逐个输出各下标变量:for(i0;i10;i)printf(%d,ai);而不能用一个语句输出整个数组,下面的写法而
6、不能用一个语句输出整个数组,下面的写法是错误的:是错误的:printf(%d,a);10.1 一维数组的定义与引用一维数组的定义与引用二、一维数组元素的引用二、一维数组元素的引用第十章第十章 数组数组n说明:说明:(1)数组名不是变量,数组元素是变量。)数组名不是变量,数组元素是变量。(2)C规定下标从规定下标从0开始算起。数组的第开始算起。数组的第n-1个元素,下标值是个元素,下标值是n-1。(3)定义数组时方括号中的数字与数组)定义数组时方括号中的数字与数组元素中方括号中的数字意义完全不同。前元素中方括号中的数字意义完全不同。前者的数字说明数组的长度,后者的数字说者的数字说明数组的长度,后
7、者的数字说明该数组元素在数组中的位置。明该数组元素在数组中的位置。10.1 一维数组的定义与引用一维数组的定义与引用二、一维数组元素的引用二、一维数组元素的引用第十章第十章 数组数组初始化赋值的一般形式为:初始化赋值的一般形式为:类型说明符类型说明符 数组名数组名常量表达式常量表达式=值,值,值,值,值值;在在 中的各数据值即为各元素的初值,各值之中的各数据值即为各元素的初值,各值之间用逗号间隔。间用逗号间隔。如:如:int a10=0,1,2,3,4,5,6,7,8,9;相当于相当于a0=0;a1=1.a9=9;10.1 一维数组的定义与引用一维数组的定义与引用三、一维数组的初始化三、一维数
8、组的初始化第十章第十章 数组数组n 几点规定:几点规定:(1)可以只给部分元素赋初值。当)可以只给部分元素赋初值。当 中值的个中值的个数少于元素个数时,只给前面部分元素赋值。数少于元素个数时,只给前面部分元素赋值。如:如:int a10=0,1,2,3,4;(2)只能给元素逐个赋值,不能给数组整体赋值。)只能给元素逐个赋值,不能给数组整体赋值。如给十个元素全部赋如给十个元素全部赋1值,只能写为:值,只能写为:int a10=1,1,1,1,1,1,1,1,1,1;而不能写为:而不能写为:int a10=1;10.1 一维数组的定义与引用一维数组的定义与引用三、一维数组的初始化三、一维数组的初始
9、化第十章第十章 数组数组 (3)对静态存储数组和外部存储数组,默认初)对静态存储数组和外部存储数组,默认初值为值为0。如:如:static int a10;(4)如给全部元素赋值,则在数组说明中,可)如给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。若仅给部分数组元以不给出数组元素的个数。若仅给部分数组元素赋值,则不能省略数组长度。素赋值,则不能省略数组长度。如:如:int a5=1,2,3,4,5;可写为:可写为:int a=1,2,3,4,5;(5)动态赋值。可以在程序执行过程中,对数)动态赋值。可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合组作动态赋值。这时可用循
10、环语句配合scanf函函数逐个对数组元素赋值。数逐个对数组元素赋值。10.1 一维数组的定义与引用一维数组的定义与引用三、一维数组的初始化三、一维数组的初始化第十章第十章 数组数组例例10.1从键盘上输入从键盘上输入10个数,输出最大元素的值。个数,输出最大元素的值。main()int i,max,a10;printf(input 10 numbers:n);for(i=0;i10;i)scanf(%d,&ai);max=a0;for(i=1;imax)max=ai;printf(maxmum=%dn,max);10.1 一维数组的定义与引用一维数组的定义与引用三、一维数组的初始化三、一维数组
11、的初始化第十章第十章 数组数组二维数组类型定义的一般形式是:二维数组类型定义的一般形式是:类型说明符类型说明符 数组名数组名常量表达式常量表达式1常量表达式常量表达式2;n其中常量表达式其中常量表达式1表示第一维下标的长度,常量表示第一维下标的长度,常量表达式表达式2 表示第二维下标的长度。表示第二维下标的长度。如:如:int a34;定义了一个三行四列的数组,定义了一个三行四列的数组,数组名为数组名为a,其下标变量的类型为整型。该数组,其下标变量的类型为整型。该数组的下标变量共有的下标变量共有34个,即:个,即:a00,a01,a02,a03a10,a11,a12,a13a20,a21,a2
12、2,a2310.2 二维数组的定义与引用二维数组的定义与引用一、二维数组的定义一、二维数组的定义第十章第十章 数组数组二维数组是按行排列的。按行顺次存放,先二维数组是按行排列的。按行顺次存放,先存放存放a0行,再存放行,再存放a1行,最后存放行,最后存放a2行。行。每行中有四个元素也是依次存放。由于数组每行中有四个元素也是依次存放。由于数组a定定义为义为int类型,该类型占两个字节的内存空间,类型,该类型占两个字节的内存空间,所以每个元素均占有两个字节所以每个元素均占有两个字节(图中每一格为两图中每一格为两字节字节)。a00a01a02a03a10a11a12a13a20a21a22a2310
13、.2 二维数组的定义与引用二维数组的定义与引用一、二维数组的定义一、二维数组的定义第十章第十章 数组数组(1)按行分段赋值可写为)按行分段赋值可写为int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;(2)按行连续赋值可写为)按行连续赋值可写为int a53=80,75,92,61,65,71,59,63,70,85,87,90,76,77,85;这两种赋初值的结果是完全相同的。这两种赋初值的结果是完全相同的。10.2 二维数组的定义与引用二维数组的定义与引用二、二维数组的初始化二、二维数组的初始化第十章第十章 数组数组说明:说明:(1)可
14、以只对部分元素赋初值,未赋初值的)可以只对部分元素赋初值,未赋初值的元素自动取元素自动取0值。值。如:如:int a33=1,2,3;是对每一行是对每一行的第一列元素赋值,未赋值的元素取的第一列元素赋值,未赋值的元素取0值。值。赋赋值后各元素的值为:值后各元素的值为:1 0 02 0 03 0 010.2 二维数组的定义与引用二维数组的定义与引用二、二维数组的初始化二、二维数组的初始化第十章第十章 数组数组 int a 33=0,1,0,0,2,3;赋值赋值后的元素值为后的元素值为 0 1 0 0 0 2 3 0 010.2 二维数组的定义与引用二维数组的定义与引用二、二维数组的初始化二、二维
15、数组的初始化(2)如对全部元素赋初值,则第一维的长度可)如对全部元素赋初值,则第一维的长度可以不给出。以不给出。如:如:int a33=1,2,3,4,5,6,7,8,9;可以写为:可以写为:int a 3=1,2,3,4,5,6,7,8,9;第十章第十章 数组数组二维数组的元素也称为双下标变量,其二维数组的元素也称为双下标变量,其表示的形式为:表示的形式为:数组名数组名下标下标下标下标 下标应为整型常量或整型表达式。下标应为整型常量或整型表达式。如:如:a34 表示表示a数组三行四列的元素。数组三行四列的元素。10.2 二维数组的定义与引用二维数组的定义与引用三、二维数组元素的引用三、二维数
16、组元素的引用第十章第十章 数组数组例例10.2一个学习小组有一个学习小组有5个人,每个人有三门课个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平的考试成绩。求全组分科的平均成绩和各科总平均成绩。均成绩。课程课程 成成绩绩姓名姓名MathCVFP张张807592王王616571李李596370赵赵858790周周76778510.2 二维数组的定义与引用二维数组的定义与引用三、二维数组元素的引用三、二维数组元素的引用第十章第十章 数组数组main()int i,j,s=0,l,v3,a53;printf(input scoren);for(i=0;i3;i)for(j=0;j5;j
17、)scanf(%d,&aji);s=saji;vi=s/5;s=0;l=(v0v1v2)/3;printf(“math:%dnc languag:%dndbase:%dn”,v0,v1,v2);printf(total:%dn,l);10.2 二维数组的定义与引用二维数组的定义与引用三、二维数组元素的引用三、二维数组元素的引用第十章第十章 数组数组n用来存放字符量的数组称为字符数组。用来存放字符量的数组称为字符数组。n符数组类型定义的形式与前面介绍的数值数组符数组类型定义的形式与前面介绍的数值数组相同。相同。如:如:char c10;由于字符型和整型通用,;由于字符型和整型通用,也可以定义为也
18、可以定义为int c10但这时每个数组元素占但这时每个数组元素占2个字节的内存单元。个字节的内存单元。n字符数组也可以是二维或多维数组。字符数组也可以是二维或多维数组。如:如:char c510;即为二维字符数组。;即为二维字符数组。10.3 字符数组字符数组第十章第十章 数组数组n字符数组也允许在类型定义时作初始化赋值。字符数组也允许在类型定义时作初始化赋值。如:如:char c10=c,p,r,o,g,r,a,m;赋值后各元素的值为:赋值后各元素的值为:c0=c,c1=,c2=p,c3=r,c4=o,c5=g,c6=r,c7=a,c8=m,其中其中c9未赋值,由系统自动赋予未赋值,由系统自
19、动赋予0值。值。n当对全体元素赋初值时也可以省去长度定义。当对全体元素赋初值时也可以省去长度定义。如:如:char c=c,p,r,o,g,r,a,m;数组的长度自动定为数组的长度自动定为9。10.3 字符数组字符数组第十章第十章 数组数组例例10.3字符数组输出字符数组输出main()int i,j;char a5=B,A,S,I,C,d,B,A,S,E;for(i=0;i=1;i)for(j=0;j 字符串字符串2,返回值,返回值0;字符串字符串1 字符串字符串2,返回值,返回值0)printf(st1st2n);if(k0)printf(st1st2n);10.4 字符串常用函数字符串常
20、用函数第十章第十章 数组数组6测字符串长度函数测字符串长度函数strlen格式:格式:strlen(字符数组名字符数组名)功能:测字符串的实际长度功能:测字符串的实际长度(不含字符串结束标志不含字符串结束标志0)并作为函数返回值。并作为函数返回值。例例10.10测字符串长度示例测字符串长度示例#include string.hmain()int k;char st=C language;k=strlen(st);printf(The lenth of the string is%dn,k);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组例例10.11 用数组来处理求用数组来处理求
21、Fibonacci数列前数列前20项。项。f0=1;f1=1;fi=fi2fi1;编程如下:编程如下:main()int i;int f20=1,1;for(i=2;i20;i)fi=fi2fi1;for(i=0;i20;i)if(i%5=0)printf(n);printf(%7d,fi);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组例例10.12 用选择法对用选择法对6个整数按由小到大排序。个整数按由小到大排序。选择法的基本思想:把最小的数调到前面。选择法的基本思想:把最小的数调到前面。首先将数组中最小的元素与首先将数组中最小的元素与a0a0对调,再从对调,再从a1aa1a
22、nn11中找出最小的元素与中找出最小的元素与a1a1对调对调依次循依次循环,从环,从aianaian11中选出最小元素与中选出最小元素与aiai 对对调。调。53790103795101395701795301359701357910.4 字符串常用函数字符串常用函数第十章第十章 数组数组#include stdio.h#define N 6main()int aN,i,j,k,temp;printf(please input%d number:,N);for(i=0;iN;i)scanf(%d,&ai);for(i=0;iN1;i)k=i;for(j=k1;jN;j)if(ajak)k=j;
23、temp=ai;ai=ak;ak=temp;for(i=0;iN;i)printf(%6d,ai);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组例例10.13从键盘上任意输入从键盘上任意输入10个整数,要求按从小个整数,要求按从小到大的顺序在屏幕上显示出来。到大的顺序在屏幕上显示出来。分析:冒泡法的基本思想:通过相邻两个数之间的分析:冒泡法的基本思想:通过相邻两个数之间的比较和交换,使较小的数逐渐从底部移向顶部,比较和交换,使较小的数逐渐从底部移向顶部,就像水底的气泡一样逐渐向上冒,故而得名。就像水底的气泡一样逐渐向上冒,故而得名。(1 1)首先将相邻的)首先将相邻的anan1
24、1与与anan22进行比较,进行比较,如果如果anan11的值小于的值小于anan22的值,则交换两者的值,则交换两者的位置,使较小的上浮,较大的下沉;接着比较的位置,使较小的上浮,较大的下沉;接着比较a ann22与与anan33,同样使小的上浮,大的下沉。,同样使小的上浮,大的下沉。依此类推,直到比较完依此类推,直到比较完a1a1和和a0a0后,后,a0a0为具为具有最小排序码(数值)的元素,称第一趟排序结有最小排序码(数值)的元素,称第一趟排序结束。束。10.4 字符串常用函数字符串常用函数第十章第十章 数组数组(2 2)然后在)然后在anan11a1a1区间内,进行第二趟区间内,进行第
25、二趟排序,使剩余元素中排序码最小的元素上浮到排序,使剩余元素中排序码最小的元素上浮到a1a1;重复进行;重复进行n n1 1趟后,整个排序过程结束。趟后,整个排序过程结束。总结:总结:(1 1)若有)若有n n 个数,需要重复进行个数,需要重复进行 n n1 1 趟排序。趟排序。在第在第 i i 趟中,需要进行趟中,需要进行 n ni i 次两两比较。次两两比较。(2 2)可以定义数组)可以定义数组a a 来存放这来存放这 n n 个数。个数。(3 3)可以定义符号常量)可以定义符号常量 N N 来控制数组长度。来控制数组长度。10.4 字符串常用函数字符串常用函数第十章第十章 数组数组#in
26、clude stdio.h#define N 10 main()int aN;int i,j,temp;clrscr();printf(Please input%d numbers:,N);for(i=0;iN;i)scanf(%d,&ai);/*冒泡法排序冒泡法排序*/for(i=0;ii;j)if(aj aj1)temp=aj;aj=aj1;aj1=temp;printf(nthe result of sort:n );for(i=0;iN;i)printf(“%d,ai);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组例例10.14 打印以下杨辉三角形打印以下杨辉三角形 1
27、1 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 分析分析:(1)第一列和对角线上的元素值为第一列和对角线上的元素值为1,即即ai0=1;aii=1;(2)其它元素的值为前一行前一列元素前一行)其它元素的值为前一行前一列元素前一行同一列元素同一列元素,即即 aij=ai1j1ai1j10.4 字符串常用函数字符串常用函数第十章第十章 数组数组#include stdio.h#define N 6main()int i,j,aNN;for(i=0;iN;i)ai0=1;aii=1;for(i=2;iN;i)for(j=1;ji;j)aij=ai1j1ai1j;for(i
28、=0;iN;i)for(j=0;j=i;j)printf(%4d,aij);printf(n);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组例例10.15在二维数组在二维数组a中选出各行最大的元素组中选出各行最大的元素组成一个一维数组成一个一维数组b。3 16 87 65 4 32 11 108 10 25 12 37a=10.4 字符串常用函数字符串常用函数b=87,108,37 分析:在数组分析:在数组A A的每一行中寻找最大的元素,找的每一行中寻找最大的元素,找到之后把该值赋予数组到之后把该值赋予数组b b相应的元素即可。相应的元素即可。第十章第十章 数组数组main()
29、int a4=3,16,87,65,4,32,11,108,10,25,12,37;int b3,i,j,l;for(i=0;i=2;i)l=ai0;for(j=1;jl)l=aij;bi=l;printf(narray a:n);for(i=0;i=2;i)for(j=0;j=3;j)printf(%5d,aij);printf(“n”);printf(narray b:n);for(i=0;i=2;i)printf(%5d,bi);printf(n);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组例例10.16从键盘输入一行字符,统计单词个数,从键盘输入一行字符,统计单词个数,单词之间用空格分隔。单词之间用空格分隔。#include stdio.hmain()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i)if(c=)word=0;else if(word=0)word=1;num;printf(“There are%d words in the line n”,num);10.4 字符串常用函数字符串常用函数第十章第十章 数组数组
限制150内