




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第2章章 数组数组1、数组元素的个数必须在定义时确定、数组元素的个数必须在定义时确定2、同一数组中的数组元素的类型是相同的、同一数组中的数组元素的类型是相同的3、数组元素的作用相当于简单变量、数组元素的作用相当于简单变量4、同一数组中的数组元素占连续的地址空间、同一数组中的数组元素占连续的地址空间2.12.1 一维数组一维数组2.1.1 一维数组的定义一维数组的定义形式: static ;例: int a 20; float x 100;其中 a 和 x 都是数组名。代表数组元素的个数1. 数组名的确定方法同变量名。2.数组名后方括号 括起来的常量表达式,常量表达式表示元素的个数。对于 in
2、t a5;表示有5个元素, 元素的下标从0开始.数组a的元素分别为:a0,a1, a2, a3, a 4数组数组 a 在内存中的存放顺序:在内存中的存放顺序:a0的值a1的值a2的值a3的值a4的值注意:注意:在没有给数组元素赋值以前,没有确定的值。3. 常量表达式为常量和符号常量。不允许有变量,其表达式的值代表了元素的个数。例: int a20; 表示有20个元素 且元素从0开始编排:a0,a1,a 192.1.2 一维数组的初始化一维数组的初始化1. 对全部元素赋初值。对全部元素赋初值。如:如:int a10=10, 11, 12, 13, 14, 15, 16, 17, 18, 19表示
3、数组元素的值为:a0=10;a1=11; a9=19; 2. 对部分元素赋初值对部分元素赋初值(前面的连续元素前面的连续元素)。如: 在此, 只有前5个元素初值确定。int b10=0,1,2,3,4;表示数组元素的值为:b0=0;b1=1;b2=2;b3=3;b4=4;注意:注意:不能只对不连续部分元素或后面的连续元素赋初值。语句语句: int a10=, , , , ,1,2,3,4,5; int a10=1, ,3, ,5 , ,7, ,9, ,; 是错误的。3. 如对数组元素赋同一初值如对数组元素赋同一初值,必须一一写出必须一一写出: static int a10=2,2,2,2,2,
4、2,2,2,2,2;不可写成任何其他形式。如:不可写成: static int a10*2;4. 若赋全部元素的初值若赋全部元素的初值,可省略常量表达式可省略常量表达式 int a =0,1,2,3; 表示a4,即只有4个元素。 2. 引用方式: 数组名下标 代表了一个元素,等价一个同类型的变量。 3. 一般地,一维数组各元素分配在连续的内存单元之中。1. 须象使用变量那样,先定义,后使用例: a 05+a1 6 为正确的算术表达式2.2 一维数组使用一维数组使用2.2.1 一维数组引用方式例 : ( Page 44,2-2.2-3)/*exam2_2.c 一维数组在程序中的使用*/#incl
5、ude void main()int i,a5=1,2,3,4,5; /*初始化数组*/printf(输出数组元素的正确值: n);for(i=0;i5;i+)printf(%dt,ai);printf(n输出超出下标的元素的值:n);for(i=5;i10;i+) /*使用超出下标的元素*/printf(%dt,ai);printf(n改变数组元素的值:n);a0=(a1+a2)*(a3+a4);printf(a0=%dn,a0);getchar();/*exam2_3.c Fibonaci数列的前20项*/#include #include main()int i,FBNC20;FBNC0
6、=0;FBNC1=1;for(i=2; i20;i+)FBNCi=FBNCi-2+FBNCi-1;printf(FBNC Number is:n);for(i=0;i20;i+)if (i=6 | i=11 | i=16)printf(n);printf(%7d,FBNCi);getch();2.3 2.3 多维数组多维数组形式:形式:例例: : int a4 10; float x8 20; 数组名数组名常量表达式常量表达式1 常量表达式常量表达式2; 行元素个数行元素个数 列元素个数列元素个数2. 可将二维数组的元素看成为若干个特殊可将二维数组的元素看成为若干个特殊的一维数组。的一维数组。
7、 可看成:可看成:有三个特殊的一维数组b0,b1, b2,每一个又有四个元素:1. 不可将定义写为不可将定义写为int a4,10。注意:注意:b00, b01, b02, b03,b10, b11, b12, b13,b20, b21, b22, b23,如如: int b3 4;3. 二维数组的存放方式为二维数组的存放方式为: 按行优先。由此可按行优先。由此可推广至三维、推广至三维、n维数组的定义和存放。维数组的定义和存放。4. 初始化初始化:即即: 最右边的下标变化最快。(1) 按行给二维数组赋初值按行给二维数组赋初值:static int a34=1,2,3,4, 5,6,7,8, 9
8、,10,11,12;或:或:static int a34=1,2,3,4,5,6,7,8,9,10,11,12; (2) 可以对部分元素赋初值可以对部分元素赋初值,但需表达清楚。但需表达清楚。则相当于若:若: static int a34=1,2,3,8则相当于000000008321000800030021如如: static int a34=1,2,3,8。(3) 可通过赋初值决定数组大小。如为二维可通过赋初值决定数组大小。如为二维,则只可省略第一维的大小。则只可省略第一维的大小。static int a 4=1,2,3,4,5,6,7,8,9,10,11,12;形式形式: :其中的下标为
9、整型表达式其中的下标为整型表达式, ,但不得越界。但不得越界。与一维数组元素一样与一维数组元素一样, ,二维数组元素相当二维数组元素相当于同类型的简单变量。于同类型的简单变量。数组名数组名下标下标1下标下标2形式:形式:例例: : int room3 23; float vic7 1269; 数组名数组名表达式表达式1 表达式表达式2. 表达式表达式n; 元素元素1的个数的个数 元素元素2 的个数的个数 a=1 2 34 5 6b=1 42 5 3 6例例1:1: 将一个二维数组行和列元素互换,存到另一个二维数组中。例如:#include main()static int a23=1,2,3,
10、4,5,6;static int b32, i, j;printf(array a: n); for (i=0; i=1; i+)for (j=0; j=2; j+)printf(%5d, aij); bji=aij; printf(n);printf(array b:n);for (i=0; i=2; i+)for (j=0; jmaxmax= aijrow=icolum=j输出:max和row,colum真假程序如下:程序如下: #include main ( ) int i,j, row=0, colum=0, max; static int a34=1,2,3,4,9,8,7,6, 1
11、0,10, 5, 2; max=a00; for (i=0;i=2; i+) for (j=0; jmax) max=aij; row=i; colum=j; printf( max=%d,row=%d, colum=%dn , max, row, colum);输出结果为: max=10, row=2, colum=12.4 2.4 字符数组字符数组类型名 数组名大小 char c 10;1. 初始化: (1) 直接给出字符串中的各字符 static char a4= G , o , o , d ;若字符多于元素个数,则语法错,反之,后面补0。存放字符数据。字符串用字符数组存放。(2)可以去
12、掉定义时的大小设置,而通过自动赋值决定长度(大小) static char x = I , , a , m , , a, , s , t , u , d , e , n , t ;(3) 前面说过,字符串常量用“ ” 表示,且由 0结尾. static char x =I am a student. ; 则长度为15+1=16, 其中x15存放 0,其中 亦可省略。 这种初始化未将结束标记0存入数组中。用于存放字符或字符串。用于存放字符或字符串。如:如:char w7=s, t, u, d, e, n, t;w是一个可以存放7个字符的数组而:char u8=student;(或写成:char
13、u =student;)u是一个可存放8个字符的数组对上面两种数组定义,有:对上面两种数组定义,有:w0=u0=sw1=u1=tw2=u2=uw3=u3=dw4=u4=ew5=u5=nw6=u6=tu7=0(1) 字符串用双引号字符串用双引号 括起来。括起来。(2) 字符串的结束标志为字符串的结束标志为0, 由系统提供。由系统提供。例:例:char bn =computer;则:数组则:数组bn的长度为的长度为9bn0=cbn3=pbn6=ebn1=obn4=ubn7=rbn2=mbn5=tbn8=0格式符格式符: : %c 逐个输入逐个输入/ /输出字符输出字符。 %s 整个串一次输入整个串
14、一次输入/ /输出输出。1. 输出输出 (用用%s) (2) 在在printf中须直接写数组名中须直接写数组名. static char c =I am a student; printf(%s, c);(1) 用用%s输出时输出时,不输出不输出 0.(3) 若数组长度大于字符串长度若数组长度大于字符串长度,则遇到则遇到0即停即停止输出止输出 static char c10= china; printf( %s, c);(4) 输出时遇到第一个输出时遇到第一个0即结束。即结束。也可用输出函数也可用输出函数 puts()() 。2. 输入输入(用用%s)(2) 输入多个字符串输入多个字符串,可用
15、空格隔开。可用空格隔开。 static char str15, str25, str35; scanf(%s%s%s, str1, str2,str3);(1) 输入字符串时输入字符串时,系统自动加上系统自动加上0则则: 输入 How are you str1: H o w str2: a r e str3: y o u 输入输入: : How are you 则只会将How输入,且存为str: H o w 0 但若但若: : static char str13 scanf(%s, str);注:注: scanf中须用地址量,数组名表示地址量。中须用地址量,数组名表示地址量。scanf()()
16、函数的缺陷:函数的缺陷: 不能完整地读入含有空格、制表符等字符的字符串。解决方案:用解决方案:用gets()()函数。函数。 gets()函数可读入包括有空格、制表符 等全部字符。以换行符作为结束。例如有:例如有:char name9; gets(name);若输入:若输入:Very hot结果:结果: 数组name的元素如图所示。name0 V name1 e name2 r name3 y name4 name5 h name6 o name7 t name8 0 #include main( ) char name13; int i; for (i =0; i =12; i +)scan
17、f(“ %c”,&namei); for (i =0; i =12; i +)printf(“ %c”,namei); scanf(“ %s”,name); printf(“ %s”,name);例例:采用不同的方式输入输出字符串运行结果运行结果:Pear & Apple Pear & ApplePear & Apple Pear#include #include main( )int i; char name74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n); name03=& name23=&am
18、p; name53=& for (i=0;i7;i+) printf(%sn,namei); getch();例例: 字符串数组值的改变。程序运行结果程序运行结果:sun&monmontue&wedwedthuwen&satsatNAME0SUN0NAME1MON0NAME2TUE0NAME3WED0NAME4THU0NAME5FRI0NAME6SAT0NAME0SUN&NAME1MON0NAME2TUE&NAME3WED0NAME4THU0NAME5FRI&NAME6SAT0赋初值:改变后:字符串处理函数字符串处理函数用于处理字符串运算
19、的函数,放在头文件string.h中如: strcpy( )-字符串拷贝 strcat( )-字符串连接 strcmp( )-字符串比较 等等。例例1:字符串复制。#include #include #include main() int i; char name16=pear; char name213=Apple&Banana; printf(Result is:n); printf(1-%sn,name1); printf(2-%sn,name2); strcpy(name2,name1); printf(“copy:1-%sn,name1); printf(“copy:2-%s
20、n,name2); for (i=0;i11;i+) printf(%c,name2i); getch( );拷贝后: 拷贝前:Name1= pe ar 0Name2= A p pl& B anana0eName1= pe ar 0Name2= pe ar& B anana00程序运行结果:程序运行结果: Result is: 1-pear 2-Apple&Banana copy :1-pear copy :2-pear pear &Banana例:输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。# include stdio.hmain ( ) ch
21、ar c ,string81;int i, num=0, word=0; 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);运行情况如下:I am a boy There are 4 words in the line2.5 数组作为函数参数数组作为函数参数分为两种情况:1. 数组元素作为实参2. 数组名同时为形、实参使用方法使用方法:把数组元素作为函数的
22、实参。把数组元素作为函数的实参。由于数组元素的性质与相同类型的简单变由于数组元素的性质与相同类型的简单变量的性质完全相同,因此,把数组元素作为函量的性质完全相同,因此,把数组元素作为函数的参数也和简单变量一样。数的参数也和简单变量一样。作用作用:传值。传值。int x, a10;如: xa5即a5为一元素,与x完全一样。例:设有两个同样大小的一维数组a10、b10,将相应元素比较,统计a中大于b中对应元素的个数,小于的个数,相等时的个数。#include main()int a10, b10, i, n=0, m=0, k=0;printf(enter array a(10 number):n
23、);for(i=0; i10; i+)scanf(%d, &ai);printf (n);printf(enter array b(10 number):n);for (i=0; i10; i+)scanf(%d, &bi);printf(n);for (i=0; ibi %d timesnai=bi %d timesnaik)printf(array a is larger than array bn);else if (ny)flag=1;else if (xbi 4 times ai=bi 1 times aibi 5 timesarray a is smaller th
24、an array b1. 数组名的作用数组名的作用数组名代表的是数组的起始地址;数组名代表的是数组的起始地址;也就是第也就是第1个元素的地址。个元素的地址。使用数组名作为函数的参数时,形参和使用数组名作为函数的参数时,形参和实参必须是同一类型的数组,系统采用地址实参必须是同一类型的数组,系统采用地址传送方式进行数据传递,即实参的首地址传传送方式进行数据传递,即实参的首地址传递给形参的首地址,实参与形参共享相同的递给形参的首地址,实参与形参共享相同的数据单元。数据单元。使用方法:使用方法:函数的实参和形参都必须是数组名。函数的实参和形参都必须是数组名。作用:作用:传址。传址。2. 把数组名作为函
25、数参数的规则把数组名作为函数参数的规则(可以在函数中修改数组元素的值)#include main()void swap(int x);int a2=2,7;printf(a0:%d, a1:%dn,a0,a1);swap(a);printf(a0:%d, a1:%dn,a0,a1);void swap(int x2)int t;t=x0;x0=x1;x1=t;运行情况如下:a0:2, a1:7a0:7, a1:2注意注意: 二维数组的元素在内存中是按先行后列的顺序存放的,因此可以将二维数组当作是一维数组。例例: 有一个34的矩阵如下:21043783113946要求要求: (1) 打印出所有元
26、素的和;(2) 打印出所有大于平均值的元素。#include#includeint add_ave(int m, int n, int arr );void prt_up(int m, int n, float average, int arr );main( )int A3 4=6, 4, 9, 13, 1, 3, 8, 7, 3, 4, 10, 2; int i=3, j=4, sum;float ave;sum=add_ave(i, j, A0);printf (The number or sum=%dn, sum);ave=(float)(sum)/(i j);printf (The
27、number or average=%5.2fn, ave);prt_up (i, j, ave, A0);int add_ave(int m, int n, int arr )int i;int total=0;for (i=0; im n; i+) total=total+arri;return (total);void prt_up(int m, int n, float average, int arr )int i, j;printf(The number of Bigger then average are:);for (i=0; im; i+) for (j=0; javerage) printf(arr%d%d=%dt, i, j, arri n+j);运行结果:运行结果:The number of sum=42The number of average= 3.00The number of Bigger then average are:arr0 0=6arr0 1=4arr0 2=9arr1 2=8arr1 3=7arr2 1=4arr2 2=10二维数组与一维数组的对应关系:6A00A01A02A03A10A11A12A13A20A21
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安顺市中石油2025秋招笔试提升练习题含答案
- 南宁市中储粮2025秋招面试专业追问题库仓储保管岗
- 中国联通宝鸡市2025秋招心理测评常考题型与答题技巧
- 中国联通清远市2025秋招市场与服务类专业追问清单及参考回答
- 2025年中药分析考试试题及答案
- 深圳市中储粮2025秋招面试专业追问题库机电维修岗
- 2025年弟子出师考试题及答案
- 2025年四川机械联考试题及答案
- 石家庄市中石化2025秋招笔试模拟题含答案油田勘探开发岗
- 国家能源抚顺市2025秋招能源与动力工程类面试追问及参考回答
- 痛风性关节炎鉴别
- 2025年河北大学版(2024)小学信息科技三年级(全一册)教学设计(附目录 P179)
- 团队士气提升培训课件
- DZ 53-1987沉积岩分散有机质中镜质组反射率测定方法
- 超市水产合作商协议书
- 第三届全国技能大赛竞赛-无人机驾驶(植保)选拔赛备考试题库(附答案)
- 市场营销合同协议书
- 加快建设教育强国-2025年上半年形势与政策
- 异常子宫出血护理查房
- 2025年各地高三语文2月试卷【语言文字运用题】汇集练附答案解析
- 销售部组织体系及管理制度
评论
0/150
提交评论