《C语言数组详解.pptx》由会员分享,可在线阅读,更多相关《C语言数组详解.pptx(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、LL就是一组具有就是一组具有固定数目的固定数目的、有序的有序的、类型相同类型相同的数据的集合。根据数组下标的的数据的集合。根据数组下标的多少,数组可以分为一维数组和多维数组。多少,数组可以分为一维数组和多维数组。n例如:一个班级有例如:一个班级有3030个学生,可以用个学生,可以用g g1 1,g,g2 2,g,g3030代表学生的成绩,其中代表学生的成绩,其中g g是数组名,下是数组名,下标代表学生的序号。由于在标代表学生的序号。由于在C C语言中无法表示下标,语言中无法表示下标,所以就引入了所以就引入了 表示下标。表示下标。ng1:g1:第第1 1个学生的成绩个学生的成绩ngi:gi:第第
2、i i个学生的成绩等等个学生的成绩等等第1页/共56页(一)一维数组(一)一维数组(1 1)定义及使用定义及使用类型说明符类型说明符 数组名数组名 常量表达式常量表达式 int a10 int a10任一种基本数基本数据类型据类型或构造数据类型。用户自定义的数组名字,其定名规则与变量名定名规则一样,都需遵循标识符定名规则标识符定名规则表示元素的个数,即数组长度。下标运算符单目运算符优先级(1)左结合不能用()第3页/共56页注意:注意:1.数组名不能不能与其它变量名相同voidmain()inta;floata10;(一)一维数组(一)一维数组(1 1)定义及使用定义及使用第4页/共56页2.
3、2.不能在方括号中用不能在方括号中用变量变量来表示元素的个数,但可以是来表示元素的个数,但可以是符号符号常数或常量表达式常数或常量表达式。int n;int n;scanf(%d,&n);scanf(%d,&n);/*/*表示维数的只能是常量表示维数的只能是常量*/*/int an;int an;#define FD 5#define FD 5 void main()void main()int a3+2,b7+FD;int a3+2,b7+FD;(一)一维数组(一)一维数组(1 1)定义及使用定义及使用第5页/共56页3.方括号中常量表达式表示数组元素的个数。如int a5:数组a有5个元素
4、,其下标从下标从0开始开始,分别为a0,a1,a2,a3,a4。4.允许在同一个类型说明中说明多个数组和多个变量。例如:int a,b,c,d,k110,k220;如果出现数如果出现数组越界,组越界,编译系统编译系统没有提示没有提示的。的。(一)一维数组(一)一维数组(1 1)定义及使用定义及使用第6页/共56页EE 数组必须数组必须先定义,然后使用先定义,然后使用先定义,然后使用先定义,然后使用。EE 数组元素的表示形式为:数组元素的表示形式为:数组名数组名数组名数组名 下标下标下标下标 EE C C语言规定语言规定只能逐个引用数组元素只能逐个引用数组元素只能逐个引用数组元素只能逐个引用数组
5、元素而不能一次引用整个数组。而不能一次引用整个数组。p可以是整型常量或整型表达式(一)一维数组(一)一维数组(2 2)引用引用第7页/共56页O 全部初始化O 部分初始化O 使用输入函数scanf初始化O 使用表达式赋值int a10=0,1,2,3,4,5,6,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,&ai);int a
6、10=0,1,2,3;a4=a3+2;对全部数组元素赋初值时,数组对全部数组元素赋初值时,数组长度可以省略长度可以省略(一)一维数组(一)一维数组(3 3)初始化初始化第8页/共56页int a5=1,2,3,4,5;54321a4a3a2a1a020202016201220082004a#include#include void main()void main()int a5=0,1,2,3,4;int a5=0,1,2,3,4;for(int i=0;i5;i+)for(int i=0;i5;i+)printf(a%d=%d,printf(a%d=%d,其地址是其地址是%dn,i,ai%d
7、n,i,ai,&ai,&ai););printf(printf(数组的首地址为数组的首地址为:%dn,:%dn,a a););printf(printf(数组数组a a在内存中占字节数在内存中占字节数:%dn,:%dn,sizeof(a)sizeof(a););数组名表示数组的起始地址,是一个地址常量第9页/共56页程序举例程序举例程序举例程序举例1 1 1 1:用选择排序法进行排序。用选择排序法进行排序。选择排序法是编程中经常用的一种排序算法。具体如下:选择排序法是编程中经常用的一种排序算法。具体如下:选择排序法是编程中经常用的一种排序算法。具体如下:选择排序法是编程中经常用的一种排序算法。
8、具体如下:先将先将先将先将5 5 5 5个数中最小的数与个数中最小的数与个数中最小的数与个数中最小的数与a0a0a0a0对换,再将对换,再将对换,再将对换,再将a1a1a1a1到到到到a4a4a4a4中最小的数与中最小的数与中最小的数与中最小的数与a1a1a1a1对换,这样每比较一轮,找出一个未经排序的数中最小的一个。共比较对换,这样每比较一轮,找出一个未经排序的数中最小的一个。共比较对换,这样每比较一轮,找出一个未经排序的数中最小的一个。共比较对换,这样每比较一轮,找出一个未经排序的数中最小的一个。共比较4 4 4 4轮。轮。轮。轮。int a5=3,6,1,9,4;int a5=3,6,1
9、,9,4;int a5=3,6,1,9,4;int a5=3,6,1,9,4;一维数组程序举例第10页/共56页a0 a1 a2 a3 a4a0 a1 a2 a3 a4 3 6 1 9 4 3 6 1 9 4 未排序的情况未排序的情况 1 6 3 9 4 1 6 3 9 4 将将5 5个数中最小的数个数中最小的数1 1与与 a0 a0对换对换 1 3 6 9 4 1 3 6 9 4 将余下的将余下的4 4个数中最小的数个数中最小的数 3 3与与a1 a1 对换对换 1 3 4 9 6 1 3 4 9 6 将余下的将余下的3 3个数中最小的数个数中最小的数 4 4与与a2 a2 对换对换 1 3
10、 4 6 9 1 3 4 6 9 将余下的将余下的2 2个数中最小的数个数中最小的数 6 6与与 a3 a3 对换对换第11页/共56页main()main()int i,j,k,t;int i,j,k,t;int a5=3,6,1,9,4;int a5=3,6,1,9,4;for(i=0;i sizeof(a)/sizeof(int)1;i+)for(i=0;i sizeof(a)/sizeof(int)1;i+)k=i;k=i;for(j=i+1;j sizeof(a);j+)for(j=i+1;j sizeof(a);j+)if(aj ak)k=j;if(aj ak)k=j;if(k!=
11、i)if(k!=i)t=ai;ai=ak;ak=t;t=ai;ai=ak;ak=t;第12页/共56页NN 数组的起始下标、最后一个元素的下标数组的起始下标、最后一个元素的下标NN 定义数组时不指定长度定义数组时不指定长度(动态数组动态数组)NN 对数值型数组进行整体操作对数值型数组进行整体操作NN 用用scanfscanf语句时,数组元素前应加语句时,数组元素前应加&语句错误,不了解数组定义时与数组元素使用时的区别语句错误,不了解数组定义时与数组元素使用时的区别:scanf(“%d”,a10);scanf(“%d”,a10);第13页/共56页NN 一维数组的定义、初始化、引用、输入、输出概
12、念、操作必须掌握一维数组的定义、初始化、引用、输入、输出概念、操作必须掌握NN 数组中的所有元素,数据类型都一致数组中的所有元素,数据类型都一致NN 数组名字代表数组的首地址,是一个常量数组名字代表数组的首地址,是一个常量NN数组元素具有和相同单个变量一样的属性,凡允许使用单个变量的地方数组元素具有和相同单个变量一样的属性,凡允许使用单个变量的地方均可以使用数组元素均可以使用数组元素第14页/共56页(二)二维数组(二)二维数组定义及使用定义及使用这儿只讨论二维数组,多维数组可由二维数组推导得出二维数组定义的一般形式为:类型说明符数组名常量表达式常量表达式第一常量表达式为行数,第二个为列数in
13、ta34;floata3,4,b5,10;/*错误*/第15页/共56页 二维数组中的元素在内存中的排列二维数组中的元素在内存中的排列顺序是:按行存放,即先顺序存放第一顺序是:按行存放,即先顺序存放第一行的元素,再存放第二行的元素行的元素,再存放第二行的元素 二二维数组在内存中的存放维数组在内存中的存放下图表示对下图表示对a a3 34 4数组存放的顺序数组存放的顺序 第16页/共56页int a23=1,2,3,4,5,6;a0654321a12a11a10a02a0120222018201420102006a002002a1(二)二维数组(二)二维数组存储方式存储方式#include#in
14、clude void main()void main()int a23=1,2,3,4,5,6,i,j;int a23=1,2,3,4,5,6,i,j;for(i=0;i2;i+)for(i=0;i2;i+)for(j=0;j3;j+)for(j=0;j3;j+)printf(printf(第第a%d%da%d%d元素元素=%d=%d,其地址为,其地址为:%dn,i,j,aij,&aij);:%dn,i,j,aij,&aij);printf(a=%dta0=%dta1=%dn,a,a0,a1);printf(a=%dta0=%dta1=%dn,a,a0,a1);第17页/共56页(二)二维数组
15、(二)二维数组引用引用二维数组的表示形式:数组名下标下标注意:注意:N 下标可以是整型表达式,如a2-12*2-1N 数组元素可以出现在表达式中,也可以被赋值 b12=a23/2;N 在使用数组元素时,应该注意下标值应在已定义的数组大小范围内 int a34;a34=5;N 严格区分在定义数组时用的a34和引用元素时的a34第18页/共56页O 全部初始化O 部分初始化O 使用输入函数scanf初始化int a23=0,1,2,3,4,5;int a23=0,1,20,1,2,3,4,53,4,5;a00=0;a01=1;a02=2;a10=3;a11=4;a12=5;int a23=int
16、a23=0,1,20,1,2;int a23=0,1;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,&aij);对全部数组元素赋初值时,第一对全部数组元素赋初值时,第一维的长度可以省略维的长度可以省略(二)二维数组(二)二维数组初始化初始化第19页/共56页(二)二维数组(二)二维数组程序举例程序举例例例3 3:一个学习小组有:一个学习小组有5 5个人,每个人有三门课的考试成绩。求全组分科的平均成绩个人,每个人有三门课的考试成绩。求全组分科
17、的平均成绩和各科总平均成绩。和各科总平均成绩。EnglishMathC张张807592王王616571李李596370赵赵858790周周767785第20页/共56页(二)二维数组(二)二维数组程序举例程序举例例例3 3:一个学习小组有:一个学习小组有5 5个人,每个人有三门课的考试成绩。求全个人,每个人有三门课的考试成绩。求全组分科的平均成绩和各科总平均成绩。组分科的平均成绩和各科总平均成绩。for i=0 to 2for i=0 to 2for j=0 to 4for j=0 to 4sumi+=scoreijsumi+=scoreijavgi=sumi/5avgi=sumi/5for
18、i=0 to 2for i=0 to 2output avgioutput avgiavg+=avgiavg+=avgioutput avg/3output avg/3第21页/共56页#include#define N 3#define M 5#include#define N 3#define M 5void main()void main()float scoreNM,avg1=0,avgN,sumN=0;float scoreNM,avg1=0,avgN,sumN=0;int i,j;int i,j;for(i=0;iN;i+)for(i=0;iN;i+)for(j=0;jM;j+)f
19、or(j=0;jM;j+)printf(printf(第第%d%d门课门课,第第%d%d个学生的成绩个学生的成绩:,i,j);:,i,j);scanf(%f,&scoreij);scanf(%f,&scoreij);for(i=0;iN;i+)for(i=0;iN;i+)for(j=0;jM;j+)for(j=0;jM;j+)sumi+=scoreij;sumi+=scoreij;avgi=sumi/M;avgi=sumi/M;for(i=0;iN;i+)for(i=0;iN;i+)printf(printf(第第%d%d门课的平均成绩为门课的平均成绩为%.2fn,i,avgi);%.2fn,
20、i,avgi);avg1+=avgi;avg1+=avgi;printf(printf(各科总平均成绩为各科总平均成绩为%.2fn,avg1/N);%.2fn,avg1/N);第22页/共56页 二维数组在内存中是按行存放二维数组在内存中是按行存放 数组元素的下标每一维都是从数组元素的下标每一维都是从0 0开始的开始的 数值型数组不能够整体引用数值型数组不能够整体引用 可以把二维数组看成是一个特殊的一维数组,即其元素是一个一维数组可以把二维数组看成是一个特殊的一维数组,即其元素是一个一维数组 二维数组初始化有两种方法:按行赋值或者一行赋值二维数组初始化有两种方法:按行赋值或者一行赋值第23页/
21、共56页(三)字符数组(三)字符数组定义定义字符数组字符数组:用来存放字符数据的数组就是字符数组。定义方式:定义方式:char数组名长度一维数组:chara10;二维数组:chara45;第24页/共56页(三)字符数组(三)字符数组初始化初始化对字符数组初始化,对字符数组初始化,最容易理解的方式是逐个字符赋给数组中各元素。最容易理解的方式是逐个字符赋给数组中各元素。如:如:Char c10=I,aChar c10=I,a,mm,,hh,aa,pp,pp,y;y;如果在定义字符数组时不进行初始化,则数组中各元素的值如果在定义字符数组时不进行初始化,则数组中各元素的值如果在定义字符数组时不进行初
22、始化,则数组中各元素的值如果在定义字符数组时不进行初始化,则数组中各元素的值是不可预料的。是不可预料的。是不可预料的。是不可预料的。如果花括弧中提供的初值个数如果花括弧中提供的初值个数如果花括弧中提供的初值个数如果花括弧中提供的初值个数(即字符个数即字符个数即字符个数即字符个数)大于数组大于数组大于数组大于数组长度,则按语法错误处理。长度,则按语法错误处理。长度,则按语法错误处理。长度,则按语法错误处理。注意注意注意注意:第25页/共56页如果初值个数小于数组长度,则只将这些字符赋给数如果初值个数小于数组长度,则只将这些字符赋给数如果初值个数小于数组长度,则只将这些字符赋给数如果初值个数小于数
23、组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符组中前面那些元素,其余的元素自动定为空字符组中前面那些元素,其余的元素自动定为空字符组中前面那些元素,其余的元素自动定为空字符(即即即即0)0)0)0)。例如:。例如:。例如:。例如:char cchar cchar cchar c10101010=c=c=c=c,pppp,rrrr,oooo,gggg,rrrr,aaaa,m;m;m;m;第26页/共56页在定义字符数组时可以省略数组长度,系统会在定义字符数组时可以省略数组长度,系统会在定义字符数组时可以省略数组长度,系统会在定义字符数组时可以省略数组长度,系统会自动根据初
24、值个数确定数组长度。例如:自动根据初值个数确定数组长度。例如:自动根据初值个数确定数组长度。例如:自动根据初值个数确定数组长度。例如:char cchar cchar cchar c=I,a,m,h,=I,a,m,h,=I,a,m,h,=I,a,m,h,a,p,p,y;a,p,p,y;a,p,p,y;a,p,p,y;数组数组数组数组c c c c的长度自动定为的长度自动定为的长度自动定为的长度自动定为10101010。第27页/共56页#include void main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(“%c”,ci);
25、printf(“n”);(三)字符数组(三)字符数组引用引用可以引用字符数组中的一个元素,得到一个字符可以引用字符数组中的一个元素,得到一个字符第28页/共56页在在在在实际编实际编实际编实际编程中,最常用的是字符串。在中程中,最常用的是字符串。在中程中,最常用的是字符串。在中程中,最常用的是字符串。在中是用字符数是用字符数是用字符数是用字符数组组组组存放字符串。字符串以存放字符串。字符串以存放字符串。字符串以存放字符串。字符串以 00 作作作作为为为为串串串串结结结结束符,因此当把字符串存入数束符,因此当把字符串存入数束符,因此当把字符串存入数束符,因此当把字符串存入数组时组时组时组时,也把
26、也把也把也把 00 存入数存入数存入数存入数组组组组,并以此作,并以此作,并以此作,并以此作为该为该为该为该字符串是字符串是字符串是字符串是否否否否结结结结束的束的束的束的标标标标志。志。志。志。程序中通程序中通程序中通程序中通过过过过循循循循环扫环扫环扫环扫描字符数描字符数描字符数描字符数组组组组元素,元素,元素,元素,读读读读到到到到 00 时时时时候便候便候便候便认为认为认为认为字符串字符串字符串字符串结结结结束。束。束。束。(三)字符数组(三)字符数组字符串和字符串结束标志字符串和字符串结束标志第29页/共56页用字符串方式用字符串方式用字符串方式用字符串方式赋值赋值赋值赋值比用字符逐
27、个比用字符逐个比用字符逐个比用字符逐个赋值赋值赋值赋值要多占要多占要多占要多占一个字一个字一个字一个字节节节节,用于存放字符串用于存放字符串用于存放字符串用于存放字符串结结结结束束束束标标标标志志志志00。例如:数例如:数例如:数例如:数组组组组char c=“c program”char c=“c program”在在在在内存中的内存中的内存中的内存中的实际实际实际实际存放情况存放情况存放情况存放情况为为为为:(三)字符数组(三)字符数组字符串和字符串结束标志字符串和字符串结束标志00是由是由C C编译系统自动加上的。由于采用了编译系统自动加上的。由于采用了00标志,所以在用标志,所以在用字
28、符串赋初值时一般无须指定数组的长度,字符串赋初值时一般无须指定数组的长度,而由系统自行处理。而由系统自行处理。第30页/共56页char cchar c=China;=China;printf(%sprintf(%s,c);c);例如在内存中数组在内存中数组c c的状态的状态第31页/共56页(三)字符数组(三)字符数组字符数组的输入输出字符数组的输入输出字符数组的输入输出可以有两种方式:N逐个字符输入输出。用”%c”输入或输出一个字符N将整个字符串一次输出。用“%s”格式符,charc=“China”;printf(“%s”,c);China0China第32页/共56页(三)字符数组(三)
29、字符数组字符数组的输入输出字符数组的输入输出注意:N输出字符不包括结束符0;N用“%s”格式符输出字符串时,printf函数中的输出项时字符数组名,而不是数组元素名。printf(“%s”,c);N如果数组长度大于字符串实际长度,也只输出遇0结束N如果一个字符数组中包含一个以上0,则遇到第一个0时结束。第33页/共56页#include void main()char st15;printf(input string:n);scanf(%s,st);printf(%sn,st);(三)字符数组(三)字符数组字符数组的输入输出字符数组的输入输出本例中由于定义数组长度为15,因此输入的字符串长度必
30、须小于15,以留出一个字节用于存放字符串结束标志0。对于字符数组,如果不作初始化赋值,则须说明数组长度。应该特别注意的是,当用scanf函数输入字符串时,字符串中不能含有空格,否则将以空格作为串的结束符。例如运行上例,当输入的字符串中含有空格时,运行情况为:第34页/共56页(三)字符数组(三)字符数组字符数组的输入输出字符数组的输入输出#includevoidmain()charst16,st26,st36,st46;printf(inputstring:n);scanf(%s%s%s%s,st1,st2,st3,st4);printf(%s%s%s%sn,st1,st2,st3,st4);
31、从输出结果可以看出空格以后的字符都未能输出。为了避免这种情况,可多设几个字符数组分段存放含空格多设几个字符数组分段存放含空格的串的串。程序可改写如下:第35页/共56页(三)字符数组(三)字符数组字符数组的输入输出字符数组的输入输出重要一点:重要一点:在前面介绍过scanf的各输入项必须以地址方式出现,如&a,&b等。但在上例中却是以数组名方式出现的,这是为什么呢?这是由于在语言中规定,数组名就代表了该数数组名就代表了该数组的首地址。组的首地址。第36页/共56页(三)字符数组(三)字符数组字符串处理函数字符串处理函数语言提供了丰富的字符串处理函数,大致可分为字符串的输入、输出、合并、修改、转
32、换、复制、搜索几类。用于输入输出的字符串函数,在使用前应包含头文件stdio.h;使用其它字符串函数则应包含头文件。下面介绍几个最常用的字符串函数。第37页/共56页(三)字符数组(三)字符数组字符串处理函数字符串处理函数格式:格式:puts(字符数组名)功能:功能:把字符数组中的字符串输出到显示器。即在屏幕上显示该字符串。#includevoidmain()staticcharc=BASICndBASE;puts(c);从程序中可以看出puts函数中可以使用转义字符,因此输出结果成为两行。puts函数完全可以由printf函数取代。当需要按一定格式输出时,通常使用printf函数。字符串输出
33、函数 puts第38页/共56页(三)字符数组(三)字符数组字符串处理函数字符串处理函数格式:格式:gets(字符数组名)功能:功能:从标准输入设备键盘上输入一个字符串。本函数得到一个函数值,即为该字符数组的首地址。#includestdio.h“voidmain()charst15;printf(inputstring:n);gets(st);puts(st);可以看出当输入的字符串中含有空格时,输出仍为全部字符串。说明gets函数并不以空格作为字符串输入结束的标志,而只以回车作为输入结束。这是与scanf函数不同的。字符串输入函数gets第39页/共56页3.strcat3.strcat函
34、数其一般形式为:strcat(strcat(字符数组1 1,字符数组2)2)strcat的作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值字符数组1的地址。(三)字符数组(三)字符数组字符串处理函数字符串处理函数第40页/共56页例如:char str130=Peoples Republic of ;char str2char str2=China;=China;print(%sprint(%s,strcat(str1strcat(str1,str2);str2);输出:Peoples Republic of ChinaPeople
35、s Republic of China 第41页/共56页4.strcpy函数 其一般形式为:strcpy(字符数组1,字符串2)strcpy是“字符串复制函数”。作用是将字符串2复制到字符数组1中去。例如:char str1char str11010,str2str2=China;=China;strcpy(str1,str2);第42页/共56页1.1.1.1.字符数组字符数组1 1必须定义得足够大,以便容纳被复制的字符串。字符数组必须定义得足够大,以便容纳被复制的字符串。字符数组1 1的长度不的长度不应小于字符串应小于字符串2 2的长度。的长度。2.2.2.2.“字字符符数数组组1 1”
36、必必须须写写成成数数组组名名形形式式(如如str1)str1),“字字符符串串2 2”可可以以是是字字符符数数组组名名,也可以是一个字符串常量。如也可以是一个字符串常量。如strcpy(str1strcpy(str1,ChinaChina);3.3.3.3.复制时连同字符串后面的复制时连同字符串后面的0 0一起复制到字符数组一起复制到字符数组1 1中。中。4.4.4.4.可可以以用用strcpystrcpy函函数数将将字字符符串串2 2中中前前面面若若干干个个字字符符复复制制到到字字符符数数组组1 1中中去去。例例如如:strcpy(str1:strcpy(str1,str2str2,2);2
37、);作用是将作用是将str2str2中前面中前面2 2个字符复制到个字符复制到str1str1中去,然后再加一个中去,然后再加一个 0 0。第43页/共56页5.5.5.5.不不能能用用赋赋值值语语句句将将一一个个字字符符串串常常量量或或字字符符数数组组直直接接给给一一个个字字符符数数组组。如如下下面面两两行行都是不合法的:都是不合法的:char str110,str210;char str110,str210;str1=China;str1=str2;str1=China;str1=str2;str1=China;str1=str2;str1=China;str1=str2;而而只只能能用用
38、strcpystrcpy函函数数将将一一个个字字符符串串复复制制到到另另一一个个字字符符数数组组中中去去。用用赋赋值值语语句句只只能能将将一个字符赋给一一个字符赋给一个字符型变量或字符数组元素。如下面是合法的:个字符型变量或字符数组元素。如下面是合法的:char achar achar achar a5 5 5 5,c1c1c1c1,c2;c2;c2;c2;c1=A;c2=B;c1=A;c2=B;c1=A;c2=B;c1=A;c2=B;a a a a0 0 0 0=C;a=C;a=C;a=C;a1 1 1 1=h;a=h;a=h;a=h;a2 2 2 2=i;=i;=i;=i;a a a a3
39、 3 3 3=n;a=n;a=n;a=n;a4 4 4 4=a;=a;=a;=a;第44页/共56页(三)字符数组(三)字符数组字符串处理函数字符串处理函数测字符串长度函数strlen格式格式:strlen(字符数组名)功能:功能:测字符串的实际长度(不含字符串结束标志0)并作为函数返回值。#includestring.h“#include“stdio.h”voidmain()intk;charst=Clanguage;k=strlen(st);printf(Thelenthofthestringis%dn,k);第45页/共56页Strlen()Strlen()与与sizeof()sizeo
40、f()的区别的区别第46页/共56页 将字符数组定义为一个字符将字符数组定义为一个字符 混淆混淆cc和和”c”c”的意义的意义 字符数组整体输入时用取地址符号是不对的字符数组整体输入时用取地址符号是不对的 在实际应用中,字符数组,在使用前先格式化。调用函数在实际应用中,字符数组,在使用前先格式化。调用函数memset.memset.char a100;char a100;memset(a,0,sizeof(a);memset(a,0,sizeof(a);第47页/共56页 字符数组可以通过数组名进行整体引用字符数组可以通过数组名进行整体引用 C C语言没有字符串类型数据,字符串的操作通过一维字
41、符数组实现语言没有字符串类型数据,字符串的操作通过一维字符数组实现 C C语言规定以语言规定以00作为字符串结束标志作为字符串结束标志 字符数组的输入输出分别可使用字符数组的输入输出分别可使用getchar()/scanf()/gets()getchar()/scanf()/gets()和和putchar()/printf()/putsputchar()/printf()/puts()()%c%s%c%s第48页/共56页1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组以及后面将要介绍的指针数组,结构数组等。2.数组可以是一维的,二维的或多维的。3.数组类型
42、说明由类型说明符、数组名、数组长度(数组元素个数)三部分组成。数组元素又称为下标变量。数组的类型是指下标变量取值的类型。4.对数组的赋值可以用数组初始化赋值,输入函数动态赋值和赋值语句赋值三种方法实现。对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语句逐个对数组元素进行操作。第49页/共56页小结(续)常见错误1、数组下标越界.inta10;a10=0;.第50页/共56页小结(续)常见错误2、数组整体赋值.inta10;a=0;.第51页/共56页小结(续)常见错误3、接收字符串时用了取地址符.charst30;scanf(“%s”,&st);.第52页/共56页小结(续)常见错
43、误4、向一个字符数组赋字符串#include#includevoidmain()voidmain()charst30;charst30;st=china;st=china;puts(st);puts(st);#include#includevoidmain()voidmain()charst30=china;charst30=china;puts(st);puts(st);第53页/共56页1 1、数组的定义、数组的定义一维数组:一维数组:类型说明符类型说明符 数组名数组名 下标下标 二维数组:二维数组:类型说明符类型说明符数组名数组名 下标下标下标下标 字符数组:字符数组:charchar数组名数组名 下标下标 2 2、数组的使用、数组的使用先定义先定义赋初值(部分赋值,全部赋值)赋初值(部分赋值,全部赋值)后使用后使用3 3、常用的字符串函数包含在头文件、常用的字符串函数包含在头文件(stdio.h(stdio.hstring.h)string.h)第54页/共56页谢谢!第55页/共56页感谢您的观看!第56页/共56页