《jin7第七章数组与字符串.ppt》由会员分享,可在线阅读,更多相关《jin7第七章数组与字符串.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 北京理工大学计算机学院北京理工大学计算机学院第七章第七章 数组与字符串数组与字符串 李李 书书 涛涛 1/28/20231 北京理工大学计算机学院北京理工大学计算机学院目目 录录1 一维数组一维数组2 多维数组多维数组3 字符数组字符数组4 字符串处理函数字符串处理函数5 字符数组应用实例字符数组应用实例6 本章小结本章小结第第 七七 章章 数组与字符串数组与字符串1/28/20232 北京理工大学计算机学院北京理工大学计算机学院 C 中定义了在基本数据类型基础上的构中定义了在基本数据类型基础上的构造数据类型(数组,结构体,共同体等)。造数据类型(数组,结构体,共同体等)。变量先定义,再使用
2、,如果变量个数少,且彼变量先定义,再使用,如果变量个数少,且彼此独立时,可以用:此独立时,可以用:int a,b,c;a=5;b=10;c=23;printf(“%d,%d,%d”,a,b,c);当变量个数比较多,并且有内在的关系时,例当变量个数比较多,并且有内在的关系时,例如如 :全班有全班有30个人个人,每人一个成绩。,每人一个成绩。定义:定义:int a1,a2,a30?不方便不方便 !第七章第七章第七章第七章 数组与字符串数组与字符串数组与字符串数组与字符串数组的基本概念数组的基本概念1/28/20233 北京理工大学计算机学院北京理工大学计算机学院数组是一组有序数据的集合。数组是一组
3、有序数据的集合。在这一组有序数据的集合中,各个元在这一组有序数据的集合中,各个元素属于同一个类型,用统一的名称标识这素属于同一个类型,用统一的名称标识这一组数,用下标唯一地确定这组数中的每一组数,用下标唯一地确定这组数中的每一个值。一个值。数组的特性数组的特性1/28/20234 北京理工大学计算机学院北京理工大学计算机学院数组的三要素数组的三要素 数组是有限个相同数据数组是有限个相同数据类型数据分量的有序集合。类型数据分量的有序集合。相同的数据类型(定义数组时规定)相同的数据类型(定义数组时规定)有限的成员个数有限的成员个数(定义数组时规定)(定义数组时规定)彼此有序的排列彼此有序的排列(引
4、用数组元素时的下标)(引用数组元素时的下标)int a5;a0=1;a1=2;.1 一维数组一维数组1 一维数组一维数组1/28/20235 北京理工大学计算机学院北京理工大学计算机学院格式:格式:类型类型 标识符标识符 长度长度;所有元素为所有元素为同一类型同一类型变量名,变量名,即数组名即数组名数组中所含数组中所含元素的个数元素的个数int a10;由由10个整个整数组成的数组,共数组成的数组,共同拥有数组名:同拥有数组名:数组长度必须是整型量数组长度必须是整型量int a2*3;说明:说明:用方括号用方括号可以用常量表达式可以用常量表达式不能不定义长度,不能不定义长度,也不能做动态定义也
5、不能做动态定义int an,n=10;一一.一维数组的定义一维数组的定义1/28/20236原则原则数组必须先定义,再使用。数组必须先定义,再使用。数组中的元素必须逐一引用。数组中的元素必须逐一引用。方法:方法:通过数组名及其元素的下标逐一引用。通过数组名及其元素的下标逐一引用。定义:定义:类型类型 数组名数组名N int a10;引用:引用:数组名数组名下标下标下标范围从下标范围从 0 到到 N-1 a0,a1,a9为数组为数组a中的所有元素中的所有元素。二二.一维数组元素的引用一维数组元素的引用说明说明下标表示了元素在数组中的位置下标表示了元素在数组中的位置下标可以用表达式下标可以用表达式
6、 a2*3相当于相当于a6(a6是是数组中第?个元素)数组中第?个元素)1/28/20237 北京理工大学计算机学院北京理工大学计算机学院变量在使用之前必须使其有值。变量在使用之前必须使其有值。如果没有初值,如果没有初值,会怎样?会怎样?数组初始化的方法:数组初始化的方法:在说明语句在说明语句 int a4;中赋值,称中赋值,称赋初值,又称数组初始化。赋初值,又称数组初始化。可以对静态或外部存储类型的数组进行初始化。可以对静态或外部存储类型的数组进行初始化。三三.一维数组的初始化一维数组的初始化 如果不赋初值,里面如果不赋初值,里面也会有一个不确定值。也会有一个不确定值。1/28/20238
7、北京理工大学计算机学院北京理工大学计算机学院 数据类型数据类型 数组名数组名 常量表达式常量表达式=初始化数据初始化数据 ;1.定义数组时,对全部元素赋值定义数组时,对全部元素赋值 int a5=1,2,3,4,5;用用 包括所有初值,包括所有初值,用逗号分隔各数值。用逗号分隔各数值。2.对部分元素赋值对部分元素赋值 按顺序给前按顺序给前2个元素赋值个元素赋值float x5=1.9,2.0;x0=1.9;x1=2.0;其余元素为其余元素为 若要对数组的全部元素初始化,则可省略数组说明中的大小。若要对数组的全部元素初始化,则可省略数组说明中的大小。int a =1,2,3,4;在数组说明的同时
8、进行初始化的格式在数组说明的同时进行初始化的格式1/28/20239 北京理工大学计算机学院北京理工大学计算机学院要求要求 C规定,只有静态数组(规定,只有静态数组(static)才能初始才能初始化,化,(第第7章内容),章内容),Turbo C中,允许为数组中,允许为数组(非静态)初始化。(非静态)初始化。区别:区别:static int a5=1,2,3;后两个元素值为后两个元素值为0。int a5=1,2,3;后两个元素为随机数。后两个元素为随机数。int i,a10=1,2,3,4,5,6,7,8,9,10;for(i=0;i10;i+)printf(“%d,”,a i );通过数组名
9、和下通过数组名和下标引用数组中的标引用数组中的每一个数据每一个数据 运行结果:运行结果:1,2,3,4,5,6,7,8,9,10,初值的个数不能超过定义的数组长度初值的个数不能超过定义的数组长度1/28/202310 北京理工大学计算机学院北京理工大学计算机学院 有一个数组有一个数组,内有内有10个数个数,求出最小的数和它求出最小的数和它的下标,然后将它与数组中的第一个数对换。的下标,然后将它与数组中的第一个数对换。71332668153206512int a10;a0a i a971331682653206512定义两个临时变量定义两个临时变量 min(保存最小数保存最小数)和和 k(保存保
10、存下标下标)。假定第一个元素就是最小的:假定第一个元素就是最小的:min=a0,k=0。思思路路 用用min与数组中的每一个元素与数组中的每一个元素ai比较比较,若若ai比比min小小,将将ai赋给赋给min,将下标将下标i赋给赋给k,否则否则,继续比较。继续比较。实例分析实例分析1/28/202311 北京理工大学计算机学院北京理工大学计算机学院2671332668153206512min=a0i=1i=2i=3i=4i=5i=6i=7i=8i=91326 min=a1 k=133 min和和k的值不变的值不变133203 min和和k的值不变的值不变11 min和和k的值不变的值不变1&m
11、in531 min和和k的值不变的值不变 121 min和和k的值不变的值不变651 min和和k的值不变的值不变min=1k=5ak=a0a0=min71331682653206512比比 较较 过过 程程1/28/202312 北京理工大学计算机学院北京理工大学计算机学院main()int i,a10,min,k;for(i=0;i10;i+)scanf(“%d”,&ai);min=a0;k=0;for(i=1;iai)min=ai;k=i;ak=a0;a0=min;for(i=0;i10;i+)printf(“%4d,”,ai);printf(“%d,%dn”,k,min);循环输入循环
12、输入10个数个数循环找出最小的循环找出最小的交换数据交换数据输出数组输出数组输出最小值和原始下标输出最小值和原始下标找数程序找数程序1/28/202313 北京理工大学计算机学院北京理工大学计算机学院当一个一维数组中的每个元素本身又是一当一个一维数组中的每个元素本身又是一个一维数组时,该数组为一个二维数组。个一维数组时,该数组为一个二维数组。一、二维数组的定义一、二维数组的定义 1.格式:类型格式:类型 标识符标识符长度长度1长度长度2;2.二维数组元素需要两个下标表示:二维数组元素需要两个下标表示:例:例:int a34表示数组表示数组a中有中有3行行4列共列共12个数据。个数据。3.二维数
13、组在存储空间中是按行优先存储。二维数组在存储空间中是按行优先存储。int a34;a00a01a02a23.a03第一行第一行最后一最后一个元素个元素2 多维数组多维数组2 多维数组多维数组1/28/202314 北京理工大学计算机学院北京理工大学计算机学院原则:原则:逐一引用逐一引用数组名数组名下标下标1下标下标2下标下标1从从0到长度到长度N1-1下标下标2从从0到长度到长度N2-1方法方法:格式:标识符格式:标识符N1N2a00.a31共共8个数据个数据(对本例,决不可能有元素对本例,决不可能有元素a42)三、二维数组的初始化三、二维数组的初始化 方法:方法:1.对全部元素赋初值,分行,
14、各用一个对全部元素赋初值,分行,各用一个 int a23=1,2,3,4,5,6;二、二、二维数组的引用二维数组的引用1/28/202315 北京理工大学计算机学院北京理工大学计算机学院int a23=1,2,3,4,5,6;1,2,3,4,5,6.3.对部分元素赋初值,注意区别:对部分元素赋初值,注意区别:(1)int a23=1,2,3;(2)int a23=1,2,3;(3)int a23=0,1,2,3;当为全部元素赋值时,当为全部元素赋值时,一维长度可省略一维长度可省略 int a 3=1,2,3,4,5,6;类似可以推广到三维或多维数组。类似可以推广到三维或多维数组。2.整体赋值,
15、系统自动分行整体赋值,系统自动分行1/28/202316 北京理工大学计算机学院北京理工大学计算机学院88年年90年年王王张张李李王王张张李李4 5 4 3 5 3 4 3 5 4 3 3 3 5 4 3 3 5 3 5 3 5 5 3 教学教学 科研科研 文体文体 其他其他用数组定义用数组定义 int a?a111=?四、四、三维数组举例三维数组举例2 3 41/28/202317 北京理工大学计算机学院北京理工大学计算机学院若定义若定义int a34,则对则对a的正确引用是:的正确引用是:A)a 2 4 B)a 1,3 C)a(2)(1)D)a 1+1 0 以下二维数组说明方式中正确的是:
16、以下二维数组说明方式中正确的是:A)int a3;B)float a(3,4);C)double a14;D)float a(3)(4);引用引用假设二维数组假设二维数组a有有m列,则计算任一元素列,则计算任一元素aij在在数中的位置的公式为:数中的位置的公式为:i*m+j+1即即a00位于数组的第一个位置上。位于数组的第一个位置上。i*m+j+1例题分析例题分析1/28/202318 北京理工大学计算机学院北京理工大学计算机学院main()int i,j,a55,k;k=2;for(i=0;i5;i+)/*按行循环按行循环*/for(j=0;j5;j+)/*按列循环按列循环*/if(j=i)
17、a i j=1;/*下三角下三角*/else a i j=k+;/*上三角上三角*/for(i=0;i5;i+)for(j=0;j5;j+)printf(“%4d”,a i j);printf(“n”);/*输出一行后换行输出一行后换行*/例题例题:不用输入不用输入,自动生成下列矩阵自动生成下列矩阵1 2 3 4 51 1 6 7 81 1 1 9 101 1 1 1 111 1 1 1 1元素值为元素值为 1按按行行递递增增1/28/202319 北京理工大学计算机学院北京理工大学计算机学院int a10,已经赋值,如已经赋值,如何进行从小到大排序?何进行从小到大排序?1.选择排序选择排序2
18、.冒泡排序冒泡排序3.插入排序插入排序找出数组中最小的,与第一个元找出数组中最小的,与第一个元素对换,再在其余的元素中重复素对换,再在其余的元素中重复上述操作。上述操作。顺序比较相邻两元素的大小,若顺序比较相邻两元素的大小,若左边元素比右边的大,则交换,左边元素比右边的大,则交换,否则不交换,比较需进行多次。否则不交换,比较需进行多次。假定第一个元素是合适的,取出第假定第一个元素是合适的,取出第二个元素与之比较,若小,插到前二个元素与之比较,若小,插到前面;否则,位置不变,再将第三个面;否则,位置不变,再将第三个元素与前面两个比较元素与前面两个比较,放到有序序,放到有序序列中合适的位置,依次类
19、推列中合适的位置,依次类推.五五、应用实例应用实例1/28/202320 北京理工大学计算机学院北京理工大学计算机学院冒泡排序冒泡排序a0,a1,a2,a3,a4,a5,a6,a7,a8,a9第第1轮轮9次次第第2轮轮8次次 排序思路:从底部开始,顺序比较相邻两元素的排序思路:从底部开始,顺序比较相邻两元素的大小,若左边元素比右边的大,则交换,否则不交换,大小,若左边元素比右边的大,则交换,否则不交换,比较需进行多比较需进行多轮轮。共需共需N-1=9 轮轮,每轮每轮 10-i 次次,i=19例:例:int a10;即即N=10,冒泡排序过程如下:冒泡排序过程如下:1/28/202321 北京理
20、工大学计算机学院北京理工大学计算机学院有一数组有一数组:(9,7,18,3,4,10,8),将它从小到大排序。将它从小到大排序。(1)9,7,18,3,4,10,8 交换交换7,9,18,3,4,10,8 不交换不交换7,9,18,3,4,10,8 交换交换7,9,3,18,4,10,8 交换交换7,9,3,4,18,10,8 交换交换7,9,3,4,10,18,8 交换交换7,9,3,4,10,8,18 第一轮比第一轮比较结束,较小较结束,较小的数向前移动,的数向前移动,较大的数向后较大的数向后移动。移动。冒泡排序冒泡排序也可以从头部开始,顺序比较相邻两元素也可以从头部开始,顺序比较相邻两元
21、素1/28/202322 北京理工大学计算机学院北京理工大学计算机学院(2)7,9,3,4,10,8,18 不交换不交换 7,9,3,4,10,8,18 交换交换 7,3,9,4,10,8,18 交换交换 7,3,4,9,10,8,18 不交换不交换7,3,4,9,10,8,18 交换交换7,3,4,9,8,10,18 第二轮比较结束第二轮比较结束第二轮比较第二轮比较1/28/202323 北京理工大学计算机学院北京理工大学计算机学院(3)7,3,4,9,8,10,18 交换交换 3,7,4,9,8,10,18 交换交换 3,4,7,9,8,10,18 不交换不交换 3,4,7,9,8,10,
22、18 交换交换 3,4,7,8,9,10,18 第三轮比较结束第三轮比较结束(4)3,4,7,8,9,10,18 第三轮比较第三轮比较(5)3,4,7,8,9,10,18 (6)3,4,7,8,9,10,18 第四轮比较结束第四轮比较结束第五轮比较结束第五轮比较结束第六轮比较结束第六轮比较结束1/28/202324 北京理工大学计算机学院北京理工大学计算机学院main()int i,j,t,a10;printf(Input 10 number:n);for(i=0;i=9;i+)scanf(“%d”,&ai);/*输入输入10个整数个整数*/for(i=1;i=9;i+)/*10-1轮排序处理
23、轮排序处理*/for(j=0;jaj+1)t=aj;aj=aj+1;aj+1=t;/*交换数据交换数据*/printf(The sorted numbers:n);for(i=0;i=9;i+)/*输出排序后数据输出排序后数据*/printf(“%4d”,ai);printf(“nn”);冒泡排序程序冒泡排序程序1/28/202325 北京理工大学计算机学院北京理工大学计算机学院一、一、C中的字符数据中的字符数据字符数据字符数据字符常量字符常量字符变量字符变量字符串常量字符串常量a,An,tchar c;“Turbo C”二、字符数据的输入和输出二、字符数据的输入和输出char c,d;sca
24、nf(“%c”,&c);d=getchar();char c=a,d=b;printf(“%c”,c);putchar(d);3 字符数组字符数组3 字符数组字符数组 7.3.1 字符数据字符数据1/28/202326 北京理工大学计算机学院北京理工大学计算机学院一、一、数组中的各个元素均为字符变量数组中的各个元素均为字符变量二二、每个元素只能存放一个字符、每个元素只能存放一个字符例:例:char c20=a,b,c,.;c0=a,c1=b,.最后一个元素:最后一个元素:c19,其中字符的个数不得多于其中字符的个数不得多于20用字符数组可以存放长度不同的字符串用字符数组可以存放长度不同的字符串
25、串串:用双引号:用双引号“”括起来的字符或转义符序列。括起来的字符或转义符序列。串长:字符串中所包含的字符数。串长:字符串中所包含的字符数。串结束标记:串结束标记:C中的串以中的串以0结束。结束。0称为串结束标记。称为串结束标记。7.3.2 字符串数据字符串数据1/28/202327 北京理工大学计算机学院北京理工大学计算机学院字符串在字符数组中一个字符占用一个字节。字符串字符串在字符数组中一个字符占用一个字节。字符串实际占有的存储单元数量等于实际占有的存储单元数量等于字符串长度字符串长度+1。要定义一个存放字符串要定义一个存放字符串“CHINA”的字符数组的字符数组c,应定,应定义为:义为:
26、char c6;数组数组c在内存中在内存中实际存放情况实际存放情况 0是在字符串存入字符数组时是在字符串存入字符数组时由系统自动填加的,并不是字符串本由系统自动填加的,并不是字符串本身的一部分,在计算串长的时候不包身的一部分,在计算串长的时候不包括括0。字符串在数组中的存储格式字符串在数组中的存储格式0AN IHC串长串长=5c0 c1 c2 c3 c4 c51/28/202328 北京理工大学计算机学院北京理工大学计算机学院1.为每一个元素赋初值为每一个元素赋初值 char c6=a,b,c,d,e,f;2.C中可以使用字符串常量为字符数组初始化,中可以使用字符串常量为字符数组初始化,可有三
27、种格式。可有三种格式。char ch6=“CHINA”;char ch6=“CHINA”;/*省略 */char ch=“CHINA”;/*省略说明中字符串长度值*/7.3.3 字符数组的初始化字符数组的初始化1/28/202329 北京理工大学计算机学院北京理工大学计算机学院1.字符串在内存中,系统自动加上字符串在内存中,系统自动加上0,作,作为字符串结束标记,字符串所占字节数为串中字为字符串结束标记,字符串所占字节数为串中字符个数符个数+1 char c6=“abcde”;该串共占该串共占6个字节。个字节。2.程序中系统根据程序中系统根据0来判断字符串是否结来判断字符串是否结束,而不是通过
28、数组长度。例如:束,而不是通过数组长度。例如:char c6=“ab”;c的长度为的长度为6,而实际到,而实际到b就结束。就结束。7.3.4 关于字符数组的几点说明关于字符数组的几点说明1/28/202330 北京理工大学计算机学院北京理工大学计算机学院判断:判断:(1)char c10=“abcde”;(2)char c10=a,b,c,d,e;(3)char c10=“abcde”;(4)char c10=a,b,c,d,e,0;这四种初这四种初始化是否始化是否等价?等价?C语言并不要求所有的字符数组的最后一个元素语言并不要求所有的字符数组的最后一个元素必须是必须是0(如果使用串,系统自动
29、加上)。(如果使用串,系统自动加上)。(1)=(3)=(4)用字符串常量为数组初始化的比较用字符串常量为数组初始化的比较1/28/202331 北京理工大学计算机学院北京理工大学计算机学院 基本数据类型中所有的数基本数据类型中所有的数组都可以通过循环语句,逐一组都可以通过循环语句,逐一赋值。赋值。int a10,i;for(i=0,i10;i+)scanf(“%d”,&ai);printf(“%d,”,ai);字符数组除采用此方法字符数组除采用此方法之外,还有其他方式之外,还有其他方式字符串字符串%s是否循环是否循环?是否自动换行是否自动换行?是否用数组名是否用数组名?是否用取址符是否用取址符
30、?只能是字符型只能是字符型7.3.5 字符数组的输入输出字符数组的输入输出1/28/202332 北京理工大学计算机学院北京理工大学计算机学院介绍三种方法介绍三种方法:(1)用用scanf函数函数,用循环,用循环结构,逐一输入元素的值,元结构,逐一输入元素的值,元素前用取址符素前用取址符&,格式为格式为%c。char c10;int i;for(i=0;i10;i+)scanf(“%c”,&ci);(2)用用scanf函数,整串输入,函数,整串输入,不用取址符,只写数组名不用取址符,只写数组名,格格式为式为%s。char c10;scanf(“%s”,c);注意:注意:遇回车,遇回车,空格输入
31、结束。空格输入结束。任何数组的数组名代表任何数组的数组名代表了数组在存储空间中的了数组在存储空间中的起始起始地址地址1.字符数组的输入字符数组的输入1/28/202333 北京理工大学计算机学院北京理工大学计算机学院char str10;gets(str);任何数组的数组名代表了数组任何数组的数组名代表了数组在存储空间中的起始地址在存储空间中的起始地址总结总结:scanf,%c 循环循环&ciscanf,%s 数组名数组名 空格,回车结束空格,回车结束gets()数组名,回车结束数组名,回车结束(3)用用gets()函数,一次输入函数,一次输入 一个整串,一个整串,遇回车结束遇回车结束1/28
32、/202334 北京理工大学计算机学院北京理工大学计算机学院介绍三种方法介绍三种方法:(1)用用printf 函数,循函数,循环结构,逐一元素输出,环结构,逐一元素输出,格式为格式为%c。char c10;int i;(假定已有值)假定已有值).for(i=0;i10;i+)printf(“%c”,ci);(2)用用printf函数,格式函数,格式为为%s,用数组名,整串,用数组名,整串输出输出char c10=“abcdef”;printf(“%sn”,c);不自动换行不自动换行(3)用用puts()函数,一函数,一次输出整串。次输出整串。char str10=“abcde”;puts(st
33、r);自动换行自动换行2.字符数组的输出字符数组的输出1/28/202335 北京理工大学计算机学院北京理工大学计算机学院总结总结:printf,%c 循环循环 ciprintf,%s 数组名数组名 不自动换行不自动换行puts()数组名数组名 自动换行自动换行*字符数组可以按字符串输出字符数组可以按字符串输出,输出时输出时,遇遇0结束结束*字符数组中字符数组中,若有多个若有多个0,遇到第一个遇到第一个0,输出结束输出结束char str10=a,b,e,0,s,r,0;puts(str);abe 说说 明明1/28/202336main()int i;char str13;printf(“1
34、:scanf&printf%c:n”);for(i=0;i13;i+)scanf(“%c”,&stri);for(i=0;i13;i+)printf(“%c”,stri);printf(“n”);printf(“2:scanf&printf%s:n”);scanf(“%s”,str);printf(“%s”,str);printf(“n”);printf(“3:gets&puts:n”);gets(str);puts(str);整串输入输出整串输入输出三次输入:三次输入:computer&C程序举例程序举例1/28/202337 北京理工大学计算机学院北京理工大学计算机学院4 字符串处理函数字
35、符串处理函数4 字符串处理函数字符串处理函数 C的库函数中提供了有关字符串输入,输出,字符的库函数中提供了有关字符串输入,输出,字符串复制,字符串连接,字符串比较,求字符串长度,串复制,字符串连接,字符串比较,求字符串长度,字母大小写转换等函数。字母大小写转换等函数。所有的函数在使用时,程序开始加文件包含:所有的函数在使用时,程序开始加文件包含:#include格式:格式:puts(字符数组字符数组);功能:从终端输出功能:从终端输出 指定字符数组指定字符数组1.字符数组输出字符数组输出char str=“Turbo C”;puts(str);字符数组名字符数组名自动换行自动换行1/28/20
36、2338 北京理工大学计算机学院北京理工大学计算机学院格式:格式:gets(字符数组);字符数组);功能:从输入设备上输入功能:从输入设备上输入一个字符串,一个字符串,char str80;gets(str);puts(str);遇回车结束遇回车结束格式:格式:strcat(字符数组字符数组1,字符数组,字符数组2);功能:将字符数组功能:将字符数组2连接到字符数组连接到字符数组1的后面。的后面。3.字符串连接字符串连接char c110=“abc”;strcat(c1,“efg”);puts(c1);可以是字符数组,可以是字符数组,也可以字符串常量也可以字符串常量abcefg2.字符数组输入
37、字符数组输入1/28/202339 北京理工大学计算机学院北京理工大学计算机学院格式:格式:strcpy(字符数组字符数组1,字符数组,字符数组2););功能:将字符数组功能:将字符数组2复制给字符数组复制给字符数组1。char c120=“abcde”,C2=“LMN”;strcpy(c1,c2);或或:strcpy(c1,“LMN”);puts(c1);显示显示LMNMLN 0eabcd0LMN 0c1c2c14.字符串拷贝字符串拷贝1/28/202340 北京理工大学计算机学院北京理工大学计算机学院(1)字符串不能彼此赋值)字符串不能彼此赋值,只能用拷贝函数。,只能用拷贝函数。(2)字符
38、数组)字符数组1定义的长度必须比字符数组定义的长度必须比字符数组2大(或大(或相等)。相等)。(3)字符数组字符数组2可以用字符串常量,字符数组可以用字符串常量,字符数组1必须必须写成变量名写成变量名 。(4)连同连同0一起复制。一起复制。(5)可以复制部分字符,即可以复制部分字符,即 char c120,c2=“Trubo C”;strcpy(c1,c2,4);只复制前只复制前4个字符。个字符。(6)如果原数组如果原数组1中有字符,则复制后将原有内容中有字符,则复制后将原有内容覆盖(没覆盖的部分保留,但不显示)。覆盖(没覆盖的部分保留,但不显示)。说说 明明1/28/2023411.整型数据
39、整型数据:int a,b=5;a=b;2.实型数据实型数据:float x,y=0.5;x=y;3.字符型数据字符型数据:char c1,c2=A;c1=c2;4.字符数组字符数组:char str110=“abcde”;char str210;strcpy(str2,str1);C语言中的数据赋值语言中的数据赋值课堂作业课堂作业char a7=“abcdef”,b4=“ABC”;strcpy(a,b);printf(“%c”,a5);A)空格空格 B)0 C)e D)f1/28/202342 北京理工大学计算机学院北京理工大学计算机学院格式:格式:strcmp(字符数组字符数组1,字符数组,
40、字符数组2);功能:从左到右逐一比较数组功能:从左到右逐一比较数组1和数组和数组2各字符各字符的的ASCII 值,若相同,继续,若不同,返回一个值,若相同,继续,若不同,返回一个整数整数(以第一个不相同的字符比较为准以第一个不相同的字符比较为准)。如果数组如果数组1数组数组2 函数值为正函数值为正如果数组如果数组1数组数组2 函数值为负函数值为负如果数组如果数组1=数组数组2 函数值为函数值为05.字符串比较字符串比较1/28/202343 北京理工大学计算机学院北京理工大学计算机学院1.整型数据整型数据:int a,b if(a=b)2.实型数据实型数据:float x,y if(abs(x
41、-y)1e-5)3.字符型数据字符型数据:char c1,c2 if(c1=c2)4.字符串字符串:char str110,str210if(strcmp(str1,str2)=0)两个字符串怎样交换两个字符串怎样交换?C语言中的数据比较语言中的数据比较1/28/202344 从键盘输入五个字符不多于从键盘输入五个字符不多于7个个的字符串,输出其中最大的串。的字符串,输出其中最大的串。c18c28bsiac0frtoran0frtoran0pogrram0pogrram0pscaal0 ed0n C1数组中存放数组中存放当前最大的串当前最大的串输入一个串输入一个串c1c1 c2?输入一个串输入
42、一个串c2i4?字符串拷贝字符串拷贝YYNN输出输出c1program开始开始c18,c28例例 题题1/28/202345#includemain()char c18,c28;int i;printf(”Input c1:”);gets(c1);for(i=0;i4;i+)printf(”Input c2:”);gets(c2);if(strcmp(c1,c2)0)strcpy(c1,c2);printf(”The result is:”);printf(”%s”,c1);例例 题题 程程 序序运行运行输入一个串输入一个串c1c1 c2?输入一个串输入一个串c2i4?字符串拷贝字符串拷贝YY
43、NN输出输出c1开始开始c18,c281/28/202346 北京理工大学计算机学院北京理工大学计算机学院 怎样将五个字符串排序输出?怎样将五个字符串排序输出?怎样交换怎样交换两个字符数组?两个字符数组?怎样将怎样将100本英文书名做字典本英文书名做字典排序?排序?思思 考考 问问 题题1/28/202347 北京理工大学计算机学院北京理工大学计算机学院格式:格式:strlen(字符数组)字符数组)功能:测试字符数组中所含字符的个数功能:测试字符数组中所含字符的个数 不包含字符串结不包含字符串结束标记束标记0 char str10=“Turbo C”;printf(“%d”,strlen(st
44、r);结果:结果:7char str=“tv0willn”;printf(“%d”,strlen(str);6.求字符数组求字符数组(串串)的长度的长度1/28/202348 北京理工大学计算机学院北京理工大学计算机学院格式:格式:strlwr(字符数组)字符数组)功能:将数组中的大写字母转换成小写。功能:将数组中的大写字母转换成小写。格式:格式:strupr(字符数组)字符数组)功能:将数组中的小写字母转换成大写。功能:将数组中的小写字母转换成大写。单向的转换单向的转换不是对换不是对换char str=“Turbo C”;printf(“%s”,strupr(str);printf(“%s”
45、,strlwr(str);TURBO Cturbo c7.字符串字母大小写转换字符串字母大小写转换1/28/202349 北京理工大学计算机学院北京理工大学计算机学院5 字符数组应用实例字符数组应用实例5 字符数组应用实字符数组应用实例例按行输入字符(用哪个函数?循环几次?)按行输入字符(用哪个函数?循环几次?)对第对第 i i行的每一列(每个字符)进行判断,是否行的每一列(每个字符)进行判断,是否为大写,小写,数字,空格或其他。为大写,小写,数字,空格或其他。(循环几次?)(循环几次?)有一篇文章,共有一篇文章,共 三行三行 文字,每行有文字,每行有 80 80个字符,要求个字符,要求统计出
46、其中英文大写字母,小写字母,数字,空格,统计出其中英文大写字母,小写字母,数字,空格,以及其他字符的个数。以及其他字符的个数。题目题目分析分析三行三行i i80个字符个字符定义二维字符数组定义二维字符数组 char text380;循环嵌套,外层循环对行共循环嵌套,外层循环对行共3次,内层循环对列共次,内层循环对列共80次,次,且遇且遇0终止。终止。对二维数组中的每一个元素对二维数组中的每一个元素text i j 进行判断。进行判断。1/28/202350 北京理工大学计算机学院北京理工大学计算机学院统计英文分类字符个数的统计英文分类字符个数的N-S图图for(i=0;i3;i+)输入文章的第
47、输入文章的第 i 行行for(j=0;j80&textij!=0;j+)A Za z0 9 TTTT F F F F大写大写字母字母数加数加1小写小写字母字母数加数加1数字数字个数个数加加 1空格数空格数加加 1“其他其他”个数个数加加 1输出大写字母输出大写字母,小写字母小写字母,数字数字,空格和空格和“其他其他”的个数的个数1/28/202351 北京理工大学计算机学院北京理工大学计算机学院int a10,已经赋值,如何进行从小到大排序已经赋值,如何进行从小到大排序?选择排序:选择排序:找出数组中最小的,与第一个元素找出数组中最小的,与第一个元素对换,再在其余的元素中重复上述操作。对换,再
48、在其余的元素中重复上述操作。选择排序选择排序a0,a1,a2,a3,a4,a5,a6,a7,a8,a9第第1轮轮9次次第第2轮轮8次次共需共需N-1=9 轮轮,每轮每轮 10-i 次次,i=191/28/202352 北京理工大学计算机学院北京理工大学计算机学院define N 10main()int aN,i,j,t;printf(Input%d number:n,N);for(i=0;iN;i+)/*输入输入10个整数个整数*/scanf(%d,&a i);for(i=0;iN-1;i+)/*外循环外循环 控制控制N-1轮比较轮比较,找找N-1遍遍*/for(j=i+1;jN;j+)/*依
49、次选择第依次选择第1个数与后面比较个数与后面比较*/if(a j a i)t=a i;a i =a j;a j =t;/*交换数据交换数据*/printf(The sorted numbers:n);for(i=0;iN;i+)/*输出排序后数据输出排序后数据*/printf(%4d,a i);选择排序程序选择排序程序1/28/202353 北京理工大学计算机学院北京理工大学计算机学院运行结果运行结果Input 10 numbers:4 6 7 10 13 2 1 9 20 3 The sorted numbers:1 2 3 4 6 7 9 10 13 201/28/202354 北京理工大
50、学计算机学院北京理工大学计算机学院#include main()int length=0;char line100;gets(line);while(linelength!=0)length+;printf(“String length=%d”,length);根据字符串中根据字符串中0的位的位置来计算字符串长度置来计算字符串长度。字符数组应用举例字符数组应用举例1.求字符串的长度程序求字符串的长度程序1/28/202355 北京理工大学计算机学院北京理工大学计算机学院#include main()char str1100,str2100;int i;printf(Enter string 1