




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 教学内容教学内容: : 10.1 10.1 数组的概念数组的概念 10.2 10.2 一维数组一维数组 10.3 10.3 多维数组多维数组 10.4 10.4 字符数组与字符串字符数组与字符串 10.5 10.5 字符串处理函数字符串处理函数 10.6 10.6 数组作为函数参数数组作为函数参数第第10 10 章章 数组与字符串处理数组与字符串处理 教学要求教学要求: : 1 1掌握数组的定义,及其数组元素的下标掌握数组的定义,及其数组元素的下标表示方法。表示方法。 2 2掌握数组的初始化方法。掌握数组元素掌握数组的初始化方法。掌握数组元素的引用,数组数据输入的引用,数组数据输入/ /输出
2、方法。输出方法。 3 3掌握数组在程序设计中的应用,以及有掌握数组在程序设计中的应用,以及有关的算法,例如排序算法等。关的算法,例如排序算法等。 4 4掌握字符数组的应用方法。掌握字符数组的应用方法。 5 5掌握字符串处理函数的使用。掌握字符串处理函数的使用。第第10 10 章章 数组与字符串处理数组与字符串处理 数组数组是最简单的一种构造类型。是最简单的一种构造类型。 构造类型构造类型是由基本类型按一定规则构造而成的,一是由基本类型按一定规则构造而成的,一个构造类型数据可以分解为多个构造元素,这些元素可个构造类型数据可以分解为多个构造元素,这些元素可以是基本类型,也可以是构造类型。以是基本类
3、型,也可以是构造类型。 一个数组可以分解为多个数组元素,这些数组元素一个数组可以分解为多个数组元素,这些数组元素可以是基本类型或是构造类型。可以是基本类型或是构造类型。 按数组元素的类型不同,数组又可分为按数组元素的类型不同,数组又可分为数值数组数值数组、字符数组字符数组、指针数组指针数组、结构数组结构数组等各种类别。等各种类别。 10.1 10.1 数数 组组 的的 概概 念念 在实际应用中,人们不可避免的要遇到在实际应用中,人们不可避免的要遇到“批量数据的批量数据的存储和处理存储和处理”问题。问题。 例如:在学生成绩管理系统中,可能需要对一个班例如:在学生成绩管理系统中,可能需要对一个班
4、30 30 名学生的成绩进行输入,计算出平均分,然后输出所有高名学生的成绩进行输入,计算出平均分,然后输出所有高于平均分的成绩。于平均分的成绩。 为了便于处理,对于这样一组有着内在联系、具有相为了便于处理,对于这样一组有着内在联系、具有相同性质的数据,可以按顺序组织起来,共用一个统一的名同性质的数据,可以按顺序组织起来,共用一个统一的名字,即:数组名。字,即:数组名。数组中各个数据的区分用数组名带下标数组中各个数据的区分用数组名带下标的形式表示。的形式表示。 我们可以为我们可以为 30 30 名学生的成绩建立一个名为名学生的成绩建立一个名为 s s 的数组,的数组,30 30 个成绩顺序存放在
5、个成绩顺序存放在 s0s0s29s29这这 30 30 个带下标的变量个带下标的变量中,中, 1 1一维数组的定义一维数组的定义 定义的语句形式:定义的语句形式: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式 (1 1)“数据类型数据类型”是指数组元素的数据类型。是指数组元素的数据类型。 (2 2) 数组名定名规则和变量名相同。数组名定名规则和变量名相同。 (3 3) 常量表达式常量表达式, , 必须用方括号括起来。它是一必须用方括号括起来。它是一个整型值个整型值, , 指定数组元素的个数,即数组的长度。指定数组元素的个数,即数组的长度。 常量表达式其中可以包含常数和符号常量,但不
6、能常量表达式其中可以包含常数和符号常量,但不能包含变量。包含变量。 10.2 10.2 一一 维维 数数 组组 例如例如: : int a10; 上述说明语句,定义了一个上述说明语句,定义了一个整型一维数组。整型一维数组。 数组名称:数组名称:a ,有有1010个数组元素;系统分配个数组元素;系统分配1010个个连连续的存储单元续的存储单元。 数组的数组的数据类型是:数据类型是:int 每一个数组元素的存储单每一个数组元素的存储单元占用元占用2 2个字节个字节, , 存放一个整型值。存放一个整型值。 (4)(4) 数组元素的下标,是元素相对于数组起始地址的数组元素的下标,是元素相对于数组起始地
7、址的偏移量,所以从偏移量,所以从0 0开始顺序编号。开始顺序编号。 上述上述数组的数组的数组元素为:数组元素为: a0, a1, a2, a9,没有没有a10a10。 (5 5)数组名表示的是一个地址常量,它代表整个数组数组名表示的是一个地址常量,它代表整个数组的首地址。同一数组中的所有元素按其下标顺序占用一段的首地址。同一数组中的所有元素按其下标顺序占用一段连续的存储单元连续的存储单元. . a 表示数组起始地址表示数组起始地址 & &a0 表示第表示第1 1个数组元素的地址,个数组元素的地址, 与数组起始地址相同与数组起始地址相同 & &a1 表示第表示第2
8、 2个数组元素的地址,个数组元素的地址, 等于:第等于:第1 1个数组元素的地址个数组元素的地址2 2 (6)6) 不允许对数组进行动态定义。以下作法是错误的不允许对数组进行动态定义。以下作法是错误的。 int n; scanf(“%d”,&n); int an; (7)(7) 数组数组说明语句说明语句一次可定义几个数组一次可定义几个数组, , 形式如下:形式如下: 数据类型数据类型 数组名数组名 常量表达式常量表达式, , 数组名数组名22常量表达常量表达式式22 ; 例如:例如: int a1 4 , a2 5 ; 上述说明语句,定义了上述说明语句,定义了两个整型一维数组。两个整型
9、一维数组。 数组名为数组名为:, a2 a1 一维数组有一维数组有4个数组元素个数组元素: a10, a11, a12, a13 a2 一维数组有一维数组有5个数组元素个数组元素: a20, a21, a22, a23 , a24 数组元素的数值类型均为:数组元素的数值类型均为: 整型(整型(int ) a1, a2, 分别代表各自数组的起始地址分别代表各自数组的起始地址 &a10 &a11 &a12 &a13 为各数组元素的地址为各数组元素的地址 2. 数组元素的引用数组元素的引用 引用数组元素的形式:引用数组元素的形式: 数组名数组名下标表达式下标表达式 (
10、1)(1) “ “下标表达式下标表达式”可以是任何非负整型数据,取值范围可以是任何非负整型数据,取值范围是是0(元素个数(元素个数-1)。)。 int a8; 数组元数:数组元数:a0 a7 (2) (2)在在C语言中,数组作为语言中,数组作为1个整体,不能参加数据运算,个整体,不能参加数据运算,只能对单个的元素进行处理。只能对单个的元素进行处理。 (3)(3)下标不能越界。下标不能越界。 (4)(4)下标变量和我们前面的简单变量具有相同的地位和作下标变量和我们前面的简单变量具有相同的地位和作用,可以象使用简单变量一样使用。用,可以象使用简单变量一样使用。例例10.1数组元素的引用。数组元素的
11、引用。 main() int i,a10; for(i=0;i=0;i-) printf(%d,ai); 本例中第一个循环语句给本例中第一个循环语句给a a数组各元素赋值,然后用第二数组各元素赋值,然后用第二个循环语句,输出数组元素个循环语句,输出数组元素a9 a0的的各个数值。各个数值。 输出结果输出结果: 9 8 7 6 5 4 3 2 1 0数组元素引用数组元素引用可以用变量可以用变量 定义数组,定义数组,元素个数不元素个数不能用变量能用变量例例10.2 数组元素引用数组元素引用main( ) int a4; float b3; a0=3; a1=4; a2=a1*14; a3=23;
12、scanf(“%f%f%f”,&b0,&b1,&b2); printf( “%6d%6d”,a0,a1); printf( “%6d%6n”,a2,a3); printf( “%f%f%fn”,b2,b1,b0); 3 4 56 23a0 a1 a2 a3a 定义数组,定义数组, 元素个数元素个数 不能用变量不能用变量 说明:说明: (1)根据存储类型的不同,数组有根据存储类型的不同,数组有静态数组静态数组(static)和和动态数组动态数组(auto)之分;)之分; (2)根据定义的位置不同根据定义的位置不同:在函数内部定义的数组,称为在函数内部定义的数组,称为内部数
13、组内部数组。在函数外部定义的数组,称为在函数外部定义的数组,称为外部数组外部数组。 (3)赋值语句和输入语句均可使数组中的元素赋初值,赋值语句和输入语句均可使数组中的元素赋初值,但占用运行时间。但占用运行时间。 简捷的方法是在程序运行之前使数组初始化。简捷的方法是在程序运行之前使数组初始化。 3. 一维数组元素的初始化维数组元素的初始化格式格式 数据类型数据类型 数组名数组名常量表达式常量表达式初值表初值表; (1 1)只给部分元素赋初值。当只给部分元素赋初值。当 中值的个数少于中值的个数少于元素个数时,只给前面部分元素赋值。元素个数时,只给前面部分元素赋值。 例如:例如: int a10=0
14、,1,2,3,4; 表示只给表示只给a0a45个元素赋值,而后个元素赋值,而后5个元素自个元素自动赋动赋0值。值。 (2 2)只能给元素逐个赋值,不能给数组整体赋值。只能给元素逐个赋值,不能给数组整体赋值。 例如给十个元素全部赋例如给十个元素全部赋1值,只能写为:值,只能写为: int a10=1,1,1,1,1,1,1,1,1,1; 而不能写为:而不能写为:int a10=1;(3 3)如不给数组赋初值,则元素值不确定,对于如不给数组赋初值,则元素值不确定,对于static型的数组,系统会自动赋以型的数组,系统会自动赋以0或或0。(4 4)如给全部元素赋值,则在数组说明中,可以不给如给全部元
15、素赋值,则在数组说明中,可以不给出数组元素的个数,编译系统根据初值个数确定数组长出数组元素的个数,编译系统根据初值个数确定数组长度。度。 例如:例如: int a5=1,2,3,4,5; 可写为:可写为: int a=1,2,3,4,5; (5 5)若花括弧中提供的初值个数大于数组长度,则按若花括弧中提供的初值个数大于数组长度,则按语法错误处理。语法错误处理。例例10.3 求数组中求数组中8个数的最大值个数的最大值# include main( ) int i, max, a8=2, 5, 9, 6, 35, 7, 67, 49; for ( i=0; i8; i+) printf(“%6d”
16、,ai); printf( “n”); max=a0; for ( i=1; imax ) max=ai; printf( “max=%dn”,max); 例例10.4 求求Fibonaci数列的前数列的前20项项 #include main() int i, fb20; fb0=1; fb1=1; for( i=1; i19; i+)fbi+1 = fbi+fbi-1; for( i=0; ia2a1a2,则,则交换;然后比较第二个数与第三个数;依次类推,直至第交换;然后比较第二个数与第三个数;依次类推,直至第9 9个数和第个数和第1010个数比较为止个数比较为止第一趟冒泡排序,结果最第一趟
17、冒泡排序,结果最大的数被安置在最后一个元素位置上。大的数被安置在最后一个元素位置上。(2 2)对前对前9 9个数进行第二趟冒泡排序,结果使次大的数被个数进行第二趟冒泡排序,结果使次大的数被安置在第安置在第9 9个元素位置。个元素位置。(3 3)重复上述过程,共经过重复上述过程,共经过9 9趟冒泡排序后,排序结束趟冒泡排序后,排序结束。 例例10.5用冒泡法对个数由小到大排序。排序的用冒泡法对个数由小到大排序。排序的N-S图如图图如图10.2所示。所示。输入输入1010个数给个数给a1 a1 到到 a10a10for (j=1; j=9;j+) for(i=1;i ai+1 图图 10.2mai
18、n( ) int i, j, t, a11; printf(“input 10 numbers :n”); for ( i=1; i11; i+ ) scanf( “%d”,&ai ); printf(“n”); for ( j=1; j=9; j+) for ( i=1; iai+1 ) t=ai; ai=ai+1; ai+1= t; printf(“the sorted numbers :n”); for (i=1; i11; i+) printf(“%d”,ai);10.3 10.3 多多 维维 数数 组组 1. 二维数组的定义二维数组的定义 (1 1)语句形式语句形式: : 类
19、型说明符类型说明符 数组名数组名 常量表达式常量表达式1 1 常量表达式常量表达式22 例如:例如:float a34; 定义定义a是一个是一个3x4 (3行行4列列)的数组,即的数组,即a数组有数组有12个元素。个元素。但不得写成:但不得写成:float a3,4; (2)(2) 二维数组中元素的排列顺序为按行按列。即存放完二维数组中元素的排列顺序为按行按列。即存放完第第1 行的元素后再接着存放第行的元素后再接着存放第 2 行的元素,依次类推。行的元素,依次类推。 a00 a01 a03 a03 a10 a11 a12 a13 a20 a21 a22 a23 我们可把二维数组看作是一种特殊的
20、一维数组,它的我们可把二维数组看作是一种特殊的一维数组,它的元素又是一个一维数组。元素又是一个一维数组。例如:例如:a34可看成可看成 a0-a00 a01 a02 a03 a a1-a10 a11 a12 a13 a2-a20 a21 a22 a23a0 a2每个元素又是一个包含每个元素又是一个包含4个元素的个元素的一维数组。维数组。数组名数组名: a 代表整个数组的首地址代表整个数组的首地址a 0:数组第:数组第0行的首地址行的首地址 即第即第1个元素地址个元素地址&a00a 1:数组第数组第1行的首地址行的首地址 即第即第5个元素地址个元素地址&a10a 2:数组第数组第
21、2行的首地址行的首地址 即第即第9个元素地址个元素地址&a20(3)(3)C C允许定义多维数组。允许定义多维数组。例如:例如:float a345; 2. 二维数组元素的引用形式为:维数组元素的引用形式为:数组名数组名行下标表达式行下标表达式列下标表达式列下标表达式(1) “行下标表达式行下标表达式”和和“列下标表达式列下标表达式”,都应是整,都应是整型表达式或符号常量。型表达式或符号常量。(2) “行下标表达式行下标表达式”和和“列下标表达式列下标表达式”的值,都应的值,都应在已定义数组大小的范围内。在已定义数组大小的范围内。假设有数组假设有数组x34,则可用的行下标范围为,则可用
22、的行下标范围为02,列下,列下标范围为标范围为03。(3) 对基本数据类型的变量所能进行的操作,也都适合对基本数据类型的变量所能进行的操作,也都适合于相同数据类型的于相同数据类型的二维数组元素。维数组元素。 3. 二维数组的初始化二维数组的初始化 (1)(1) 按行给二维数组赋初值。如按行给二维数组赋初值。如: static int a34 =1,2,3,4,5,6,7,8,9,10,11,12; 这种方法比较直观,一行对一行,不易遗漏,易于检查。这种方法比较直观,一行对一行,不易遗漏,易于检查。 (2)(2) 顺序按行按列给二维数组赋初值顺序按行按列给二维数组赋初值。如:。如: static
23、 int a34=1,2,3,4,5,6,7,8,9,10,11,12; (3) 可以对部分元素赋初值可以对部分元素赋初值。如:。如: static int a34=1,5,9; static int a34=1,0,6,0,0,11; static int a34=1,5,6; static int a34=1, ,9; 注意:所赋给的值是按行按列对号入座的。注意:所赋给的值是按行按列对号入座的。 (4) 对二维数组的全部元素赋初值时,可以不指定第对二维数组的全部元素赋初值时,可以不指定第一维的长度,但不得省去第二维的长度。一维的长度,但不得省去第二维的长度。如:如: static int
24、a34=1,2,3,4,5,6,7,8,9,10,11,12; 可以写成:可以写成: static int a 4=1,2,3,4,5,6,7,8,9,10,11,12; 同样,同样, static int a 4=0,0,3, ,0,10; 也是正确的。也是正确的。 例例10.6 给一个给一个23的的2维数组各元素赋值,并输出全部维数组各元素赋值,并输出全部元素的值。元素的值。 #include stdio.h main() int i, j, a23;/*定义数组定义数组array*/ for( i=0; i2; i+ ) /*外循环控制行数外循环控制行数*/ for( j=0; j3;
25、j+) /*内循环控制列数内循环控制列数*/ scanf( “%d”, &aij ); printf(n); for( i=0;i2;i+ ) for( j=0;j3;j+ ) printf( %dt,arrayij ); printf(n); 例10.7 输出一个输出一个3 4数组中每行中的最大元素之值及其位置。数组中每行中的最大元素之值及其位置。main( ) int i, j, c, max ; static int a34=6,-5,11,3,8,9,4,7,2,13,1,-10; for (i=0; i=2; i+) max=a i0; c=0; for ( j=0; jma
26、x) max=ai j; c=j; printf(“max=%2d,row=%d,colum=%dn”,max,i+1,c+1); 输出结果输出结果: max=11, row=1, colum=3 max= 9, row=2, colum=2 max=13, row=3, colum=2 1 1字符数组的定义字符数组的定义 一维字符数组一维字符数组,用于存储和处理用于存储和处理1 1个字符串,其定义个字符串,其定义格式与格式与1 1维数值数组一样。维数值数组一样。 二维字符数组二维字符数组,用于同时存储和处理多个字符串,用于同时存储和处理多个字符串,其定义格式与其定义格式与2 2维数值数组一样
27、。维数值数组一样。 char s18, s2312; 2 2字符数组的初始化字符数组的初始化 字符数组的初始化,可以通过为每个数组元素指定字符数组的初始化,可以通过为每个数组元素指定初值字符来实现。例如:初值字符来实现。例如: char s38= ” asdfggh ” ; 10.4 10.4 字符数组与字符串字符数组与字符串char s48= a, b, c, d, e ; static char d33 = , , , , ,;3字符串及其结束标志字符串及其结束标志 字符串,是指若干有效字符的序列。字符串,是指若干有效字符的序列。 C C语言中的字符串,可以包括字母、数字、专用语言中的字符
28、串,可以包括字母、数字、专用字符、转义字符等。字符、转义字符等。 C C语言规定:以语言规定:以 0 作为字符串作为字符串结束标志结束标志 。 0 代表代表ASCIIASCII码为码为0 0的字符,表示一个空操作,的字符,表示一个空操作,只起一个标志作用。只起一个标志作用。 在在 0 前面的字符的个数为该字符串的有效长前面的字符的个数为该字符串的有效长度。度。 说明:说明: 由于系统在存储字符串常量时,会在串尾自动由于系统在存储字符串常量时,会在串尾自动加上加上1 1个结束标志,所以无需人为地再加个结束标志,所以无需人为地再加1 1个。个。 结束标志在字符数组中也要结束标志在字符数组中也要占用
29、一个元素占用一个元素的存的存储空间,因此在说明字符数组长度时,至少为字符储空间,因此在说明字符数组长度时,至少为字符串所需长度加串所需长度加1 1。 字符数组并不要求它的最后一定要加字符数组并不要求它的最后一定要加00。是否加是否加00,完全视需要而定。,完全视需要而定。 4.字符数组的输入输出字符数组的输入输出 (1 1)用用“%c”格式符逐个的输入或输出字符数组的字符。格式符逐个的输入或输出字符数组的字符。 for(i=0;i11;i+) scanf( %s, ai ); for(i=0;i11;i+) printf( %c,ai ); 输出数组单个元素的数值,要指出元素的下标。输出数组单
30、个元素的数值,要指出元素的下标。 (2 2)用用“%s”格式符将整个字符串一次输入或输出。格式符将整个字符串一次输入或输出。 printf(“%s”,c); 中中c是字符数组名,不是数组元素名。是字符数组名,不是数组元素名。 scanf( %s, ai ); 输入或输出时输入或输出时, ,并不输入或输出结束符并不输入或输出结束符00。 (3)字符数组的输出字符数组的输出 在用在用printf函数输出字符串时,当遇到函数输出字符串时,当遇到00时就停止输出,时就停止输出,系统不输出字符的定界符。系统不输出字符的定界符。 如果字符数组的长度大于字符串的实际长度,也只输出到如果字符数组的长度大于字符
31、串的实际长度,也只输出到0为止。为止。 如果字符数组中有多个如果字符数组中有多个0 ,则遇到第一个,则遇到第一个0时停止输时停止输出。出。 puts( )函数将一个以函数将一个以0结束的字符串输出到终端,结束的字符串输出到终端,且字符串中可以包含转义字符。如:且字符串中可以包含转义字符。如: static char str = “ChinanBeijing”; puts(str); 输出输出: China Beijing (4 4)字符数组的输入字符数组的输入 scanf( “%s”,c ); ; c为字符数组名,输入一个字符串,为字符数组名,输入一个字符串,以回车键而不必以结束符以回车键而不
32、必以结束符00结束输入,系统会自动加结束输入,系统会自动加上一个结束符上一个结束符00。 同时字符数组名同时字符数组名 c 前也不再加地址符前也不再加地址符& &。 若用一个若用一个scanf 函数输入多个字符串,则以空格作为函数输入多个字符串,则以空格作为字符串之间的分隔。字符串之间的分隔。 函数:函数:gets( (字符数组字符数组) ) 功能:从标准输入设备功能:从标准输入设备( (stdin) )键盘上,读取键盘上,读取1 1个字符个字符串(可以包含空格),并将其存储到字符数组中串(可以包含空格),并将其存储到字符数组中 例例10.8 多种方法输入输出字符串多种方法输入
33、输出字符串 #includemain() char str112, str212, str312; int i; for(i=0;i12;i+)scanf(%c,&str2i); for(i=0;i12;i+)printf(%c,str2i); scanf(%s,str3); printf(%s,str3); gets(str1); puts(str1); 例例10.9 二维字符数组的改变二维字符数组的改变#include #include main() int i; char a74=sun,mon,tue,wed, thu,wen,sat; printf(Result is:n);
34、 a03=& a23=& a53=& for ( i=0; i=a&c=A&c=Z) return(1); else return(0); main() int i,num=0; char str255; printf(Input a string: ); gets(str); for(i=0;stri!=0;i+) if ( isalp(stri) ) num+; puts(str); printf(num=%dn,num); getch(); 3 3拷贝字符串拷贝字符串 strcpy()函数函数(1 1)调用方式:调用方式:strcpy( (字符数组
35、字符数组, , 字符串字符串) ) 其中其中“字符串字符串”可以是串常量或字符数组。可以是串常量或字符数组。(2 2)函数功能:将函数功能:将“字符串字符串”完整地复制到完整地复制到“字符数字符数组组”中,字符数组中原有内容被覆盖。中,字符数组中原有内容被覆盖。(3 3)使用说明使用说明1 1)字符数组必须定义得足够大,以便容纳复制过来的)字符数组必须定义得足够大,以便容纳复制过来的字符串。连同结束标志字符串。连同结束标志00一起复制。一起复制。2 2)不能用赋值运算符)不能用赋值运算符“”将一个字符串直接赋值给将一个字符串直接赋值给一个字符数组,只能用一个字符数组,只能用strcpy()函数
36、来处理。函数来处理。#include main( ) int i; char name16=pear; char name213=Apple&Banana; printf(Result is:n); printf(1:name1-%sn, name1); printf(2:name2-%sn, name2); strcpy(name2,name1); printf (“3:name1-%sn, name1); printf (“4:name2-%sn, name2); printf (“5:name1-); for (i=0;i=11;i+) printf(%c,name2i); 例例
37、10.11 10.11 字符拷贝函数字符拷贝函数 strcpy ()进行字符串复制进行字符串复制 将将name1中的中的字符串连同字符串连同0一一 起复制到起复制到name2 复复制制后后Name1 p e ar 0Name2 P e ar& B a n an a 00Name1 p e ar 0Name2A p pl& B a n an a 0e复复制制前前运行结果如下运行结果如下:Result is:1:name1-pear2:name2-Apple&Banana3:name1-pear4:name2-pear5:name1- pear &Banana 4连
38、接字符串连接字符串strcat()()函数函数(1 1)调用方式:调用方式:strcat(字符数组字符数组, , 字符串字符串) )(2 2)函数功能:函数功能: 把把“字符串字符串”连接到连接到“字符数组字符数组”中的字符串尾端,中的字符串尾端,并存储于并存储于“字符数组字符数组”中。中。“字符数组字符数组”中原来的结束标中原来的结束标志,被志,被“字符串字符串”的第一个字符覆盖,而的第一个字符覆盖,而“字符串字符串”在操在操作中未被修改。作中未被修改。(3 3)使用说明使用说明: : 1 1)由于没有边界检查,要保证)由于没有边界检查,要保证“字符数组字符数组”定义得定义得足够大,以便容纳
39、连接后的目标字符串足够大,以便容纳连接后的目标字符串 2 2)连接前两个字符串都有结束标志)连接前两个字符串都有结束标志00,连接后,连接后“字符数组字符数组”中存储的字符串的结束标志中存储的字符串的结束标志00被舍弃,只被舍弃,只在目标串的最后保留一个在目标串的最后保留一个00。例例10.12 字符串连接。字符串连接。#include main() int i; char name113=pear; char name26=apple; printf(Result is:n); printf(1-%sn,name1); strcat(name1,name2); printf(2-%sn,na
40、me1); for (i=0; name1i!=0 ;i+)printf(%c,name1i); Name1 P e a r0l0 Name2 A p pe Name1 P e a rp p l e 0A运行结果:运行结果:Result is:1-pear2-PearApplePearApple5字符串比较字符串比较strcmp()()函数函数(1 1)调用方式:调用方式:strcmp( (字符串字符串1 ,1 ,字符串字符串2)2)其中其中“字符串字符串”可以是串常量,也可以是可以是串常量,也可以是1 1维字符数组。维字符数组。(2 2)函数功能:比较两个字符串的大小。函数功能:比较两个字符
41、串的大小。如果:字符串如果:字符串1= =1= =字符串字符串2 2,函数返回值等于,函数返回值等于0 0; 字符串字符串111字符串字符串2 2,函数返回值正整数。,函数返回值正整数。(3 3)使用说明使用说明1 1)如果一个字符串是另一个字符串从头开始的子串,则)如果一个字符串是另一个字符串从头开始的子串,则母串为大。母串为大。2 2)不能使用关系运算符)不能使用关系运算符“”来比较两个字符串,只来比较两个字符串,只能用能用strcmp() 函数来处理。函数来处理。例例10.13 gets 函数和函数和 strcmp 函数的应用。函数的应用。#include stdio.hmain() c
42、har passstr80; int i=0; while(1) clrscr(); printf(请输入密码请输入密码n); gets(passstr); /*输入密码输入密码*/ if (strcmp(passstr,“password”)!=0) printf(口令错误,按任意键继续口令错误,按任意键继续); else break; /*输入正确的密码,中止循环输入正确的密码,中止循环*/ getch(); i+; if(i=3) exit(0); /*输入三次错误密码退出程序输入三次错误密码退出程序*/ fun(); /*输入正确密码所进入的程序段输入正确密码所进入的程序段*/ 字符串
43、长度函数字符串长度函数strlen 格式格式:strlen(字符数组字符数组) 作用:测试字符串长度作用:测试字符串长度 函数值:为字符串的实际长度,不包括函数值:为字符串的实际长度,不包括00在内。在内。 例如例如: strlen(“china”); 结果是结果是5。 若改成若改成: char str10=“china”; strlen(str); 结果也是结果也是5,不要误认为是,不要误认为是10或是或是6。 字符串小写函数字符串小写函数strlwr 格式:格式:strlwr(字符串字符串) 作用:将字符串的大写字母转换成小写字母。作用:将字符串的大写字母转换成小写字母。 请给出下面程序结
44、果。请给出下面程序结果。 main() char str1=CHINA; printf(n%s,strlwr(str1); 运行结果运行结果:china 字符串大写函数字符串大写函数strupr 格式格式:strupr(字符串字符串) 作用:将字符串中的小写字母转换成大写字母。作用:将字符串中的小写字母转换成大写字母。 1. 1.数组元素作函数参数数组元素作函数参数 用数组元素作实参时,由于数组元素与普通变用数组元素作实参时,由于数组元素与普通变量具有相同的地位和作用量具有相同的地位和作用; ; 对数组元素的处理是和普通变量一样的对数组元素的处理是和普通变量一样的。 10.6 10.6 数组作
45、为函数参数数组作为函数参数 例例10.14c 数组元素作为实参数组元素作为实参 #include float fun( float a,float b,float c); main() float b3; float ave; b0=21.3; b1=b0/3; b2=8.2; printf(b0=%4.1fn b1=%4.1fn” ,b0, b1); printf( b2=%4.1fn”, b2 ); ave=fun( b0, b1, b2 ); printf( ave=%4.1fn,ave); printf(b0=%4.1fnb1=%4.1fn”,b0,b1); printf( b2=%4
46、.1fn”,b2); getch(); 实参为数实参为数 组元素作组元素作 float fun(float a,float b,float c) float sum, aver; sum=a+b+c; a=a+5.5 b=b+5.5; c=c+5.5; aver=sum/3.0; printf( a=%4.1fn” ,a ); printf( b=%4.1fn” ,b ); printf( c=%4.1fn” ,c ); return (aver); 用数组元素作实用数组元素作实参时,只要数组类型参时,只要数组类型和函数的形参类型一和函数的形参类型一致即可,并不要求函致即可,并不要求函数的形参
47、也是下标变数的形参也是下标变量。量。 换句话说,对换句话说,对数组元素的处理是按数组元素的处理是按普通变量对待普通变量对待的。的。 2. 2. 数组名作函数参数数组名作函数参数 在用在用数组名作函数参数数组名作函数参数时,不是把实参数组的时,不是把实参数组的每一个元素的值都赋予形参数组的各个元素。每一个元素的值都赋予形参数组的各个元素。 因为实际上形参数组并不存在,编译系统不为因为实际上形参数组并不存在,编译系统不为形参数组分配内存。形参数组分配内存。因为数组名就是数组的首地址,所以在数组名因为数组名就是数组的首地址,所以在数组名作函数参数时是把实作函数参数时是把实参数组的首地址赋予形参数组参数组的首地址赋予形参数组名名(即地址传递)。(即地址传递)。使用说明:使用说明:(1 1)数组名作为函数的形参和实参数组名作为函数的形参和实参,应该在调用,应该在调用函数和被调用函数中分别定义数组,函数和被调用函数中分别定义数组,要求形参和相对应要求形参和相对应的实参都必须
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年设定初级审计复习目标试题及答案
- 审计师 岗位模拟试题及答案解析
- 知识题库-护士入职笔试题及答案
- 2025公司级员工安全培训考试试题及答案满分必刷
- 2024-2025工厂车间安全培训考试试题(新版)
- 2025年新职工入场安全培训考试试题答案黄金题型
- 道德法律与人生期末试卷B卷试题及答案
- 词汇学期末考试卷及答案
- 航空公司安全管理审核计划
- 2026年大学强基计划自主招生数学试卷试题及答案
- 敬畏生命-道德与法治市公开课一等奖省赛课微课金奖课件
- 多发伤救治及进展
- 光伏电站巡检记录表完整
- 中考数学一轮复习题型归纳课件专题16 与圆有关的计算(含答案)
- 专题03 根据音标写单词常考易错100题-译林版七年级上学期英语期末考点复习专项训练
- 编制气候可行性论证报告
- 地下水监测系统方案
- 美国次贷危机对中国经济的影响
- 养老院项目组织结构方案
- 基于单片机的光照度自动调节系统设计
- 电烤箱温度控制系统设计
评论
0/150
提交评论