C语言数组详解.ppt

上传人:小飞机 文档编号:5426337 上传时间:2023-07-05 格式:PPT 页数:56 大小:763KB
返回 下载 相关 举报
C语言数组详解.ppt_第1页
第1页 / 共56页
C语言数组详解.ppt_第2页
第2页 / 共56页
C语言数组详解.ppt_第3页
第3页 / 共56页
C语言数组详解.ppt_第4页
第4页 / 共56页
C语言数组详解.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《C语言数组详解.ppt》由会员分享,可在线阅读,更多相关《C语言数组详解.ppt(56页珍藏版)》请在三一办公上搜索。

1、数组,什么是数组?,就是一组具有固定数目的、有序的、类型相同的数据的集合。根据数组下标的多少,数组可以分为一维数组和多维数组。,例如:一个班级有30个学生,可以用g1,g2,g30代表学生的成绩,其中g是数组名,下标代表学生的序号。由于在C语言中无法表示下标,所以就引入了 表示下标。g1:第1个学生的成绩gi:第i个学生的成绩等等,为标识数组中的每个元素,C语言对其进行编号。这个编号称之为数组元素下标。(C语言规定下标从0开始)。,指定该数组的数据个数,用于访问的、具有相同的数据类型。在程序设计中相当于变量名的用法。,一个数组就是一组连续的内存空间,用来保存数据,数组中的每一项称为一个元素。,

2、(一)一维数组(1)定义及使用,类型说明符 数组名常量表达式 int a10,任一种基本数据类型或构造数据类型。,用户自定义的数组名字,其定名规则与变量名定名规则一样,都需遵循标识符定名规则,表示元素的个数,即数组长度。,下标运算符单目运算符优先级(1)左结合不能用(),注意:1.数组名不能与其它变量名相同,void main()int a;float a10;,(一)一维数组(1)定义及使用,2.不能在方括号中用变量来表示元素的个数,但可以是符号常数或常量表达式。,int n;scanf(%d,#define FD 5 void main()int a3+2,b7+FD;,(一)一维数组(1

3、)定义及使用,3.方括号中常量表达式表示数组元素的个数。如int a5:数组a有5个元素,其下标从0开始,分别为a0,a1,a2,a3,a4。,4.允许在同一个类型说明中说明多个数组和多个变量。例如:int a,b,c,d,k110,k220;,如果出现数组越界,编译系统没有提示的。,(一)一维数组(1)定义及使用,数组必须先定义,然后使用。数组元素的表示形式为:数组名下标 C语言规定只能逐个引用数组元素而不能一次引用整个数组。,可以是整型常量或整型表达式,(一)一维数组(2)引用,全部初始化 部分初始化 使用输入函数scanf初始化 使用表达式赋值,int a10=0,1,2,3,4,5,6

