《c语言数组和字符串.ppt》由会员分享,可在线阅读,更多相关《c语言数组和字符串.ppt(35页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、C/C+C/C+程序设计程序设计程序设计程序设计7.1 一维数组一维数组一维数组类型声明的语法形式为:T Namesize T:类型名,如int型,float型等;Name:数组名;size:常量表达式,表示数组的大小。数组大小的确定1.如果在对一维数组进行初始化时给出了全部初始值,则数组声明中的元素个数可以省略,编译器会根据初始值的个数,自动计算出元素个数。2.可以用符号常量或常量表达式来说明数组元素的个数。2数组:数组:是相同类型变量的有序集合。是相同类型变量的有序集合。元素:元素:一个数组里集合了多个数据对象,一个数组里集合了多个数据对象,这些数据对象被称为这些数据对象被称为数组中的元素
2、数组中的元素。数组中的每一个元素用统一的数组名称数组中的每一个元素用统一的数组名称和下标来唯一确定。和下标来唯一确定。数组元素表示形式:数组元素表示形式:数组名数组名 下标下标 数组名:数组名:合法的标识符合法的标识符下标:下标:元素在数组中的位置,数组的下元素在数组中的位置,数组的下标从标从0开始。开始。数组长度:数组长度:数组中的元素个数数组中的元素个数一维数组的定义和引用一维数组的定义和引用1、一维数组的定义、一维数组的定义当数组中每个元素都只带有一个下标当数组中每个元素都只带有一个下标时,这个数组就被称为时,这个数组就被称为一维数组。一维数组。数据类型数据类型 数组名数组名常量表达式常
3、量表达式;例如例如:int a6;a00145a1a2a3a4a523a注意事项注意事项:1 1“数据类型名数据类型名”可以是任意的数据类型。可以是任意的数据类型。int a3;int a3;float b5;float b5;char c6;char c6;2.2.数组的下标必须是整型常量表达式数组的下标必须是整型常量表达式 int n=10int n=10;int b2.5;int b2.5;int an;int an;2、一维数组的引用、一维数组的引用数组必须先定义,后使用数组必须先定义,后使用 只能逐个引用数组元素,不能一次引用只能逐个引用数组元素,不能一次引用整个数组。整个数组。in
4、t a10;int a10;printf(printf(“%d%d”,a);(,a);()for(j=0;j10;j+)for(j=0;j10;j+)printf(printf(“%dt%dt”,aj);(,aj);()定义数组之后,数组中的每一个元素就定义数组之后,数组中的每一个元素就相当于一个变量。对变量的一切操作同相当于一个变量。对变量的一切操作同样适用于数组。样适用于数组。a2=2;b0=5;a1=a2+a3;scanf(“%d”,&a2);printf(“%d”,a2);数组名是数组变量在内存中的起始地址,数组名是数组变量在内存中的起始地址,定义了数组之后,这个地址固定,相当定义了数
5、组之后,这个地址固定,相当于一个地址常量。于一个地址常量。int a10;int a10;printf(printf(“%d%d”,a);,a);printf(printf(“%d%d”,&a0);,&a0);一维数组的赋值一维数组的赋值1 1、一维数组的初始化赋值、一维数组的初始化赋值 int a3=1,2,3;int a3=1,2,3;括起来的部分叫做初值列表括起来的部分叫做初值列表 赋值的结果:赋值的结果:a0=1 a1=2 a2=3a0=1 a1=2 a2=3 初值列表中初值的个数不能超过数组的初值列表中初值的个数不能超过数组的长度。长度。intint a3=1,2,3,4;a3=1,
6、2,3,4;如果初值列表中初值的个数小于数组定如果初值列表中初值的个数小于数组定义的长度,未指定的元素赋值为零。义的长度,未指定的元素赋值为零。intint a3=1,2;a3=1,2;a0=1 a1=2 a2=0 a0=1 a1=2 a2=0给全部数组元素赋初值时,数组的大小给全部数组元素赋初值时,数组的大小可以省略。可以省略。intint a=1,2,3,4,5;a=1,2,3,4,5;赋值后,数组赋值后,数组a a的长度为的长度为5 5;注意区分:注意区分:intint a;a;-错误!错误!intint a=1,2,3,4,5;a=1,2,3,4,5;-正确!正确!思考:比较下列几种数
7、组初始化方法:思考:比较下列几种数组初始化方法:int a5=1,2,3,4,5;int a5=1,2,3,4,5;int a=1,2,3,4,5;int a=1,2,3,4,5;int a5=1,2,3;int a5=1,2,3;int a=1,2,3;int a=1,2,3;2 2、一维数组在程序中赋值、一维数组在程序中赋值 只有初始化的时候能对数组整体赋值,只有初始化的时候能对数组整体赋值,其他时候必须对数组元素单独赋值。其他时候必须对数组元素单独赋值。int a5;int a5;a=1,2,3,4,5;a=1,2,3,4,5;a5=1,2,3,4,5;a5=1,2,3,4,5;逐个赋值
8、逐个赋值 float a4;float a4;a0=1.23;a1=3.4;a0=1.23;a1=3.4;a2=5.32;a3=3.67;a2=5.32;a3=3.67;用循环语句赋值用循环语句赋值 例:将数组例:将数组a a的各元素赋值为奇数序列的各元素赋值为奇数序列 intint a10,i;a10,i;for(ifor(i=1;i10;i+)=1;i10;i+)aiai=2*i+1;=2*i+1;例:接收键盘输入的数据给数组元素例:接收键盘输入的数据给数组元素 int a10,i;int a10,i;for(i=1;i10;i+)for(i=1;i10;i+)scanf scanf(“%
9、d%d”,&ai,&ai);思考:思考:int a3;int a3;scanf(scanf(“%d%d%d%d%d%d”,a);,a);是否正确?是否正确?数组的应用数组的应用例1:从键盘输入从键盘输入5个整数,将它们反序输个整数,将它们反序输出。出。main()main()main()main()int i;int i;int i;int i;int nums5;int nums5;int nums5;int nums5;for(i=0;i5;i+)for(i=0;i5;i+)for(i=0;i5;i+)for(i=0;i=0;i-)for(i=4;i=0;i-)for(i=4;i=0;i-
10、)for(i=4;i=0;i-)printf(%d,numsi);printf(%d,numsi);printf(%d,numsi);printf(%d,numsi);例例2 2:计算从键盘上任意键入的:计算从键盘上任意键入的1010个数的个数的和。和。main()main()int i;int i;float num10,sum=0.0;float num10,sum=0.0;printf(“Input 10 numbers:n”);printf(“Input 10 numbers:n”);for(i=0;i10;i+)for(i=0;i10;i+)scanf(%f,&numi);scanf
11、(%f,&numi);for(i=0;i10;i+)for(i=0;i10;i+)sum=sum+numi;sum=sum+numi;printf(The sum is%8.3fn,sum);printf(The sum is%8.3fn,sum);例题例题1、定义含有10个元素的数组,并将数组的元素按逆序重新存放后输出。2、若有一维数组,存放10个整数,从键盘输入一个数,输出与该值相同的数组元素的下标,若无相同值提示该值不存在。3、从键盘输入10个不相同的整数,存放在数组里,找出值最大的元素,并输出最大值所在的元素下标。4、从键盘输入10个不同整数,存放在数组里,删除其中下标为4的元素。例题
12、例题5、在一维数组中找出值最小的元素,并将其值与第1个元素的值对调。6、将10个数由小到大排序。7.2 多维数组多维数组当一个一维数组中的每个元素本身又是一个一当一个一维数组中的每个元素本身又是一个一维数组时,该数组为一个二维数组。维数组时,该数组为一个二维数组。一、二维数组的定义一、二维数组的定义1.格式:类型格式:类型 标识符标识符长度长度1长度长度2;2.二维数组元素需要两个下标表示:二维数组元素需要两个下标表示:例:例:int a34表示数组表示数组a中有中有3行行4列共列共12个个数据。数据。3.二维数组在存储空间中是二维数组在存储空间中是按行优先存储按行优先存储。二、二、二维数组的
13、引用二维数组的引用格式:标识符格式:标识符N1N2数组名数组名下标下标1下标下标2下标下标1从从0到长度到长度N1-1下标下标2从从0到长度到长度N2-1三、二维数组的初始化三、二维数组的初始化方法:方法:1.对全部元素赋初值,分行,各用一个对全部元素赋初值,分行,各用一个 int a23=1,2,3,4,5,6;2.整体赋值,系统自动分行整体赋值,系统自动分行int a23=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;7.3 字符数组字符数组字符数
14、据字符串数据数组中的各个元素均为字符变量数组中的各个元素均为字符变量每个元素只能存放一个字符每个元素只能存放一个字符字符数据字符数据字符常量字符常量字符变量字符变量字符串常量字符串常量a,An,tchar c;“Hello”字符串在数组中的存储格式字符串在数组中的存储格式字符串在字符数组中一个字符占用一个字节。字符串在字符数组中一个字符占用一个字节。字符串实际占有的存储单元数量等于字符串实际占有的存储单元数量等于字符串字符串长度长度+1。例:要定义一个存放字符串例:要定义一个存放字符串“CHINA”的字符的字符数组数组c,应定义为:,应定义为:char c6;0AN IHC串长串长=5c0 c
15、1 c2 c3 c4 c5关于字符数组的几点说明关于字符数组的几点说明1.字符串在内存中,系统自动加上字符串在内存中,系统自动加上0,作为字符串结束标记,字符串所占字节数为作为字符串结束标记,字符串所占字节数为串中字符个数串中字符个数+1 char c6=“abcde”;该该串共占串共占6个字节。个字节。2.程序中系统根据程序中系统根据0来判断字符串是来判断字符串是否结束,而不是通过数组长度。例如:否结束,而不是通过数组长度。例如:char c6=“ab”;c的长度为的长度为6,而实际到,而实际到b就结束。就结束。字符数组的输入输出字符数组的输入输出字符数组的输入1、用循环,同普通类型的数组:
16、、用循环,同普通类型的数组:char c10;int i;for(i=0;i10;i+)scanf(“%c”,&ci);2、用、用“%s”,数组名,将数组当作字符串来输入。,数组名,将数组当作字符串来输入。遇空格、回车结束。遇空格、回车结束。char c10;scanf(“%s”,c);3、用、用gets()函数,函数,一次输入一个整串,遇回车结一次输入一个整串,遇回车结束。如:束。如:char str10;gets(str);字符数组的输入输出字符数组的输入输出字符数组的输出(1)用用printf 函数,循环结构,逐一元素输函数,循环结构,逐一元素输出,格式为出,格式为%c。(2)用用pri
17、ntf函数,格式为函数,格式为%s,用数组名,用数组名,整串输出整串输出(3)用用puts()函数,一次输出整串。函数,一次输出整串。说明说明字符数组可以按字符串输出字符数组可以按字符串输出,输出时输出时,遇遇0结束结束字符数组中字符数组中,若有多个若有多个0,遇到第一个遇到第一个0,输出结束输出结束7.4 字符串处理函数字符串处理函数所有的函数在使用时,程序开始加文件包含:所有的函数在使用时,程序开始加文件包含:#include1.字符数组输出字符数组输出格式:格式:puts(字符数组字符数组);功能:从终端输出指定字功能:从终端输出指定字符数组符数组字符串处理函数字符串处理函数2.字符数组
18、输入,字符数组输入,遇回车结束遇回车结束 3.字符串连接字符串连接例:例:char c110=“abc”;strcat(c1,“efg”);puts(c1);格式:格式:gets(字符数组);字符数组);功能:从输入设备上输入功能:从输入设备上输入一个字符串,一个字符串,格式:格式:strcat(字符数组字符数组1,字符数组,字符数组2);功能:将字符数组功能:将字符数组2连接到字符数组连接到字符数组1的后面。的后面。字符串处理函数字符串处理函数4.字符串拷贝例:格式:格式:strcpy(字符数组字符数组1,字符数组,字符数组2););功能:将字符数组功能:将字符数组2复制给字符数组复制给字符
19、数组1。char c120=“abcde”,C2=“LMN”;strcpy(c1,c2);或或:strcpy(c1,“LMN”);puts(c1);strcpystrcpy说明说明(1)字符串不能彼此赋值)字符串不能彼此赋值,只能用拷贝函数。,只能用拷贝函数。(2)字符数组)字符数组1定义的长度必须比字符数组定义的长度必须比字符数组2大(或大(或相等)。相等)。(3)字符数组字符数组2可以用字符串常量,字符数组可以用字符串常量,字符数组1必须必须写成变量名写成变量名 。(4)连同连同0一起复制。一起复制。(5)可以复制部分字符,即可以复制部分字符,即 char c120,c2=“hello w
20、orld”;strcpy(c1,c2,4);只复制前只复制前4个字符个字符。(6)如果原数组如果原数组1中有字符,则复制后将原有内容中有字符,则复制后将原有内容覆盖(没覆盖的部分保留,但不显示)覆盖(没覆盖的部分保留,但不显示)。字符串处理函数字符串处理函数5.字符串比较格式:格式:strcmp(字符数组字符数组1,字符数组,字符数组2);功能:从左到右逐一比较数组功能:从左到右逐一比较数组1和数组和数组2各字符各字符的的ASCII 值,若相同,继续,若不同,返回一个值,若相同,继续,若不同,返回一个整数整数(以第一个不相同的字符比较为准以第一个不相同的字符比较为准)。如果数组如果数组1数组数
21、组2 函数值为正函数值为正如果数组如果数组1数组数组2 函数值为负函数值为负如果数组如果数组1=数组数组2 函数值为函数值为0数据数据的比较:的比较:char str110,str210 if(strcmp(str1,str2)=0)字符串处理函数字符串处理函数6.求字符数组(串)的长度格式:格式:strlen(字符数组)字符数组)功能:测试字符数组中所含字符的个数功能:测试字符数组中所含字符的个数 char str10=“Hello world”;printf(“%d”,strlen(str);结果:结果:11字符串处理函数字符串处理函数7.字符串字母大小写转换格式:格式:strlwr(字符数组)字符数组)功能:将数组中的大写字母转换成小写。功能:将数组中的大写字母转换成小写。格式:格式:strupr(字符数组)字符数组)功能:将数组中的小写字母转换成大写。功能:将数组中的小写字母转换成大写。char str=“Hello”;printf(“%s”,strupr(str);printf(“%s”,strlwr(str);
限制150内