版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、本章要点本章要点1.1.建立数组的概念;建立数组的概念;2.2.掌握一维数组和二维数组的定义、援用、掌握一维数组和二维数组的定义、援用、存储结构和初始化方法;存储结构和初始化方法;3.3.掌握一维字符数组的输入输出;掌握一维字符数组的输入输出;4.4.掌握字符串处理函数的使用;掌握字符串处理函数的使用;5.5.掌握用数组进行编程的技术。掌握用数组进行编程的技术。 如何处理一个班学生的学习成绩?如何处理一个班学生的学习成绩? 一行文字怎样存储?一行文字怎样存储? 一个矩阵怎样存储一个矩阵怎样存储 ?.一组具有相同数据类型的数据的一组具有相同数据类型的数据的 有序集合有序集合 这些数据的特点:这些
2、数据的特点:1.1.具有相同的数据类型具有相同的数据类型 2.2.使用过程中需要保留原始数据使用过程中需要保留原始数据 C C语言为这些数据提供了一种构造数据类型:数组。语言为这些数据提供了一种构造数据类型:数组。 数组是一组有序的、类型相同的数据的集合,数组是一组有序的、类型相同的数据的集合,这些数据被称为数组的元素。这些数据被称为数组的元素。7.2 7.2 一维数组一维数组7.2.1 7.2.1 一维数组的定义和引用一维数组的定义和引用1.1.一维数组的定义一维数组的定义 类型说明符类型说明符 数组名数组名 正整型常量表达正整型常量表达式式 ; ;阐明:阐明:类型说明符:数组的类型。类型说
3、明符:数组的类型。数组名同变量名命名规则相同。数组名同变量名命名规则相同。常量表达式指明数组中元素个数,必须大于零。常量表达式指明数组中元素个数,必须大于零。可以是数值常量、符号常量和字符常量。可以是数值常量、符号常量和字符常量。例如:例如: float mark100;float mark100; char str200; char str200; int a10; int a10;其中:其中:markmark、strstr、a a 是数组名。是数组名。 方括号内是数组的长度。方括号内是数组的长度。 下标的个数称为数组的维数,下标的个数称为数组的维数,markmark、strstr是是一维数
4、组、一维数组、a a是二维数组。是二维数组。 数组的成员称为数组元素。数组的成员称为数组元素。 数组元素的类型称为该数组的基类型。数数组元素的类型称为该数组的基类型。数组组markmark的基类型是的基类型是floatfloat,数组,数组strstr的基类型是的基类型是charchar。例如:存储学生成绩用实型数组例如:存储学生成绩用实型数组 mark100mark100, 存储一行文字用字符数组存储一行文字用字符数组 str200str200, 存储一个存储一个4 4* *6 6的矩阵用二维整型数组的矩阵用二维整型数组 a46a46。阐明阐明: : (1) (1)数组名后是用方括号而不是圆
5、括号。数组名后是用方括号而不是圆括号。 (2)(2)数组定义中的常量表达式表示数组元素个数。必数组定义中的常量表达式表示数组元素个数。必须是大于零的常量。须是大于零的常量。 如:如: int a0,d(6); /int a0,d(6); /* *错误错误* */ / int b-8; / int b-8; /* *错误错误* */ / int c2+3; / int c2+3; /* *正确正确* */ /(3) (3) 语言中不允许对数组的大小作动态定义。语言中不允许对数组的大小作动态定义。 数组的说明语句必须在可执行语句之前。数组的说明语句必须在可执行语句之前。#define N 5int
6、 aN;int n;scanf(“%d” , &n ); int an;int n=10,an;2. 一维数组的引用一维数组的引用 C 语言规定,只能引用单个数组元素,不能一次引用整语言规定,只能引用单个数组元素,不能一次引用整个数组。个数组。 数组元素的引用形式:数组元素的引用形式: 数组名数组名 下标下标 如如a3下标可以是整型常量、整型变量或整型表达式。下标可以是整型常量、整型变量或整型表达式。 如:如: a3= a0 + ai+1; 下标的值是数组元素的序号,且从下标的值是数组元素的序号,且从0开始,直到开始,直到n-1. int a10, 说明数组说明数组a一共有一共有10个
7、元素,起始值是个元素,起始值是0。数组数组a的的10个元素分别是:个元素分别是:a0、a1、a9。注意区分数组的定义和数组元素的引用。注意区分数组的定义和数组元素的引用。数组的输入输出应采用循环的方法数组的输入输出应采用循环的方法. int a10; for ( i=0; i10; i+ ) scanf(”%d”, &ai); 下标指出在数组中第几个元素数组中的每个元素在功能上等价于一个一般的变量。数组中的每个元素在功能上等价于一个一般的变量。例如:输入例如:输入100100个学生成绩,并求出总成绩。个学生成绩,并求出总成绩。l 引用数组元素的注意事项引用数组元素的注意事项: :flo
8、at m100,sum=0;float m100,sum=0;for ( i=0; i100; i+ )for ( i=0; i100; i+ ) scanf(”%f”, &mi); scanf(”%f”, &mi); sum += mi; sum += mi; 数组方式数组方式float x, sum=0;float x, sum=0;for (i=0; i100; i+)for (i=0; i100; i+) scanf(”%f”, &x); scanf(”%f”, &x); sum += x; sum += x; 简单变量简单变量x xsumsum85m0
9、m1m2m99sumsum828563789063851488279501482263167950优点:数据重用优点:数据重用 数据有序数据有序mark0mark1mark2mark3.mark9986.592.077.552.0.94.02000H2019H2019H200CH。218CH引用数组元素时,根据首引用数组元素时,根据首地址和下标,自动计算出地址和下标,自动计算出该元素的实际地址,取出该元素的实际地址,取出该地址的内容进行操作。该地址的内容进行操作。如引用如引用 mark2:(1)计算计算 2000+2*4=2019(2)取出取出2019的内容的内容l下标与地址的关系下标与地址的
10、关系 为下标运算符为下标运算符, 数组名、数组名、数组元素是两种不同性质的数组元素是两种不同性质的数据。数据。 数组名是数组的首地址,数组名是数组的首地址,是一个地址常量。是一个地址常量。 数组元素则是数值。数组元素则是数值。方法:将初值依次写在花括号方法:将初值依次写在花括号 内。内。如:如: int a5= 2 , 4 , 6 , 8 , 10 ;存储形式:存储形式:存储单元存储单元 (1给数组中部分元素赋初值,其他元素按零值处理。给数组中部分元素赋初值,其他元素按零值处理。 如:如: int a9=1,2; 那么那么 a0= 1, a1= 2, a2a8值全为值全为0。(2) 对数组元素
11、全部赋值可以不指定长度。对数组元素全部赋值可以不指定长度。 int a=0,1,2,3,5 ;等价于:等价于:int a5=0,1,2,3,5 ; (4初值的个数不能超过数组总元素的个数。初值的个数不能超过数组总元素的个数。 int a3= 1, 2,3, 4 ; 语法错语法错!阐明:阐明:(3对数组中间元素赋值必须指明位置。对数组中间元素赋值必须指明位置。 int a5= , , 2,3, 4 ; /*对第对第3-5个元素赋初值个元素赋初值*/ 为个别元素赋值为个别元素赋值main() char as26; as0=a; .利用循环为全部元素赋值利用循环为全部元素赋值main() char
12、as26,ch; for(ch=A;ch=Z;ch+) asch-A=ch; .数组元素输出数组元素输出main() char as26; int i ; for(i=0; i26; i+) printf(%c,&asi); . 数组元素输入数组元素输入main() char as26; int i ; for(i=0; i26; i+) scanf(%c,&asi); . 例例1 1 从键盘上输入从键盘上输入1010个实型数存入数组,然个实型数存入数组,然 后按输入顺序的逆序输出这后按输入顺序的逆序输出这1010个数。个数。#include main() float a10;
13、 int i; for(i=0 ; i=0 ; i-) printf(%10.2f,ai); 数组的引用离不开循环。将数组的下标作为循环变量,通数组的引用离不开循环。将数组的下标作为循环变量,通过循环,就可以对数组的所有元素逐个进行处理。过循环,就可以对数组的所有元素逐个进行处理。 例例2 2 从键盘上输入从键盘上输入1010个数,求出其中最大值并输出。个数,求出其中最大值并输出。#include main() int a10,i,max; for(i=0 ; i10 ; i+) scanf(%d,&ai); max=a0; for(i=1 ; imax) max=ai; printf
14、(max=%dn,max);算法分析算法分析:采用打擂台的方法采用打擂台的方法,先把先把10个数存在数组中个数存在数组中,任意任意指定某数为擂主指定某数为擂主,然后擂主依次与其他数比较然后擂主依次与其他数比较,若某数大于擂若某数大于擂主主,则该数为擂主。循环结束,擂主变量中一定是最大的数。则该数为擂主。循环结束,擂主变量中一定是最大的数。指定指定第第1 1个个元素元素为擂为擂主主 例例33从键盘上输入从键盘上输入6 6个数存入数组中,再按输入顺序的逆个数存入数组中,再按输入顺序的逆序存放在该数组中并输出。序存放在该数组中并输出。#include main() int a6,i,j,k,t; f
15、or(i=0 ; i6 ; i+) scanf(%d,&ai); k=6/2-1; for(i=0 ; i=k ; i+) j=6-i-1; t=aj; aj=ai; ai=t; for(i=0 ; i6 ; i+) printf(%3d,ai);算法分析算法分析:采用循环设计。逆序操作可总结为:采用循环设计。逆序操作可总结为: ai与与aj进行交换,其中进行交换,其中i=0,1,n/2-1, j=n-i-1程序运行演示程序运行演示3 4 1 5 6 2 a0 a1 a2 a3 a4a5 例例4 4 利用数组计算斐波那契数列的前利用数组计算斐波那契数列的前2020个数,并以每行个数,并
16、以每行5 5个输出。个输出。#include int main() int i,f20= 1, 1 ; for( i=2; i20 ;i+) fi=fi-1+fi-2; for( i=0; i20; i+) if(i%5=0) printf(n);printf(%6d,fi ); printf(n); return 0;阐明:斐波那契数列的前两阐明:斐波那契数列的前两个数是个数是1 1,从第,从第3 3个数开始,个数开始,每个数是前两个数之和。即每个数是前两个数之和。即1,1,2,3,5,8,131,1,2,3,5,8,13,满足,满足关系式:关系式:f0=f1=1,fn=f0=f1=1,fn
17、=fn-1+fn-2,2fn-1+fn-2,2n n19 19 运行结果:运行结果:例例5 用冒泡法对数据进行由小到大排序。用冒泡法对数据进行由小到大排序。方法:将两个相邻数比较,小的调到前头。采用两重循环。方法:将两个相邻数比较,小的调到前头。采用两重循环。9 8 8 8 8 8 5 5 5 5 4 4 4 2 2 0 8 9 5 5 5 5 8 4 4 4 5 2 2 4 0 25 5 9 4 4 4 4 8 2 2 2 5 0 0 4 4 4 4 4 9 2 2 2 2 8 0 0 0 5 5 5 52 2 2 2 9 0 0 0 0 8 8 8 8 8 8 80 0 0 0 0 9 9
18、 9 9 9 9 9 9 9 9 9由以上可推知:由以上可推知:6 个数要比较个数要比较5趟趟 第一趟中要进行两两比较第一趟中要进行两两比较5次次 第二趟中比较第二趟中比较 4次次 假设假设 有有n个数,则要进行个数,则要进行n-1趟比较趟比较 第第 i趟比较中要进行趟比较中要进行n-i次两两比较。次两两比较。#include #define N 6 main( ) int aN, i, j, t ; for( i=0; iN; i+) scanf(%d, &ai); for( i=0; iN-1; i+ ) for( j=1; jaj) t=aj-1; aj-1= aj;aj= t
19、; printf(The sorted numbers: n); for( i=0; iN; i+) printf(%d , ai); n n个数比较个数比较n-1n-1趟趟第第i i趟比较趟比较n-in-i次次程序运行演示程序运行演示冒泡排序的缺陷:在比较交换的过程中大的数不能冒泡排序的缺陷:在比较交换的过程中大的数不能一次到位,效率低。一次到位,效率低。 选择排序法的基本思想:选择排序法的基本思想: 以冒泡排序法为基础,在两两比较后并不马以冒泡排序法为基础,在两两比较后并不马上进行交换,而是在找到最小的数之后,记住上进行交换,而是在找到最小的数之后,记住最小数的位置数组中的下标),待一轮比
20、较最小数的位置数组中的下标),待一轮比较完毕后,再将最小的数一次交换到位。完毕后,再将最小的数一次交换到位。3 6 1 9 41 6 3 9 41 3 6 9 41 3 4 9 61 3 4 6 9问题问题 将将 3 3、6 6、1 1、9 9、4 4 从小到大排列。从小到大排列。若有若有N N个数,则需要进行个数,则需要进行N-1N-1轮排序处理。轮排序处理。 第第1 1轮排序从轮排序从1 1N N个数中找出最小的数,然后将它与第个数中找出最小的数,然后将它与第1 1个个数交换。第数交换。第1 1个数则是最小的数。个数则是最小的数。第第2 2轮排序从轮排序从2 2N N个数中找出最小的数,然
21、后将它与第个数中找出最小的数,然后将它与第2 2个个数交换。第数交换。第2 2个数则是次小的数。个数则是次小的数。 经过经过 N-1 N-1 轮处理,完成全部轮处理,完成全部N N个数排序。个数排序。 编程时使用二重循环。外循环控制进行编程时使用二重循环。外循环控制进行N-1N-1轮排序,内循轮排序,内循环找出第环找出第 i i 轮的最小值。轮的最小值。#include #define N 5main( ) int aN ,i,j,k,t; printf(Input numbers:n); for( i=0; iN; i+) /*输入数组元素输入数组元素*/ scanf(%d, &ai
22、); for( i=0;iN-1;i+ ) /* 排序排序 */ k=i; for(j=i+1;jaj) k=j; if(k!=i) t=ai; ai=ak;ak=t; printf(The sorted numbers: n); for( i=0; iN; i+) /*输出数组元素输出数组元素*/ printf(%d , ai); 程序运行演示程序运行演示 定义二维数组的一般方式:定义二维数组的一般方式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式11常量表达式常量表达式22; 例如例如 int a33 存储形式:存储形式: 二维数组在内存中按行的顺序存放,即先存放二维数组在内存
23、中按行的顺序存放,即先存放第一行的元素,再存放第二行的元素。第一行的元素,再存放第二行的元素。 例如例如 float a34; float a34; 7.3 7.3 二维数组二维数组7.3.1 7.3.1 二维数组的定义二维数组的定义222120121110020100aaaaaaaaaa第一个下标可第一个下标可能取值的个数能取值的个数第二个下标可第二个下标可能取值的个数能取值的个数阐明:阐明:二维数组除了维数比一维数组多一维外,二维数组除了维数比一维数组多一维外, 其它性质与一维数组全部类似。其它性质与一维数组全部类似。 下面写法是否正确?下面写法是否正确? int a03; 用于定义数组长
24、度的常量表达式的值必须是大于0的正整数。 int i=3 , j=4 ; int aij ; 定义数组元素的个数必须使用常量表达式,而不能使用变量。 7.3.2 二维数组的引用二维数组的引用 二维数组的引用与引用一维数组元素一样,也用二维数组的引用与引用一维数组元素一样,也用下标法引用二维数组元素。下标法引用二维数组元素。 二维数组元素表示形式:数组名二维数组元素表示形式:数组名下标下标1下标下标2 下标下标1和下标和下标2是整型常量、整型变量或整型表达式。是整型常量、整型变量或整型表达式。其编号是从其编号是从0开始的。开始的。 例如:若有例如:若有 int a2*53*4, i=15; 则使
25、用则使用 a3*30, a1i-5都是合法的。都是合法的。阐明:数组名阐明:数组名a代表的是数组代表的是数组a在内存中的首地址,在内存中的首地址, 因此,可以用数组名因此,可以用数组名a来代表数组元来代表数组元 素素a00的的地址。数组名是常量,不可对它赋值。地址。数组名是常量,不可对它赋值。一、二维数组的初始化一、二维数组的初始化1. 分行给二维数组赋初值。分行给二维数组赋初值。如:如:int a23= 2,3,1,1,2,3;2. 2. 将所有数据写在一个将所有数据写在一个 内,按顺序赋值。内,按顺序赋值。 即按数组元素在内存中排列的顺序赋初值。即按数组元素在内存中排列的顺序赋初值。 in
26、t a23=2,3,1,1,2,3;int a23=2,3,1,1,2,3;321132a3. 对部分元素赋值对部分元素赋值如:如: int a33=1,0,1,0,0,1;相当矩阵:相当矩阵:1000100011000000014. 如果对数组全部元素赋初值,第一个下标可省略,但第二如果对数组全部元素赋初值,第一个下标可省略,但第二个下标不可省略。个下标不可省略。 如:如: a34=0,1,3,1,2,1,0,2,1,1,2,0; 可写成可写成 a 4=0,1,3,1,2,1,0,2,1,1,2,0; int a33=1, ,0,0,1;相当矩阵:int a23=5,6,7,8;int a2
27、3=5,6,7,8;例得到的数组为得到的数组为: 5 6 0 7 8 0得到的数组为得到的数组为: 5 6 7 8 0 01. 二维数组的输入二维数组的输入 int a23,i,j; for( i=0; i2; i+) for( j=0; j3; j+) scanf(%d, &aij);2. 二维数组的输出二维数组的输出 int a23,i,j; for( i=0; i2; i+) for( j=0; j3; j+) printf(%5d, aij);二、二维数组的输入、输出二、二维数组的输入、输出7.3.4 二维数组程序举例二维数组程序举例例例1 将一个矩阵将一个矩阵a 23转置存到
28、另一个矩阵转置存到另一个矩阵b 32中。中。 635241654321ba,分析:用数组分析:用数组a、b分别代表矩阵分别代表矩阵a、b; a 矩阵的行数必须要等于矩阵的行数必须要等于b 矩阵的列数。矩阵的列数。 执行:执行:bji=aij; 即可完成转换。即可完成转换。 涉及到两个下标的,一般用两重循环。涉及到两个下标的,一般用两重循环。 求矩阵转置问题也可以在矩阵本身进行,但应求矩阵转置问题也可以在矩阵本身进行,但应是方阵。是方阵。main( ) int a23=1,2,3,4,5,6; int b32, i , j; printf(“array a: n”); for( i=0; i2;
29、 i+) for( j=0; j3; j+) printf(%5d, aij); bji=aij; printf(n); printf(array b: n);for(i=0; i3; i+) for( j=0; j2; j+) printf(%5d,bij); printf(n); 运行结果如下:运行结果如下: array a: 1 2 3 4 5 6 array b: 1 4 2 5 3 6 例例2求方阵求方阵A4*4的转置阵,并将该转置阵输出的转置阵,并将该转置阵输出(限定在一个数组进行限定在一个数组进行)main( ) int a44,i,j,t; printf(array a: n)
30、; for( i=0; i4; i+) for( j=0; j4; j+) scanf(%d, &aij); /*输入输入*/ for(i=0;i4-1;i+) /*转置转置*/ for(j=i+1;j4;j+) t=aij;aij=aji;aji=t; printf(“rotated a: n); for(i=0; i4; i+) for( j=0; j4; j+) printf(%4d, aij); /* 输出输出 */ printf(n); 程序运行情况:程序运行情况:array a: 2 3 4 6 7 8 10 11 12 14 15 16 rotated a:5 9 13
31、6 10 147 11 154 8 12 16转置部分还可改写如下:转置部分还可改写如下:for(i=1;i4;i+) for(j=0;ji;j+) t=aij;aij=aji;aji=t;二维数组输入二维数组输入程序:main( ) int i, j, row=0, colum=0, max; int a34=1,2,3,4,9,7,4,6,-1,2,0,8; 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); 运
32、行结果为: max=9,row=1, colum=0例例3 求求34矩阵中最大元素的值及其所在行和列号。矩阵中最大元素的值及其所在行和列号。802164794321a将程序补充完整将程序补充完整:#include stdio.hmain( ) 例例4编写求整型矩阵编写求整型矩阵A3*3的副对角线元素之积的程序。的副对角线元素之积的程序。7.4 7.4 字符数组字符数组7.4.1 7.4.1 一维字符数组的定义一维字符数组的定义 用来存放字符数据的数组是字符数组。用来存放字符数据的数组是字符数组。 C C语言用字符数组存放字符串,字符数组中的各语言用字符数组存放字符串,字符数组中的各元素依次存放
33、字符串的各字符。元素依次存放字符串的各字符。 格式:格式:char char 数组名数组名 常量表达式常量表达式 强调:字符串实际占有单元的数量等于字符串长度强调:字符串实际占有单元的数量等于字符串长度+1。 定义时应注意考虑元素总个数应比实际长度多定义时应注意考虑元素总个数应比实际长度多1。例如:例如:char c6, b10;C 数组具有数组具有6个元素,可以存放长度等于或小于个元素,可以存放长度等于或小于5的字符串。的字符串。1.1.用单个字符对字符数组初始化用单个字符对字符数组初始化例如:例如:char char ch6=C,H,I,N,Ach6=C,H,I,N,A, 0;0;把把5
34、5个字符分别赋给个字符分别赋给ch0ch0到到c4.c4.在内存中存放情况:在内存中存放情况:7.4.2 7.4.2 一维字符数组的初始化一维字符数组的初始化阐明:阐明:(1 1初值的个数不能超过数组元素的个数,否则语法错初值的个数不能超过数组元素的个数,否则语法错 (2) (2) 初值的个数小于数组长度,系统自动添入结束符初值的个数小于数组长度,系统自动添入结束符00 (3) (3) 初值的个数与数组元素相等,定义时可省略长度初值的个数与数组元素相等,定义时可省略长度 (4) (4) 因字符串常量自动加因字符串常量自动加0,0,因此常人为地在字符数组后加因此常人为地在字符数组后加一个一个00
35、。CHINA0c0 c1 c2 c3 c4 c5串长串长=52. 2. 用字符串常量对字符数组初始化:用字符串常量对字符数组初始化:char ch6=CHINA;char ch6=CHINA;char ch6=CHINA;char ch6=CHINA; / /* * 省略省略 * */ /char ch =CHINA;char ch =CHINA; / /* * 省略长度值省略长度值 * */ / char d12=How are you char d12=How are you与与char char d=H,o.w,d=H,o.w, ,a,r,e,a,r,e, ,y,o,u,0; ,y,o,
36、u,0;等价等价将字符串存储到字符数组中,字符串和第一个将字符串存储到字符数组中,字符串和第一个00构成有效字符串。对字符串的操作,就是对字符数构成有效字符串。对字符串的操作,就是对字符数组的操作。但是它和普通字符数组的操作不同。普组的操作。但是它和普通字符数组的操作不同。普通数组中的元素是确定的,一般用下标控制循环;通数组中的元素是确定的,一般用下标控制循环;而字符串使用结束符而字符串使用结束符00来控制循环。来控制循环。例如:例如: chara6=g, r, e, e, n, chara6=g, r, e, e, n, 0;0; char b5=123; char b5=123; a2=0
37、; a2=0; a5=b1; a5=b1; printf(%cn,a1); printf(%cn,a1); printf(%s,a); printf(%s,a); main() int i; char a3; for (i=0;i3;i+) scanf(%c,&ai); for (i=0;i3;i+) printf(%c,ai); printf(n); 输入数据顺序:输入数据顺序: dos输出数据顺序:输出数据顺序: dos1.1.单字符输入输出单字符输入输出 ( (用格式符用格式符c c或字符输入函或字符输入函数数) ) char a3; for (i=0;i3;i+) ai=get
38、char(); for (i=0;i3;i+) putchar(ai); printf(n); char a7;scanf(%s,a); 2. 2. 字符串整体或部分输入输出字符串整体或部分输入输出 ( (用格式符用格式符s)s) - -输入输出项必须是以字符串的地址形式出现;输入输出项必须是以字符串的地址形式出现; 也可以是字符串常量:也可以是字符串常量: printf (printf ( %sn %sn , ,abcd abcd );); - -只能输入不包括空格、只能输入不包括空格、tt和和nn的字符串;的字符串; -若要输入空格,用若要输入空格,用getsgets函数;函数; -数组名
39、前不加数组名前不加 & &符号。符号。如:如:char a10;char a10; scanf(%s,a); scanf(%s,a); printf(%sn,a); printf(%sn,a);输入:输入:How are youHow are you 输出:输出: HowHow空格、跳格和回空格、跳格和回车是输入数据的车是输入数据的结束标志结束标志.n 用用s s输出字符串时,从输出项提供的地址开输出字符串时,从输出项提供的地址开始输出,直到遇到字符串结束符始输出,直到遇到字符串结束符00 为止。为止。n 若字符串长度与数组定义长度相等,则字符若字符串长度与数组定义长度相等,则
40、字符串结束标志无法存储,输出字符串后继续输出串结束标志无法存储,输出字符串后继续输出后续存储单元内容。后续存储单元内容。假设假设:char b3= xyz,c=H,a10= :char b3= xyz,c=H,a10= abcd072;abcd072; printf(b=%sn,b); printf(b=%sn,b); printf(c=%cn,c); printf(c=%cn,c); printf(a=%sn,a); printf(a=%sn,a); 输出:输出: b=xyzb=xyz c=H c=H a=abcd: a=abcd:#include main() int i=0; char
41、s180; printf(Input string s1:n); gets(s1); while(s1i!=0) i+; printf(i=%dn,i);例例: : 求给定字符串的长度。求给定字符串的长度。通常用来通常用来判断字符判断字符串的结束串的结束 strcat strcat 字符串连接字符串连接strcpy strcpy 字符串复制字符串复制strcmp strcmp 字符串比较字符串比较strlen strlen 字符串长度字符串长度strlwr strlwr 将字符串中的大写字符转换为小写字符将字符串中的大写字符转换为小写字符strupr strupr 将字符串中的小写字符转换为大
42、写字符将字符串中的小写字符转换为大写字符( (使用时注意程序前边加使用时注意程序前边加: #include ): #include )C函数库中提供一些用来处理字符串的函数:函数库中提供一些用来处理字符串的函数: puts 输出字符串输出字符串 gets 输入字符串输入字符串 (使用时注意程序前边加使用时注意程序前边加: #include )(1) puts(1) puts(字符数组字符数组) ) 将一个字符串输出到终端并换行。将一个字符串输出到终端并换行。 (2) gets(字符数组字符数组) 输入一个字符串到字符数组,该输入一个字符串到字符数组,该字符数组的起始地址为该函数值。字符数组的起
43、始地址为该函数值。 可以输入带空格的字符串可以输入带空格的字符串,用用scanf的的%s格式不行格式不行.main() char str =book; puts(str); 其作用与其作用与printf(%s,str) 等效等效main() char str12; gets(str); puts(str);输入:输入:How are you输出:输出:How are you(3)strcat(字符数组字符数组1,字符数组,字符数组2) 连接两个字符串,连接两个字符串,把字符数组把字符数组2连到字符数组连到字符数组1上,该数值为字符数组上,该数值为字符数组1的地址。的地址。 如:如: char
44、str140= C language ; char str2 = program; printf(%s, strcat( str1, str2); 输出:输出: C language program(4) strcpy(字符数组字符数组1,字符数组,字符数组2) 将字符数组将字符数组2拷贝到字符数组拷贝到字符数组1中去。字符数组中去。字符数组1的长度应大于字的长度应大于字符串符串2的长度。的长度。 如:如:char str110, str2 = red flag; strcpy(str1,str2); 不能用赋值形式不能用赋值形式 str1=str2(5) strcmp(字符串字符串1,字符串
45、,字符串2) 两个串的比较;两个串的比较;2121210)2, 1(strstrstrstrstrstrstrstrstrcmp负整数正整数阐明:阐明:1确定字符串大小的基本规则:确定字符串大小的基本规则:按照串中对应位置字符的按照串中对应位置字符的ASCII码值的大小确定大小。码值的大小确定大小。 abc b 因为字符因为字符 a abadef 因为字符因为字符 c a2比较结果由函数值带回返回两个字符之差)。比较结果由函数值带回返回两个字符之差)。 例如:例如: if(str1= str2) 错误错误 if( strcmp(str1,str2) = 0) 正确正确(6) strlen(字符
46、数组字符数组) 测试字符数组的长度测试字符数组的长度(不包括不包括0”); 如:如:char str10= yellow; printf(“%d”, strlen(str); 结果:结果: (7) strlwr(字符串字符串) 将大写字符串变小写字符串。将大写字符串变小写字符串。(8) strupr(字符串字符串) 将小写字符串变大写字符串。将小写字符串变大写字符串。 例例11:输出字符串中的数字字符。请完善程序。:输出字符串中的数字字符。请完善程序。#include stdio.h#include stdio.hmain()main() char a80; char a80; int i=0; int i=0; gets(a); gets(a); while(ai!= ) while(ai!= ) if( ) if( ) putchar(ai); putchar(ai); 7.4.6 字符数组应用举例字符数组应用举例#include main() char str120,str
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年全国道路货物运输驾驶员职业技能资格知识考试题及答案
- 临床输血管理相关制度知识考核试题与答案
- 2026年浙江省瑞安市高二历史下册期末考试模拟卷附答案(完整版)
- 蚌埠市2026届高三冲刺模拟语文试卷含解析
- 助产技能理论知识考核试题题库及答案
- 2026年湖南省汨罗市高考历史自测卷附完整答案【全优】
- 2025年江苏省高邮市高二历史上册期末考试测试卷含完整答案(易错题)
- 2026奥运会社区面试题及答案
- 2026安全与运营面试题及答案
- 遗体防腐整容师创新实践强化考核试卷含答案
- DZ∕T 0214-2020 矿产地质勘查规范 铜、铅、锌、银、镍、钼(正式版)
- 轨道电路 轨道电路认知
- DB4206-T 60-2023 实验室气瓶安全管理规范
- 飞行训练运行管理中国民航飞行学院广汉分院
- 辅酶Q10-心脏安全卫士课件
- 简单租房合同txt
- GB/T 30413-2013嵌入式LED灯具性能要求
- 建筑通风系统概述课件
- 食源性疾病个案调查登记表
- 蒸汽吹灰器技术协议(能源化工有限公司热动力站蒸汽吹灰器)
- 篮球规则介绍课件
评论
0/150
提交评论