




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第7 7章章 数数 组组 数组:数组:是构造类型,元素由基类型(整、实是构造类型,元素由基类型(整、实、字符)组成。、字符)组成。 它是有序的、同类型数据的集合。它是有序的、同类型数据的集合。 7.1 7.1 一维数组的定义和引用一维数组的定义和引用 7.1.1 7.1.1 一维数组的定义一维数组的定义 形式:类型说明符形式:类型说明符 数组名数组名 常量表达式常量表达式 如:如:int int a5; a5; float b10; float b10; 说明:说明: 1.1.命名规则命名规则:数组名是由合法的标识符组成。:数组名是由合法的标识符组成。2.2.数组名后是用数组名后是用 括起来
2、的是常量表达式括起来的是常量表达式 包括:整、字符、符号常量表达式。包括:整、字符、符号常量表达式。 如:如: int int a2+3, b5, ca , _d8, a2+3, b5, ca , _d8, xyz# (#=35) xyz# (#=35) #define N 5 #define N 5 main() int aN;printf main() int aN;printf(“%dn”,a1=100); (“%dn”,a1=100); 而:而:intint a(10) , bx, %5, 83, x-y50, 5x100 a(10) , bx, %5, 83, x-y50, 5x10
3、0 是否正确?是否正确? 又如:又如: int i=5; int int i=5; int a5+i a5+i 是否正确性?是否正确性? 3.3.数组的长度数组的长度 int int a5 a0, a1, a2, a3, a4 a5 a0, a1, a2, a3, a4 5 5个元素个元素 ,下标从,下标从0 4 0 4 注意:注意: 在在Turbo C Turbo C 中超过定义的数组下标元素是可以引用的,系中超过定义的数组下标元素是可以引用的,系统不作检查。统不作检查。例例T7-0-1.c T7-0-1.c main( ) main( ) int int i, a5; i, a5; for
4、(i=0;i=4;i+) for(i=0;i=4;i+) printf (“a%d=%d n”,i,ai=i+1); printf (“a%d=%d n”,i,ai=i+1); printf (“a5=%dt”,a5); printf (“a5=%dt”,a5); printfprintf (“a6=%d n”,a6); (“a6=%d n”,a6); 运行结果:运行结果: a0=1 a1=2 a2=3 a3=4 a4=5 a5=-30 a6=2854.4.数组大小的定义只能是常量,而不能是变数组大小的定义只能是常量,而不能是变量或动态地定义。量或动态地定义。 例例7-0-2. 7-0-2.
5、C C main( ) main( ) int int n=5,an; n=5,an; a1=100; a1=100; printf printf (“a1=%dn”,a1); (“a1=%dn”,a1); 编译指出:编译指出:constant expression constant expression required in function main required in function main (主函数(主函数中要求常量表达式)中要求常量表达式)7.1.2 一维数组元素的引用一维数组元素的引用引用规则:引用规则:1.先定义,后使用。先定义,后使用。 2.引用形式:数组名引用形式:
6、数组名下标下标 下标可以是整、字符下标可以是整、字符 型的常量、变量或表达式。型的常量、变量或表达式。 3.引用方法:针对元素而不是整个数组。引用方法:针对元素而不是整个数组。 如:如:a0=ab - a + a b -96 +a3 - a2*2 例例T7-1. C 对数组对数组a 顺序赋值,逆序输出顺序赋值,逆序输出 main( ) int a5,i; for(i=0; i=0;i- -) printf( “a%d=%dn”, i, ai ); 运行结果:运行结果: a4=4 a3=3 a2=2 a1=1 a0=001234a0a1a2a3a47.1.3 7.1.3 一维数组的初始化一维数组
7、的初始化 实现的方法有:实现的方法有: 1.1.定义时对数组元素初始化定义时对数组元素初始化 如如: : int int a5=1, 2, 3, 4, 5; a5=1, 2, 3, 4, 5; 2. 2. 只给部分元素赋值只给部分元素赋值 如:如: int int a5=1, 3, 5; a5=1, 3, 5; 3. 3. 初始化时给全部元素赋初始化时给全部元素赋0 0值值 如:如:int int a5=0,0,0,0,0; a5=0,0,0,0,0; 或或 int int a5=0; a5=0; 4. 4. 对全部元素赋初值时可以不指出长度对全部元素赋初值时可以不指出长度 如:如:int i
8、nt a5=2,4,6,8,10; a5=2,4,6,8,10; 或或 int int a =2,4,6,8,10; a =2,4,6,8,10; 效果一样效果一样。例例T7-1-1.c T7-1-1.c 定义时对数组元素初始化定义时对数组元素初始化 main( ) main( ) int i; int i; int int a5=2,4,6,8,10; a5=2,4,6,8,10; for(i=0;i=4;i+) for(i=0;i=4;i+) printf printf(“%dn”,ai); (“%dn”,ai); 注意:注意:static static 存储类别,这和新存储类别,这和新A
9、NSIANSI新标准新标准一致,一致, 若采用若采用staticstatic,数组元素的值被存储在静态,数组元素的值被存储在静态区。区。 运行结果:运行结果: 2 4 6 8 107.1.4 7.1.4 一维数组程序举例一维数组程序举例 例例T7-2.c T7-2.c 求求Fibonacci Fibonacci 数列问题数列问题 关于菲波那契算法:头两个数各为关于菲波那契算法:头两个数各为1 1, 以后的每个数皆为前两个数之和。以后的每个数皆为前两个数之和。 main( ) main( ) int int i;i; int int f20=1,1; f20=1,1; for(i=2;i20;i
10、+) fi=fi-2+fi-1; for(i=2;i20;i+) fi=fi-2+fi-1; for(i=0;i20;i+) for(i=0;i20;i+) if(i%5=0) printf (“ n” ); if(i%5=0) printf (“ n” ); printf printf (“%12d”,fi; (“%12d”,fi; i fi=fi-2+fi-1 2 f2=f1+f0=2 3 f3=f2+f1=3 4 f4=f3+f2=5 5 f5=f4+f3=8 6 f6=f5+f4=13 7f7=f6+f5=21 运行结果:运行结果: 1 1 2 3 5 8 13 21 34 55 89
11、 144 233 377 610 987 1597 2584 4181 6765例例T7-3.c 用起泡法对用起泡法对6个数排序个数排序(由小到大由小到大) 思路思路:将相邻两数两两比较将相邻两数两两比较,若小则调到前头若小则调到前头,不小也要比较不小也要比较 第一轮大数沉底第一轮大数沉底 第二轮第二轮 第三轮第三轮 第四轮第四轮 第五轮第五轮 此处:此处:n=6 外层循环外层循环j(1n-1)次次 内层循环内层循环i (1n-j)次次9 8 8 8 8 8 8 9 5 5 5 5 5 5 9 4 4 4 4 4 4 9 2 2 2 2 2 2 9 0 0 0 0 0 0 98 5 5 5 5
12、 5 8 4 4 4 4 4 8 2 2 2 2 2 8 0 0 0 0 0 85 4 4 4 4 5 2 2 2 2 5 0 0 0 0 54 2 2 2 4 0 0 0 42 0 0 2main( ) int a7; int i, j , t; printf (“input 6 numbers: n”); for(i=1;i7;i+) scanf(“%d”, &ai ; printf (“ n”); for(j=1; j=5; j+) for(i=1; iai+1) t=ai;ai=ai+1;ai+1=t; printf (“the sorted numbers: n”); for(i=1
13、;i7;i+) printf(“%d _ _”,ai); 运行:运行:input 6 numbers: 输入:输入:9 8 5 4 2 0 输出:输出:0 2 4 5 8 9985420 xa0a1a2a3a4a5a67.2 7.2 二维数组的定义和引用二维数组的定义和引用 7.2.1 7.2.1 二维数组的定义二维数组的定义 1.1.一般形式:一般形式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式常量常量表达式表达式 如:如:float a34 float a34 定义数组定义数组a a具有三行四列具有三行四列 在在C C中,可将二维数组看着是特殊形式的一维数组。中,可将二维数组
14、看着是特殊形式的一维数组。 如上述定义可看着是具有三个元素的一维数组,如上述定义可看着是具有三个元素的一维数组,而每个元素又可看作是包含四个元素的一维数组。而每个元素又可看作是包含四个元素的一维数组。 因此,上述定义相当于:因此,上述定义相当于: float a04, a14, a24 float a04, a14, a24 注注 :实际应用时若如此定义则被认为是重定义。:实际应用时若如此定义则被认为是重定义。 2.2.二维数组各个元素在内存中的存放顺序是:二维数组各个元素在内存中的存放顺序是: 按先行后列的顺序依次存放按先行后列的顺序依次存放例例T7-3-1.c main( ) int i,
15、 j, a23; for(i=0; i2; i+) for(j=0; j3; j+) scanf(“%d”, &aij); for(i=0; i2;i+) for(j=0;j3;j+) printf(“&a%d%d=%x ”, i, j, &aij); printf (“a%d%d=%d n”,i,j,aij); 地址地址值值ffceffd0ffd2ffd4ffd6ffd81357911数组元素数组元素a00a01a02a10a11a12输入:输入:1 3 5 7 9 11 输出:输出:&a00=ffce a00=1 &a01=ffd0 a01=3 &a02=ffd2 a02=5 &a10=f
16、fd4 a10=7 &a11=ffc6 a11=9 &a12=ffd8 a12=11注:从键盘给实型数组元素赋值时,应通过一中间变量进行,注:从键盘给实型数组元素赋值时,应通过一中间变量进行, 或采用其它办法实施。或采用其它办法实施。 T7-3-2.c 实型数组从键盘赋值情况实型数组从键盘赋值情况 main() int i,j; float a23,k; for(i=0;i2;i+) for(j=0;j3;j+) scanf(%f,&k); aij=k; for(i=0;i2;i+) for(j=0;j3;j+) printf(&a%d%d=%x ,i,j,&aij); printf(a%d%
17、d=%fn,i,j,aij); for(j=0;j3;j+) scanf(“%f%f”,&a0j,&a1j)3.3.多维数组的定义和在内存中的存放顺多维数组的定义和在内存中的存放顺序序: 如如 int int a234; a234; 共共2424个元素,在内存中排列的顺序是个元素,在内存中排列的顺序是:第三维变化最快,然后是第二维,第:第三维变化最快,然后是第二维,第一维最慢。一维最慢。 7.2.2 7.2.2 二维数组的引用二维数组的引用 形式:数组名形式:数组名 下标下标下标下标 其中:下标是整型或字符型的常量,变量或表其中:下标是整型或字符型的常量,变量或表达式。达式。(定义时不能使用变
18、量)(定义时不能使用变量) 如:如: a12 a12 aij aij 1.1.数组元素可出现在表达式中,如:数组元素可出现在表达式中,如: a12=a22/2 a12=a22/2 2.2.使用数组元素时,应注意不要超出其定义的使用数组元素时,应注意不要超出其定义的范围;范围; 如:如: int int a23; a23; a23=5; a23=5; 7.2.3 7.2.3 二维数组的初始化二维数组的初始化 1.1.按行给二维数组赋初值按行给二维数组赋初值 如:如: int int a23=1,2,3,4,5,6; a23=1,2,3,4,5,6; 2.2.按数组元素排列的顺序赋初值按数组元素排
19、列的顺序赋初值 如:如:int int a23=1,2,3,4,5,6; a23=1,2,3,4,5,6; 3.3.对部分元素赋初值,按行赋值对部分元素赋初值,按行赋值较直观较直观 如:如:int int a23=2,5,3;a23=2,5,3; 1 2 3 a= 4 5 6 1 2 3 a= 4 5 6 2 5 0 a= 3 0 04.4.全部元素赋值时,第一维下标可省略全部元素赋值时,第一维下标可省略 如:如: intint a 3=1,2,3,4,5,6; a 3=1,2,3,4,5,6; 又如:又如:int int a 4=0,0,3,0,0,10;a 4=0,0,3,0,0,10;
20、1 2 3 a= 4 5 6 0 0 3 0 a= 0 0 0 0 0 10 0 07.2.4 7.2.4 二维数组程序举例二维数组程序举例 例例T7-4 T7-4 将一个二维数组的行和列元素互换,将一个二维数组的行和列元素互换,存到另一个二维数组中存到另一个二维数组中 。 1 2 3 a= 4 5 6 1 4 b= 2 5 3 6T7-4.c两数组行列互换两数组行列互换 main( ) int a23=1,2,3,4,5,6; int b32,i,j; printf(“array a:n”); for(i=0;i=1;i+) for(j=0;j=2;j+) printf(“%4d”, aij
21、); bji=aij; printf( n”); printf(“array b: n”); for(i=0;i=2; i+) for(j=0;j=1;j+) printf(“%4d”,bij); printf(“ n”); i j bji aij 0 0 b00 a00=1 1 b10 a01=2 2 b20 a02=3 1 0 b01 a10=4 1 b11 a11=5 2 b21 a12=6运行结果:运行结果: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6例例T7-5.c 有有3 4矩阵,求出其中最大元素所在的行号和列号矩阵,求出其中最大元素所在的行
22、号和列号 main( ) int i, j, r=0,c=0, max; int a34=1,2,3,4,9,8,7,6,-10,10,-5,2; max=a00; for(i=0;i=2;i+) for(j=0;jmax) max=aij; r=i;c=j printf(“max=%d,row=%d, colum=%dn”,max,r,c); 1 2 3 4 a= 9 8 7 5 -10 10 -5 2 运行结果运行结果: max=10,row=2,colum=1问题:在比较前问题:在比较前 为什么要把为什么要把a00赋给赋给max? i=02 j=03 比较比较aijmax 吗吗 0 0
23、a00max 1 a01max max 2, r=0, c=1 2 a02max max 3, r=0, c=2 3 a03max max 4, r=0, c=3 1 0 a10max max 9, r=1, c=0 1 a11max 2 a12max 3 a13max 2 0 a20max 1 a21max max 10, r=2, c=1 2 a22max 3 a23max 7.3 7.3 字符数组字符数组 字符型数组:用于存放字符型数据。字符型数组:用于存放字符型数据。 一维字符数组:存放一个字符串(每个数组元素存放一个字一维字符数组:存放一个字符串(每个数组元素存放一个字符)符) 二维
24、字符数组:存放多个字符串(行数是字符串的个数)二维字符数组:存放多个字符串(行数是字符串的个数) 7.3.1 7.3.1 字符数组的定义字符数组的定义 形式:形式:char char 数组名数组名 常量表达式常量表达式 char char 数组名数组名 常量表达式常量表达式常量表达式常量表达式 常量表达式:整、字符、符号常量。常量表达式:整、字符、符号常量。 例:例: char a5; char a5; a0=C; a1=H;a2=I; a0=C; a1=H;a2=I; a3=N; a4=A; a3=N; a4=A; C CH HI IN NA Aa0a0a1a1a2a2a3a3a4a4 7.
25、3.2 7.3.2 字符数组的初始化字符数组的初始化 如:如:char a5=C, H, I, char a5=C, H, I, N, A; N, A; char b5=C, H, I, char b5=C, H, I, N, W, U; N, W, U; 编译时将指出:初始化值太多编译时将指出:初始化值太多 char c5=C, H, I; char c5=C, H, I; char d =C, H, I, char d =C, H, I, N, A N, A 系统自动确认其长度为系统自动确认其长度为5 5C H I 0 07.3.3 7.3.3 字符数组的引用字符数组的引用 例例T7-6.
26、c T7-6.c 输出一个字符串输出一个字符串main( ) main( ) char c10=I, _, a, char c10=I, _, a, m, _, h, a, p, m, _, h, a, p, p, y; p, y; int int i; i; for(i=0;i10;i+)printf for(i=0;i10;i+)printf(“%c”, (“%c”, ci); ci); print(“ n”); print(“ n”); 运行结果:运行结果: I_am_happyI_am_happyT7-7.CT7-7.C输出一个钻石图输出一个钻石图 main() main() char
27、 diamond5= , ,char diamond5= , ,* *, , ,* *, , ,* *, , * *, , , , , , ,* *, , ,* *, , ,* *, , , , ,* *; ; int i; intint i; int j; j; for (i=0;i5;i+) for (i=0;i5;i+) for(j=0;j5;j+) for(j=0;j5;j+) printf(%c,diamondij); printf(%c,diamondij); printf printf(n); (n); 7.3.4 7.3.4 字符串和字符串结束标志字符串和字符串结束标志 几点说
28、明:几点说明: (1 1)字符串:用双引号括起的若干字符,可)字符串:用双引号括起的若干字符,可将其存放在一维或两维字符型数组中。将其存放在一维或两维字符型数组中。 (2 2)字符串结束标志为:)字符串结束标志为: 0 ( 0 (既无动既无动作作, ,又不显示又不显示) ) (3 3)字符串的长度:第一个)字符串的长度:第一个 0 0以前字符以前字符的个数的个数 (4 4)在字符型数组或字符串中遇)在字符型数组或字符串中遇 00,即认为该字符结束;,即认为该字符结束; (5 5)字符串可对字符型数组初始化)字符串可对字符型数组初始化 如:如:char c =“ I_am_happy” char
29、 c =“ I_am_happy” ; ; 系统自动在数组的最后加了系统自动在数组的最后加了 0 0 ,长度为,长度为1111 或或char c =“ I_am_happy”; char c =“ I_am_happy”; 系统自动在数组的最后加了系统自动在数组的最后加了 0 0 ,长度为长度为1111 相当于相当于 c = Ic = I,_,aa,mm,_,hh,aa,pp,pp,yy, 0; 0; 而而 char c10=“CHINA ” char c10=“CHINA ” 注意:字符注意:字符 0 0 并不一定都在字符数组的后并不一定都在字符数组的后面,输出时遇到第一个面,输出时遇到第一
30、个 0 0 结束;结束; 例例T7-7-1.c T7-7-1.c main( ) main( ) char a = a, b, 0, char a = a, b, 0, 1, 2; 1, 2; char b =“ab 0cd” ; char b =“ab 0cd” ; printfprintf (“%s n%s n”, a,b); (“%s n%s n”, a,b); C H I N A 0 0 0 0 0运行结果:运行结果: a b a b 7.3.5 7.3.5 字符数组的输入输出字符数组的输入输出 1.1.字符数组的输出:字符数组的输出: %c:%c:输出一个字符输出一个字符 以数组元素
31、以数组元素格式:格式: %s:%s:输出一个字符串输出一个字符串 以数组名以数组名例例T7-7-2.c main( ) int i; char a10= “CHINA” ; char b18=“CHINA 0CHINA 0CHINA” ; for(i=0;i10;i+) printf(“%c”,ai); printf (“ n”); printf (“%s n”,a); for(i=0;i 1 串串2 2 返回值为正数返回值为正数 其值是其值是AsciiAscii码的差值码的差值 (3)(3)串串1 1 串串2 2 返回值为负数返回值为负数 其值也是其值也是AsciiAscii码的差值码的差值例例T7-7-8.c main( ) int i,j,k; char a1 =“wuhan”, a2 =“beijing” ; i=strcmp(a1,a2); j=strcmp(“china”, “korea”); k=strcmp(a2, “beijing” ); printf
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盾构隧道施工成本控制考核试卷
- 稀土金属在照明领域的应用考核试卷
- 游戏创意构思与项目策划考核试卷
- 船舶自动消防系统设计与效能评估考核试卷
- 粮食仓储海外仓建设考核试卷
- 火力发电厂运行安全与风险控制技术应用实践考核卷考核试卷
- 多媒体教学模型设计与实现考核试卷
- 肉类副产品在宠物食品领域的应用考核试卷
- 火车站客运服务标准化考核试卷
- 影视特效制作与特效技术交流合作合同
- 2025风电机组无人机巡检技术方案
- 《四川省信息化项目费用测算标准》
- 2025年江苏省扬州宝应县“乡村振兴青年人才”招聘81人(C类岗面向退役军人)高频重点提升(共500题)附带答案详解
- 一科一品一特色护理妇产科
- 2025届小升初语文总复习:《习作》(附答案解析)
- 百白破疫苗接种课件
- 丁赵软组织治疗课件
- 《石灰术语》规范
- 陕西省西安市西北工业大学2025届高三第五次模拟考试英语试卷含解析
- 全国AEFI监测方案
- 轻型载货汽车制动器设计
评论
0/150
提交评论