4、,7,8,9;,a0=0;a1=1;a2=2;a3=3;a4=4;a5=5;a6=6;a7=7;a8=8;a9=9;,int a10=0,1,2,3;,a0=0;a1=1;a2=2;a3=3;a4=0;a5=0;a6=0;a7=0;a8=0;a9=0;,int a10;,for(int i=0;i10;i+)scanf(%d,int a10=0,1,2,3;,a4=a3+2;,对全部数组元素赋初值时,数组长度可以省略,(一)一维数组(3)初始化,一维数组元素的存储方式,int a5=1,2,3,4,5;,一维数组元素的存储方式,#include void main()int a5=0,1,2,

5、3,4;for(int i=0;i5;i+)printf(a%d=%d,其地址是%dn,i,ai,数组名表示数组的起始地址,是一个地址常量,程序举例1:用选择排序法进行排序。,选择排序法是编程中经常用的一种排序算法。具体如下:先将5个数中最小的数与a0对换,再将a1到a4中最小的数与a1对换,这样每比较一轮,找出一个未经排序的数中最小的一个。共比较4轮。,int a5=3,6,1,9,4;,1.4一维数组程序举例,a0 a1 a2 a3 a4 3 6 1 9 4 未排序的情况 1 6 3 9 4 将5个数中最小的数1与 a0对换 1 3 6 9 4 将余下的4个数中最小的数 3与a1 对换 1

6、 3 4 9 6 将余下的3个数中最小的数 4与a2 对换 1 3 4 6 9 将余下的2个数中最小的数 6与 a3 对换,main()int i,j,k,t;int a5=3,6,1,9,4;for(i=0;i sizeof(a)/sizeof(int)1;i+)k=i;for(j=i+1;j sizeof(a);j+)if(aj ak)k=j;if(k!=i)t=ai;ai=ak;ak=t;,容易出错的地方,数组的起始下标、最后一个元素的下标 定义数组时不指定长度(动态数组)对数值型数组进行整体操作 用scanf语句时,数组元素前应加,小结,一维数组的定义、初始化、引用、输入、输出概念、操

7、作必须掌握 数组中的所有元素,数据类型都一致 数组名字代表数组的首地址,是一个常量数组元素具有和相同单个变量一样的属性,凡允许使用单个变量的地方均可以使用数组元素,(二)二维数组定义及使用,这儿只讨论二维数组,多维数组可由二维数组推导得出,二维数组定义的一般形式为:类型说明符 数组名常量表达式常量表达式,第一常量表达式为行数,第二个为列数,int a34;,float a3,4,b5,10;/*错误*/,二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素,二维数组在内存中的存放,下图表示对a34数组存放的顺序,int a23=1,2,3,4,5,6;,

8、(二)二维数组存储方式,#include void main()int a23=1,2,3,4,5,6,i,j;for(i=0;i2;i+)for(j=0;j3;j+)printf(第a%d%d元素=%d,其地址为:%dn,i,j,aij,(二)二维数组引用,二维数组的表示形式:数组名下标下标,注意:下标可以是整型表达式,如a2-12*2-1 数组元素可以出现在表达式中,也可以被赋值 b12=a23/2;在使用数组元素时,应该注意下标值应在已定义的数组大小范围内 int a34;a34=5;严格区分在定义数组时用的a34和引用元素时的a34,全部初始化 部分初始化 使用输入函数scanf初始化

9、,int a23=0,1,2,3,4,5;int a23=0,1,2,3,4,5;,a00=0;a01=1;a02=2;a10=3;a11=4;a12=5;,int a23=0,1,2;int a23=0,1;,a00=0;a01=1;a02=2;a10=0;a11=0;a12=0;,int a23;,for(int i=0;i2;i+)for(int j=0;j3;j+)scanf(%d,对全部数组元素赋初值时,第一维的长度可以省略,(二)二维数组初始化,(二)二维数组程序举例,例3:一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。,(二)二维数组程序举

10、例,例3:一个学习小组有5个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。,#include#define N 3#define M 5void main()float scoreNM,avg1=0,avgN,sumN=0;int i,j;for(i=0;iN;i+)for(j=0;jM;j+)printf(第%d门课,第%d个学生的成绩:,i,j);scanf(%f,小结,二维数组在内存中是按行存放 数组元素的下标每一维都是从0开始的 数值型数组不能够整体引用 可以把二维数组看成是一个特殊的一维数组,即其元素是一个一维数组 二维数组初始化有两种方法:按行赋值或者一行赋值

11、,(三)字符数组定义,字符数组:用来存放字符数据的数组就是字符数组。定义方式:char 数组名长度,一维数组:char a10;二维数组:char a45;,(三)字符数组初始化,对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。如:Char c10=I,a,m,,h,a,p,p,y;,如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。,如果花括弧中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理。,注意:,char c=I,a,m,h,a,p,p,y;数组c的长度自动定为10。,#include void main()char c10=I,a,m,a,b

12、,o,y;int i;for(i=0;i10;i+)printf(“%c”,ci);printf(“n”);,(三)字符数组引用,可以引用字符数组中的一个元素,得到一个字符,在实际编程中,最常用的是字符串。在中是用字符数组存放字符串。字符串以0作为串结束符,因此当把字符串存入数组时,也把0 存入数组,并以此作为该字符串是否结束的标志。程序中通过循环扫描字符数组元素,读到0 时候便认为字符串结束。,(三)字符数组字符串和字符串结束标志,用字符串方式赋值比用字符逐个赋值要多占一个字节,用于存放字符串结束标志0。例如:数组char c=“c program”在内存中的实际存放情况为:,(三)字符数组

13、字符串和字符串结束标志,0是由C编译系统自动加上的。由于采用了0标志,所以在用字符串赋初值时一般无须指定数组的长度,而由系统自行处理。,在内存中数组c的状态,(三)字符数组字符数组的输入输出,字符数组的输入输出可以有两种方式:逐个字符输入输出。用”%c”输入或输出一个字符 将整个字符串一次输出。用“%s”格式符,,char c=“China”;printf(“%s”,c);,China,(三)字符数组字符数组的输入输出,注意:输出字符不包括结束符0;用“%s”格式符输出字符串时,printf函数中的输出项时字符数组名,而不是数组元素名。printf(“%s”,c);如果数组长度大于字符串实际长

14、度,也只输出遇0结束 如果一个字符数组中包含一个以上0,则遇到第一个0时结束。,#include void main()char st15;printf(input string:n);scanf(%s,st);printf(%sn,st);,(三)字符数组字符数组的输入输出,本例中由于定义数组长度为15,因此输入的字符串长度必须小于15,以留出一个字节用于存放字符串结束标志0。对于字符数组,如果不作初始化赋值,则须说明数组长度。应该特别注意的是,当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。例如运行上例,当输入的字符串中含有空格时,运行情况为:,(三)字符

15、数组字符数组的输入输出,#include void main()char st16,st26,st36,st46;printf(input string:n);scanf(%s%s%s%s,st1,st2,st3,st4);printf(%s%s%s%sn,st1,st2,st3,st4);,从输出结果可以看出空格以后的字符都未能输出。为了避免这种情况,可多设几个字符数组分段存放含空格的串。程序可改写如下:,(三)字符数组字符数组的输入输出,重要一点:在前面介绍过scanf的各输入项必须以地址方式出现,如&a,&b等。但在上例中却是以数组名方式出现的,这是为什么呢?这是由于在语言中规定,数组名

16、就代表了该数组的首地址。,(三)字符数组字符串处理函数,语言提供了丰富的字符串处理函数,大致可分为字符串的输入、输出、合并、修改、转换、复制、搜索几类。用于输入输出的字符串函数,在使用前应包含头文件stdio.h;使用其它字符串函数则应包含头文件string.h。下面介绍几个最常用的字符串函数。,(三)字符数组字符串处理函数,格式:puts(字符数组名),功能:把字符数组中的字符串输出到显示器。即在屏幕上显示该字符串。,#include void main()static char c=BASICndBASE;puts(c);,从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两

17、行。puts函数完全可以由printf函数取代。当需要按一定格式输出时,通常使用printf函数。,字符串输出函数 puts,(三)字符数组字符串处理函数,格式:gets(字符数组名),功能:从标准输入设备键盘上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。,#includestdio.h“void main()char st15;printf(input string:n);gets(st);puts(st);,可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。,字符

18、串输入函数gets,3.strcat函数其一般形式为:strcat(字符数组1,字符数组2)strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值字符数组1的地址。,(三)字符数组字符串处理函数,例如:char str130=Peoples Republic of;char str2=China;print(%s,strcat(str1,str2);输出:Peoples Republic of China,4.strcpy函数 其一般形式为:strcpy(字符数组1,字符串2)strcpy是“字符串复制函数”。作用是将字符串

19、2复制到字符数组1中去。例如:char str110,str2=China;strcpy(str1,str2);,1.字符数组1必须定义得足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。,2.“字符数组1”必须写成数组名形式(如str1),“字符串2”可以是字符数组名,也可以是一个字符串常量。如strcpy(str1,China);,3.复制时连同字符串后面的0一起复制到字符数组1中。,4.可以用strcpy函数将字符串2中前面若干个字符复制到字符数组1中去。例如:strcpy(str1,str2,2);作用是将str2中前面2个字符复制到str1中去,然后再加一个0。

20、,5.不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。如下面两行都是不合法的:char str110,str210;str1=China;str1=str2;而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。如下面是合法的:char a5,c1,c2;c1=A;c2=B;a0=C;a1=h;a2=i;a3=n;a4=a;,(三)字符数组字符串处理函数,测字符串长度函数strlen,格式:strlen(字符数组名),功能:测字符串的实际长度(不含字符串结束标志0)并作为函数返回值。,#includestring.h

21、“#include“stdio.h”void main()int k;char st=C language;k=strlen(st);printf(The lenth of the string is%dn,k);,Strlen()与sizeof()的区别,容易出错的地方,将字符数组定义为一个字符 混淆c和”c”的意义 字符数组整体输入时用取地址符号是不对的 在实际应用中,字符数组,在使用前先格式化。调用函数memset.char a100;memset(a,0,sizeof(a);,小结,字符数组可以通过数组名进行整体引用 C语言没有字符串类型数据,字符串的操作通过一维字符数组实现 C语言规

22、定以0作为字符串结束标志 字符数组的输入输出分别可使用getchar()/scanf()/gets()和putchar()/printf()/puts()%c%s,1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。2.数组可以是一维的,二维的或多维的。3.数组类型说明由类型说明符、数组名、数组长度(数组元素个数)三部分组成。数组元素又称为下标变量。数组的类型是指下标变量取值的类型。4.对数组的赋值可以用数组初始化赋值,输入函数动态赋值和赋值语句赋值三种方法实现。对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语

23、句逐个对数组元素进行操作。,小结,小结(续)常见错误,1、数组下标越界,.int a10;a10=0;.,小结(续)常见错误,2、数组整体赋值,.int a10;a=0;.,小结(续)常见错误,3、接收字符串时用了取地址符,.char st30;scanf(“%s”,.,小结(续)常见错误,4、向一个字符数组赋字符串,#include void main()char st30;st=china;puts(st);,#include void main()char st30=china;puts(st);,内容回顾,1、数组的定义一维数组:类型说明符 数组名下标二维数组:类型说明符 数组名下标下标字符数组:char 数组名下标2、数组的使用 先定义赋初值(部分赋值,全部赋值)后使用3、常用的字符串函数包含在头文件(stdio.h string.h),内容回顾,谢谢!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号