(6)--第6章C语言程序设计数组.ppt
数组数组第六章第六章主要内容主要内容6.1 6.1 一维数组的定义和引用一维数组的定义和引用6.2 6.2 二维数组的定义和引用二维数组的定义和引用6.3 6.3 字符数组字符数组C语言程序设计C语言的数据类型数据类型数据类型构造类型构造类型指针类型指针类型空类型(空类型(voidvoid)枚举类型枚举类型枚举类型枚举类型数组类型数组类型数组类型数组类型结构体类型结构体类型结构体类型结构体类型共用体类型共用体类型共用体类型共用体类型基本类型基本类型整型(整型(整型(整型(shortshortshortshort、intintintint、longlonglonglong)字符型(字符型(字符型(字符型(charcharcharchar)实型(浮点型)实型(浮点型)实型(浮点型)实型(浮点型)单精度单精度单精度单精度(float)(float)(float)(float)双精度双精度双精度双精度(double)(double)C语言程序设计基本概念基本概念构造构造类型:是由基本型:是由基本类型的数据按一定型的数据按一定规则组成的,成的,因此它因此它们又被称又被称为“导出出类型型”。数数组:是有序数据的集合。例如一个班有:是有序数据的集合。例如一个班有30个学生,个学生,可以用可以用s1,s2,s3,s30表示表示30个学生的成个学生的成绩,s是数是数组名,下名,下标是学生序号。而在是学生序号。而在C语言里没有上下言里没有上下标,所以用方括号表示下所以用方括号表示下标,即,即s15表示表示s15特点特点:(1)数数组中的每一个元素都属于同一个数据中的每一个元素都属于同一个数据类型型 (2)用一个用一个统一的数一的数组名和下名和下标来唯一的确定数来唯一的确定数组 中的元素。中的元素。C语言程序设计1.1.一维数组的定义格式为:一维数组的定义格式为:类型说明符类型说明符 数组名常量表达式;数组名常量表达式;例如:例如:int a10;int a10;char c8 char c8;float x20,y4*M+1,w5;(Mfloat x20,y4*M+1,w5;(M是符号常量是符号常量)6.1.16.1.1一维数组的定义一维数组的定义C语言程序设计说明:说明:1.数组名定名规则和变量名相同,遵循标识符定名规数组名定名规则和变量名相同,遵循标识符定名规则。则。2.2.在定义数组时,需要指定数组中元素的个数,方括在定义数组时,需要指定数组中元素的个数,方括弧中的常量表达式用来表示元素的个数,即数组长度弧中的常量表达式用来表示元素的个数,即数组长度int a10;int a10;数组下标是从数组下标是从0 0开始的,开始的,a10a10的的1010个元素个元素a0,a1,a2,a3,a4,a5,a6,a7,a8,aa0,a1,a2,a3,a4,a5,a6,a7,a8,a9,9,不存在数组元素不存在数组元素a10a10。3.3.常量表达式中可以包括常量和符号常量,但不能包常量表达式中可以包括常量和符号常量,但不能包含变量。含变量。如:如:int a10;不能写成不能写成 int an;C语言程序设计2.2.一维数组在内存中的存放一维数组在内存中的存放(数组是连续存放的数组是连续存放的)每个数据元素占用的每个数据元素占用的字节数,就是基本类字节数,就是基本类型的字节数型的字节数一个元素占一个元素占2个字节个字节一维数组:一维数组:short xshort x 5 5;假设起始地址为假设起始地址为10001000 x0 x1x2x3x410001002100410061008数组的总字节数数组的总字节数=sizeof(基本类型基本类型)*数组元素的个数数组元素的个数 =sizeof(short)*5 =2*5=10C语言程序设计注意:注意:定义数组时用到的定义数组时用到的“数组名常量表达式数组名常量表达式”和引和引用数组元素时用到的用数组元素时用到的“数组名下标数组名下标”是有区别的。是有区别的。例如例如 int a10;int a10;t=a6;t=a6;6.1.2 6.1.2 一维数组元素的引用一维数组元素的引用1.1.数组元素的引用方式数组元素的引用方式数组名下标数组名下标下标可以是整型常量或整型表达式。下标可以是整型常量或整型表达式。例如例如:a0=a5+a7-a2*3注意:数组必须先定义后引用注意:数组必须先定义后引用而且只能逐个引用数组元素,而且只能逐个引用数组元素,不能一次引用整个数组不能一次引用整个数组C语言程序设计例例6.1:数组元素的引用:数组元素的引用#include void main()int i,a10;for(i=0;i=0;i-)printf(%d ,ai);printf(n);运行结果:运行结果:9 8 7 6 5 4 3 2 1 0 for(i=0;i=9;i+)运行结果:运行结果:0 1 2 3 4 5 6 7 8 9 C语言程序设计对数组元素初始化的实现方法:对数组元素初始化的实现方法:1.1.在定义数组时对数组元素赋以初值。在定义数组时对数组元素赋以初值。例如例如:int a:int a1010=0,1,2,3,4,5,6,7,8,9;=0,1,2,3,4,5,6,7,8,9;将数组元素的初值依次放在一对花括弧内。经过上面的将数组元素的初值依次放在一对花括弧内。经过上面的定义和初始化之后,定义和初始化之后,a a0 0=0=0,a a1 1=1=1,a a2 2=2=2,a a3 3=3=3,a a4 4=4=4,a a5 5=5=5,a a6 6=6=6,a a7 7=7=7,a a8 8=8=8,a a9 9=9=9。6.1.3 6.1.3 一维数组的初始化一维数组的初始化C语言程序设计 3.3.如果想使一个数组中全部元素值为如果想使一个数组中全部元素值为0 0,可以写成,可以写成:int a int a1010=0,0,0,0,0,0,0,0,0,0;=0,0,0,0,0,0,0,0,0,0;或或 int aint a1010=0;=0;不能写成:不能写成:int aint a1010=0*10;=0*10;2.2.可以只给一部分元素赋值。可以只给一部分元素赋值。例如例如:int a:int a1010=0=0,1 1,2 2,3 3,4;4;定义定义a a数组有数组有1010个元素,但花括弧内只提供个元素,但花括弧内只提供5 5个初值,个初值,这表示只给前面这表示只给前面5 5个元素赋初值,后个元素赋初值,后5 5个元素值为个元素值为0 0。C语言程序设计4.4.在对全部数组元素赋初值时在对全部数组元素赋初值时,由于数据的个数已,由于数据的个数已经确定,因此可以不指定数组长度。经确定,因此可以不指定数组长度。例如例如:int a:int a5 5=1=1,2 2,3 3,4 4,5;5;也可以写成也可以写成 int aint a=1=1,2 2,3 3,4 4,5;5;int a int a1010=1=1,2 2,3 3,4 4,5;5;只初始化前只初始化前5 5个个元素,后元素,后5 5个元素为个元素为0 0。C语言程序设计#include void main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);运行结果如下:运行结果如下:1 1 2 3 51 1 2 3 5 8 13 21 34 55 8 13 21 34 55 89 144 233 377 610 89 144 233 377 610 987 1597 2584 4181 6765 987 1597 2584 4181 6765例例6.2:用数组来处理求:用数组来处理求Fibonacci数列问题数列问题C语言程序设计 6.2 二维数组的定义和引用二维数组的定义和引用 6.2.16.2.1二维数组的定义二维数组的定义二维数组定义的一般形式为二维数组定义的一般形式为类型说明符类型说明符 数组名常量表达式常量表达式;数组名常量表达式常量表达式;例如:例如:float a34,b510float a34,b510;定义定义a为为34(3行行4列列)的数组,的数组,b为为510(5行行10列列)的的数组。数组。不能写成不能写成 float afloat a3 3,4 4,b b5 5,1010;C语言程序设计注意:注意:我们可以把二维数组看作是一种特殊的一维数我们可以把二维数组看作是一种特殊的一维数组,它的元素又是一个一维数组。组,它的元素又是一个一维数组。例如:例如:可以把可以把a看作是一个一维数组,它有看作是一个一维数组,它有3个元素:个元素:a0、a1、a2,每个元素又是一个包含,每个元素又是一个包含4个元素的一维数组。个元素的一维数组。C语言程序设计 6.2.1二维数组的定义二维数组的定义 二维数组中的元素在二维数组中的元素在内存中的存放顺序是:按内存中的存放顺序是:按行存放,即先顺序存放第行存放,即先顺序存放第一行的元素,再存放第二一行的元素,再存放第二行的元素行的元素 二二二二维数组在内存中的存放维数组在内存中的存放维数组在内存中的存放维数组在内存中的存放下图表示对下图表示对下图表示对下图表示对a34a34数组存数组存数组存数组存放的顺序放的顺序放的顺序放的顺序 C语言程序设计数组元素数组元素数组元素数组元素b00b00b01b01b02b02b10b10b11b11b12b12b20b20b21b21b22b22地址地址地址地址3000300030023002300430043003006 63008300830103010301230123014301430163016例如:例如:short b33=1,2,3,4,5,6,7,8,9;值值值值123456789C语言程序设计思考:思考:思考:思考:已知:已知:已知:已知:3 3行行行行4 4列整型数组中列整型数组中列整型数组中列整型数组中a00a00的起始地址为的起始地址为的起始地址为的起始地址为10001000,求,求,求,求a23a23的起始地址。的起始地址。的起始地址。的起始地址。Loc aij=Loc a00+(i*n+j)*kLoc aij=Loc a00+(i*n+j)*kLoc a23=Loc a00+(2*4+3)*2Loc a23=Loc a00+(2*4+3)*2 =1000+22 =1000+22 =1022 =1022i:数组元素的行下标数组元素的行下标j:数组元素的列下标数组元素的列下标n:二维数组的列数二维数组的列数k:每个数组元素所占的字节数每个数组元素所占的字节数C语言程序设计二维数组元素的表示形式为:二维数组元素的表示形式为:数组名下标下标数组名下标下标例如:例如:a23下标可以是整型表达式,如下标可以是整型表达式,如 a a2-12-12*2-12*2-1数组元素可以出现在表达式中,也可以被赋值数组元素可以出现在表达式中,也可以被赋值例如:例如:b12=a23/2b12=a23/2不要写成不要写成 a a2 2,3 3,a a2-12-1,2*2-12*2-1形式形式 6.2.2二维数组的引用二维数组的引用C语言程序设计常出现的错误有:常出现的错误有:int a34;/*/*定义定义a a为为3 34 4的数组的数组*/a34=3;在使用数组元素时,应该注意下标值应在已定义在使用数组元素时,应该注意下标值应在已定义的数组大小的范围内。的数组大小的范围内。C语言程序设计可以用下面可以用下面4 4种方法对二维数组初始化:种方法对二维数组初始化:.分行给二维数组赋初值。分行给二维数组赋初值。例如:例如:int aint a3 34 4=1=1,2 2,3 3,44,55,6 6,7 7,88,99,1010,1111,12;12;.可以将所有数据写在一个花括号内,按数组排列可以将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。的顺序对各元素赋初值。例如:例如:int aint a3 34 4=1=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;6.2.3 6.2.3二维数组的初始化二维数组的初始化C语言程序设计.可以对部分元素赋初值可以对部分元素赋初值例如:例如:int a34=1,5,9;1 0 0 01 0 0 05 0 0 0 5 0 0 0 9 0 0 0也可以对各行中的某一元素赋初值,如也可以对各行中的某一元素赋初值,如int a34=1,0,6,0,0,0,11;1 0 0 01 0 0 00 6 0 00 6 0 00 0 0 0 110 0 11 1 0 0 01 0 0 05 6 0 0 5 6 0 0 0 0 0 0也可以只对某几行元素赋初值。如:也可以只对某几行元素赋初值。如:int a34=1,5,6;C语言程序设计.如果对全部元素都赋初值如果对全部元素都赋初值,则定义数组时对第一维,则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。的长度可以不指定,但第二维的长度不能省。例如:例如:int a34=1int a34=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;它等价于:它等价于:int a4=1int a4=1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9,1010,1111,12;12;在定义时也可以只对部分元素赋初值而省略第一维的在定义时也可以只对部分元素赋初值而省略第一维的长度,但应分行赋初值。长度,但应分行赋初值。例如例如:int a4=0int a4=0,0 0,33,00,10;10;0 0 3 00 0 0 00 10 0 0C语言程序设计例如:例如:a=1 2 3 1 4a=1 2 3 1 4 4 5 6 b=2 5 4 5 6 b=2 5 3 6 3 6 6.2.4 6.2.4 二维数组程序举例二维数组程序举例 例例6.4 6.4 将一个二维数组行和列元素互换,存到另一个将一个二维数组行和列元素互换,存到另一个 二维数组中。二维数组中。bji=aija00 a01 a02a12a11a10a=b00 b01b11b21b20b10b=C语言程序设计#include void 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(%5d,aij);bji=aij;printf(n);printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);运行结果如下:运行结果如下:array a:array a:1 2 3 1 2 3 4 5 6 4 5 6array b:array b:1 4 1 4 2 5 2 5 3 6 6 C语言程序设计例例6.5:6.5:有一个有一个3 34 4的矩阵,要求编程序求出其中值最大的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。的那个元素的值,以及其所在的行号和列号。C语言程序设计#include void main()int i,j,row=0,colum=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;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);运行结果如下:运行结果如下:max=10,row=2,colum=1C语言程序设计for(i=0;i3;i+)sum=sum+aii;a33=a00 a01 a02a10 a11 a12a20 a21 a22习题习题6.3 6.3 求一个求一个3 33 3的整型矩阵对角线元素之和的整型矩阵对角线元素之和C语言程序设计#includevoid main()int a33,i,j,sum=0;for(i=0;i3;i+)for(j=0;j3;j+)scanf(“%d”,&aij);/*输入得到输入得到33矩阵矩阵*/for(i=0;i3;i+)sum=sum+aii;printf(“sum=%dn”,sum);运行结果如下运行结果如下:1 2 3 4 5 6 7 8 91 2 3 4 5 6 7 8 9sum=15sum=15sum=sum+a00+a11+a22;C语言程序设计习题习题6.6 6.6 输出以下的杨辉三角形输出以下的杨辉三角形(要求输出要求输出1010行行)11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 算法分析:算法分析:(1)各行第一个数都是各行第一个数都是1(ai0=1)(2)各行最后一个数都是各行最后一个数都是1(aii=1)(3)从第三行起从第三行起aij=ai-1j-1+ai-1jC语言程序设计#define N 10#includemain()int aNN,i,j;for(i=0;iN;i+)ai0=1;aii=1;for(i=2;iN;i+)for(j=1;j=i-1;j+)aij=ai-1j-1+ai-1j;for(i=0;iN;i+)for(j=0;j=i;j+)printf(%6d,aij);printf(n);11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1 C语言程序设计 6.3 字符数组字符数组 6.3.16.3.1字符数组的定义字符数组的定义定义方法与前面介绍的类似。例如:定义方法与前面介绍的类似。例如:char cchar c1010;c0=I;cc0=I;c1 1=;c=;c2 2=a;=a;c c3 3=m;c=m;c4 4=;c5=h;c6=a;c5=h;c6=a;c c7 7=p;c=p;c8 8=p;c=p;c9 9=y;=y;C语言程序设计对字符数组初始化,可逐个字符赋给数组中各元素。对字符数组初始化,可逐个字符赋给数组中各元素。例如:例如:char c10=I,a,m,h,a,p,p,y;6.3.2 6.3.2 字符数组的初始化字符数组的初始化C语言程序设计如果初值个数小于数组长度,则只将这些字符赋给数如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定为空字符。组中前面那些元素,其余的元素自动定为空字符。char c10=c,p,r,o,g,r,a,m;C语言程序设计如果提供的初值个数与预定的数组长度相同,在定义如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定时可以省略数组长度,系统会自动根据初值个数确定数组长度。数组长度。char cchar c=I,a,m,h,=I,a,m,h,a,p,p,y;a,p,p,y;数组数组c c的长度自动定为的长度自动定为1010。C语言程序设计 char diamondchar diamond5 55 5=,*,*,*,*,*,*,*,*定义和初始化一个二维字符数组定义和初始化一个二维字符数组 C语言程序设计 6.3.3 6.3.3 字符数组的引用字符数组的引用例例6.6 输输出一个字符串。出一个字符串。#include void main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(%c,ci);printf(n);运行结果:运行结果:I am a boy I am a boy C语言程序设计例例6.7 6.7 输出一个钻石图形输出一个钻石图形#include void main()char diamond55=,*,*,*,*,*,*,*,*;int i,j;for(i=0;i5;i+)for(j=0;j5;j+)printf(%c,diamondij);printf(n);运行结果运行结果 *C语言程序设计6.3.4 6.3.4 字符串和字符串结束标志字符串和字符串结束标志 为了测定字符串的实际长度,为了测定字符串的实际长度,C C语言规定了一语言规定了一个个“字符串结束标志字符串结束标志”00。char c5=C,h,i,n,a;char c=C,h,i,n,a;char c=C,h,i,n,a,0;char c=“China”;C语言程序设计6.3.5 6.3.5 字符数组的输入输出字符数组的输入输出 字符数组的输入输出可以有两种方法:字符数组的输入输出可以有两种方法:逐个字符输入输出。用格式符逐个字符输入输出。用格式符“%c%c”输入或输出一个输入或输出一个字符。字符。char c4;scanf(“%c%c%c%c”,&c0,&c1,&c2,&c3);printf(“%c%c%c%c”,c0,c1,c2,c3);将整个字符串一次输入或输出。用将整个字符串一次输入或输出。用“%s%s”格式符,意格式符,意思是对字符串的输入输出。思是对字符串的输入输出。C语言程序设计char cchar c6 6;scanf(scanf(“%s%s”,c);,c);输入:输入:Chinaprintf(printf(“%s%s”,c);,c);输出:输出:China例如例如在内存中数组c的状态C语言程序设计说明:说明:(1 1)用)用“%s%s”格式符输出字符串时,格式符输出字符串时,printfprintf函数中的函数中的输出项是字符数组名,而不是数组元素名。输出项是字符数组名,而不是数组元素名。(2 2)如果数组长度大于字符串实际长度,也只输出到)如果数组长度大于字符串实际长度,也只输出到遇遇00结束。结束。(3 3)输出字符不包括结束符)输出字符不包括结束符00。(4 4)如果一个字符数组中包含一个以上)如果一个字符数组中包含一个以上00,则,则遇第一个遇第一个00时输出就结束。时输出就结束。C语言程序设计 如果利用一个如果利用一个scanfscanf函数输入多个字符串,则在函数输入多个字符串,则在输入时以空格分隔。输入时以空格分隔。例如:例如:char strlchar strl5 5,str2str25 5,str3str35 5;scanf(%s%s%sscanf(%s%s%s,str1str1,str2str2,str3);str3);输入数据:输入数据:How are you?How are you?数组中未被赋值的元素的值自动置数组中未被赋值的元素的值自动置00。C语言程序设计设有定义:设有定义:char s81;int i=0;char s81;int i=0;以下不能将一行(不超过以下不能将一行(不超过8080个字符个字符带有空格的字符串正确读入的语句或语句组是带有空格的字符串正确读入的语句或语句组是A.gets(s);A.gets(s);B.while(si+=getchar()!=B.while(si+=getchar()!=nn););si=si=00;C.scanf(C.scanf(“%s%s”,s);,s);D.doD.do scanf(scanf(“%c%c”,&si);,&si);while(si+!=while(si+!=nn););si=si=00;用用scanfscanf输入字符串时,输入字符串时,遇空格结束输入遇空格结束输入C语言程序设计分析图中所示的字符数组分析图中所示的字符数组printf(%oprintf(%o,c);c);结果:结果:20002000printf(%sprintf(%s,c);c);结果:结果:ChinaChina注意:注意:scanfscanf函数中的输入项如果是字符数组名,不函数中的输入项如果是字符数组名,不要再加地址符要再加地址符&,因为在,因为在C C语言中数组名代表该数组的语言中数组名代表该数组的起始地址。下面写法不对:起始地址。下面写法不对:scanf(%s,&str);scanf(%s,str);C语言程序设计 6.3.6 6.3.6 字符串处理函数字符串处理函数 1.puts1.puts函数函数其一般形式为其一般形式为:puts(puts(字符数组名或字符串字符数组名或字符串)作用是将一个字符串作用是将一个字符串(以以00结束的字符序列结束的字符序列)输输出到终端。出到终端。char str=char str=“ChinaChina”;puts(str);printf(puts(str);printf(“%s%s”,str);,str);puts(puts(“ChinaChina”););其结果是在终端输出其结果是在终端输出ChinaChina。等价于等价于C语言程序设计用用putsputs函数输出的字符串中可以包含转义字符函数输出的字符串中可以包含转义字符例如:例如:char strchar str=ChinanBeijing;=ChinanBeijing;puts(str);puts(str);输出结果:输出结果:ChinaChinaBeijingBeijing C语言程序设计2.gets2.gets函数函数其一般形式为:其一般形式为:gets(gets(字符数组名字符数组名)其作用是从终端输入一个字符串到字符数组。其作用是从终端输入一个字符串到字符数组。如执行下面的函数:如执行下面的函数:gets(str)gets(str);scanf(scanf(“%s%s”,str);,str);从键盘输入:从键盘输入:ComputerComputer将输入的字符串将输入的字符串ComputerComputer送给字符送给字符数组数组strstr等价于等价于C语言程序设计注意:用注意:用putsputs和和getsgets函数只能输出或输入一个字符串,函数只能输出或输入一个字符串,不能写成不能写成puts(str1puts(str1,str2)str2)或或 gets(str1gets(str1,str2)str2)C语言程序设计3.strcat3.strcat函数函数(包含文件包含文件string.hstring.h)其一般形式为:其一般形式为:strcat(strcat(字符数组字符数组1 1,字符数组,字符数组2)2)strcat strcat的作用是连接两个字符数组中的字符的作用是连接两个字符数组中的字符串,把字符串串,把字符串2 2接到字符串接到字符串1 1的后面,结果放在字的后面,结果放在字符数组符数组1 1中。中。C语言程序设计例如:例如:char str130=Peoples Republic of ;char str2=China;printf(%s,strcat(str1,str2);输出:输出:Peoples Republic of China strcat(str1,str2);printf(“%s”,str1);C语言程序设计4.strcpy4.strcpy函数函数(包含文件包含文件string.h)其一般形式为:其一般形式为:strcpy(strcpy(字符数组字符数组1 1,字符串,字符串2)2)strcpystrcpy是是“字字符符串串复复制制函函数数”。作作用用是是将将字字符符串串2 2复复制到字符数组制到字符数组1 1中去。例如:中去。例如:char str1char str11010,str2str2=China;=China;strcpy(str1strcpy(str1,str2);str2);C语言程序设计关于关于strcpy函数的几点说明函数的几点说明(1 1)字符数组)字符数组1必须定义得足够大,以便容纳被必须定义得足够大,以便容纳被复制的字符串。字符数组复制的字符串。字符数组1的长度不应小于字符串的长度不应小于字符串2的长度。的长度。(2 2)“字字符符数数组组1 1”必必须须写写成成数数组组名名形形式式(如如str1)str1),“字字符符串串2 2”可可以以是是字字符符数数组组名名,也也可可以以是一个字符串常量。是一个字符串常量。如如:strcpy(str1,China);C语言程序设计(3 3)复复制制时时连连同同字字符符串串后后面面的的0一一起起复复制制到到字符数组字符数组1中。中。(4 4)可可以以用用strncpystrncpy函函数数将将字字符符串串2 2中中前前面面n n个个字字符符复复制制到到字字符符数数组组1 1中中去去。例例如如:strncpy(str1:strncpy(str1,str2str2,2);2);作作用用是是将将str2str2中中前前面面2 2个个字字符符复复制制到到str1str1中中去去,取代取代str1str1中原来的前中原来的前2 2个字符。个字符。例:例:char str1=char str1=“ChinaChina”;char str2=char str2=“HelloHello”;printf(printf(“%s%s”,strncpy(str1,str2,2);,strncpy(str1,str2,2);C语言程序设计(5 5)不不能能用用赋赋值值语语句句将将一一个个字字符符串串常常量量或或字字符符数数组组直接给一个字符数组。如:直接给一个字符数组。如:str1=China;str1=China;不合法不合法 str1=str2;str1=str2;不合法不合法用用strcpystrcpy函函数数只只能能将将一一个个字字符符串串复复制制到到另另一一个个字字符符数组中去。数组中去。用用赋赋值值语语句句只只能能将将一一个个字字符符赋赋给给一一个个字字符符型型变变量量或或字符数组元素。字符数组元素。C语言程序设计#includemain()char s120,s220;int i;gets(s2);for(i=0;i1字符串字符串2 2,函数值为一正整数。,函数值为一正整数。(3)(3)如果字符串如果字符串11str2)printf(yes);而只能用而只能用if(strcmp(str1,str2)0)printf(yes);例:例:if(strcmp(“China”,”Beijing”)0)printf(“OK”);C语言程序设计例例6.9 6.9 有有3 3个字符串个字符串,要求找出其中最大者要求找出其中最大者#include#includevoid main()char string20,str020,str120,str220;gets(str0);gets(str1);gets(str2);if(strcmp(str0,str1)0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);printf(the largest string is%sn,string);scanf(“%s”,str0);scanf(“%s”,str1);scanf(“%s”,str2);puts(string);运行结果如下运行结果如下:China Holland America the largest string is HollandC语言程序设计6.strlen函数函数(包含文件包含文件string.h)其一般形式为其一般形式为:strlen(字符数组字符数组)strlenstrlen是是测测试试字字符符串串长长度度的的函函数数。函函数数的的值值为为字字符符串串中中的实际长度的实际长度(不包括不包括00在内在内)。例如:例如:char strchar str1010=China;=China;printf(%d printf(%d,strlen(str);strlen(str);输输出出结结果果不不是是1010,也也不不是是6 6,而而是是5 5。也也可可以以直直接接测测试试字字符串常量的长度,如符串常量的长度,如strlen(China);注:注:sizeof()sizeof()数组和字符串所占字节数数组和字符串所占字节数 sizeof(str);strlen(str);sizeof(str);strlen(str);C语言程序设计若有定义和语句若有定义和语句char s110=abcd!,s2=n123;printf(%d%dn,strlen(s1),strlen(s2);则输出结果是则输出结果是A 5 5 B 10 5 C 10 7 D 5 8C语言程序设计C语言程序设计有以下程序有以下程序#include#include main()main()char s=char s=“012xy012xy”;int i,n=0;int i,n=0;for(i=0;si!=0;i+)for(i=0;si!=0;i+)if(si=if(si=a a&si=&si=z z)n+;n+;printf(printf(“%dn%dn”,n);,n);程序运行后的输出结果是程序运行后的输出结果是 A A)0 0 B B)2 2 C C)3 D3 D)5 5有以下定义语句,编译有以下定义语句,编译时会出现编译错误的是时会出现编译错误的是 A A)char a=char a=a a;B B)char a=char a=nn;C C)char a=char a=aaaa;D D)char char a=a=x2dx2d;C语言程序设计C语言程序设计#includemain()int i,a=2,3,5,4;for(i=0;i4;i+)switch(i%2)case 0:switch(ai%2)case 0:ai+;break;case 1:ai-;break;case 1:ai=0;for(i=0;i4;i+)printf(“%d ”,ai);printf(“n”);程序运行后的输出结果是程序运行后的输出结果是A 3 3 4 4 B 2 0 5 0 C 3 0 4 0 D 0 3 0 4