资源预览内容
第1页 / 共27页
第2页 / 共27页
第3页 / 共27页
第4页 / 共27页
第5页 / 共27页
第6页 / 共27页
第7页 / 共27页
第8页 / 共27页
第9页 / 共27页
第10页 / 共27页
亲,该文档总共27页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
一维数组 1、数组概念的引入(必要性) 如用以处理从键盘输入恣意100个数,输出这些的半值这样的问题。 概念:数组由假设干个类型一样的元素组成,每个元素就是一个变量,每个数组都有一个称号,称为数组名。一个可以输入10个数的例子main() int i,a10; printf(Please input 10 numbers:); for (i=0;i10;i+) scanf( %d,&ai); printf( nyou input is :); for (i=0;i10;i+) printf( %d, ,&ai); 一维数组2 2、一、一维维数数组组的定的定义义 一一维维数数组组是指数是指数组组元素只需一个下元素只需一个下标标的数的数组组。 定定义义一一维维数数组组的普通格式如:的普通格式如: 类类型名型名 数数组组名整型常量表达式,名整型常量表达式, 如:如:int a5;int a5; 该语该语句句 (1) (1)定定义义了一个名了一个名为为a a的一的一维维数数组组。 (2) (2)方括号中的方括号中的5 5规规定定该该数数组组最多包容最多包容5 5个元素。个元素。 (3) (3)类类型名型名intint规规定了定了这这5 5个元素均个元素均为为整型整型变变量。量。 (4)C(4)C言言语语规规定定数数组组第第一一个个元元素素的的下下标标( (数数组组下下标标的的下下界界) )为为0 0;因因此此最最后后一一个个元元素素的的下下标标( (数数组组下下标标的的上上界界) )为为数数组组元素个数减元素个数减1 1a0a0 a1a1 a2a2 a3a3 a4a4 一维数组3、一维数组元素的运用 数组定义后,就可以在程序中运用数组元素。格式如下: 数组名下标表达式 如:int a10; a0=0; a1=1; a2=a0+a1; 一维数组运用数运用数组组元素元素应应留意:留意:(1)(1)系系统统在在内内存存中中为为数数组组分分配配一一块块延延续续的的存存储储单单元元,最最低低的的地地址址对对应应于于第第一一个个数数组组元元素素,最最高高的的地地址址对对应应于于最最后后一一个个数数组组元元素素。每每个个数数组组元元素素等等同同于于一一个个变变量。量。(2)C(2)C言言语语中,不能中,不能对对一个数一个数组组整体整体赋值赋值。 如:如: inta10,b10,k;for(k=0;k10;k+)scanf(“%d,&ak);b=a;/*error*/for(k=0;k10;k+)bk=ak; 一维数组(3) 在运用数组元素时,数组元素中的下标表达式的值必需是整型。 下标表达式值的下限为0,值的上限为该数组元素的个数减1。 运用数组时留意其下标不要越界。假设下标越界,程序无法得到正确的结果。一维数组4、数组元素的初始化普通方式为:类型名数组名整型常量表达式=常量1,常量2,例:inta10=1,2,3,4,5,6,7,8,9,10;该语句定义了一个动态数组,并对该动态数组进展了初始化。留意:1、所赋初值的类型必需与阐明的类型一致。2、在指定初值时,第一个值赋给下标为0的元素。3、不能够跳过前面的元素给后面的元素赋初值。 一维数组留意:1、假设初值的数据个数比数组元素少,那么系统自动给后面的元素补赋初值0。2、假设初值的数据个数比数组元素多,那么在编译时提示出错信息:toomanyinitializers.5、初始化时不指定数组长度。C言语中,可以在初始化时,不指定数组长度的个数。例:inta=1,2,3,4,5;这里,花括号里列出了5个初始化数据,它隐含地定义了该数组共有5个元素。等价于:inta5=1,2,3,4,5;字符数组字符数组概念的引入 C言语中没有字符串类型的变量,字符串的存储有两种方式。将字符串存储在一个字符数组中本节内容字符数组1 1、字符数、字符数组组的定的定义义 字符数字符数组组的每个元素存放一个字符。的每个元素存放一个字符。 定定义义字符数字符数组组的普通格式如:的普通格式如: char char 数数组组名整型常量表达式,名整型常量表达式, 如:如:char a10;char a10; 该语该语句句(1)(1)定定义义了一个名了一个名为为a a的字符数的字符数组组。 (2)(2)方方括括号号中中的的1010规规定定该该数数组组最最多多包包容容1010个个元素元素 字符数组2、数组元素的初始化(1)字符数组逐个元素赋初值。chars=H,e,l,l,o,0;字符数组(2)(2)在在赋赋初初值时值时直接直接赋赋字符串常量。字符串常量。char s=“hello;阐明:赋初值时,假设没给数组元素的个数,系统将按字符串中实践的字符个数来定义数组的大小。上述语句等价于:char s6=“hello;用字符串常量给字符数组赋初值时,系统在最后自动补上字符串标志0,另外花括号也可以省略。可写成:char s=“hello;字符数组例:chara5=“hello;(错误留意:1、字符数组要有足够的存储单元存储字符串。2、上面的语句定义了一个有5个元素的字符数组,但字符串常量中还包含一个字符串终了标志0,要占用6个存储单元,5个单元空间不够用。字符数组3给字符数组元素逐个赋初值。charstr9;str0=H;str1=e;str2=0;应留意:用字符数组来存放字符串时,假设是逐个字符赋值给数组元素,要在最后一个字符之后加上字符串终了标志0。用逐个字符给字符数组赋初值,对字符串的存取不太方便。字符数组4利用库函数strcpy给字符数组赋值。 方式:strcpy(字符数组1,字符数组2;作用是将字符数组2的内容复制到字符数组1中,复制时将字符数组2后面的字符串终了标志也复制到字符数组1中。例:charstr130,str230;strcpy(str1,howareyou);/*将howareyou.存放到str1*/strcpy(str1,str2);/*将str2存放到str1中*/字符数组留意:1、不能用赋值语句把字符串整体赋给字符数组。s1=“hello;(错误2、运用strcpy函数给字符数组赋值时,字符数组1必需定义得足够大,以便可以包容得下被复制的字符串。字符数组5 5、字符数、字符数组组的的输输入入输输出。出。(1)将字符数组中的字符串逐个字符输入输出。A、在规范输入输出函数printf和scanf中运用%c格式阐明符。例:main()charc10;intk;for(k=0;k10;k+)scanf(“%c,ck);for(k=0;k10;k+)printf(“%c,ck);printf(“n);B、运用getcharputchargetchgetche函数。字符数组2将整个字符串一次输入或输出。用%s格式符。例:charc=“china;printf(“%s,c);结果为:china留意:A、输出字符不包括终了符0;B、用%s格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。printf(“%s,c1);错误字符数组CC、假、假设设数数组长组长度大于字符串度大于字符串实实践践长长度,也只度,也只输输出到遇出到遇00终终了。了。D D、假、假设设一个字符数一个字符数组组中包含一个以上中包含一个以上00,那么遇到和第一个,那么遇到和第一个00就就终终了。利用了。利用scanfscanf输输入字符串,空格可作入字符串,空格可作为终为终了符。了符。例:例:charstr13;charstr13;scanf(“%sscanf(“%s,str);,str);输输入入howareyou!howareyou!printf(“%sprintf(“%s,str);,str);结结果果为为:howhow 不能写成:str字符数组运用字符串运用字符串处处置函数置函数1、puts(字符数组名作用是将一个字符串输出到终端。例:charstr=“ChinanBeijing;puts(str);结果为:ChinaBeijing2、gets(字符数组名作用是:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组的起始地址。例:gets(str);从键盘输入:computer将computer输入给字符数组str.留意:用puts和gets函数只能输入或输出一个字符串。字符数组6 6、其他字符串、其他字符串处处置串置串处处置函数置函数1、strcat(字符数组1,字符数组2作用:衔接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值字符数组1的地址。例:charstr130=“PeoplesRepublicof;charstr2=“China;printf(“%s,strcat(str1,str2);结果:PeoplesRepublicofChina留意1字符数组1必需足够大,以便包容衔接后的新字符串。2衔接前两个字符串都有一个0,衔接时将字符串1后面的0取消,只在新串最后保管一个0。字符数组6 6、其他字符串、其他字符串处处置串置串处处置函数置函数2strcmp字符串1,字符串2作用是比较字符串1和字符串2。比较时对两个字符串自左向右逐个字符相比按ASCII码值大小比较,直到出现不同的字符或遇到0为止。假设全部字符一样,那么以为两个字符串相等,前往值0;假设出现不一样的字符,那么以第一个不一样的字符的比较结果为准。假设字符串1字符串2,函数值为一正数。假设字符串1字符串2,函数值为一负数。假设字符串1字符串2,函数值为0。假设参与比较的两个字符串都由英文字母组成,那么有一个简单的规律:在英文字典中位置在后面的为大;小写字母比大写字母大。留意:对两个字符串比较,不能用这样的方式:if(str1=str2)printf(“yes);字符数组(3)strlen(3)strlen(字符数字符数组组作用:作用:测试测试字符串字符串长长度的函数。函数度的函数。函数值为值为字符串中的字符串中的实实践践长长度,不包括度,不包括00在内。在内。例:例:char str10=“Chinachar str10=“China; ; printf(“%d printf(“%d,strlen(str);,strlen(str); 输输出出结结果果为为:5 54 4strlwr(strlwr(字符串字符串作用是将字符串中大写字母作用是将字符串中大写字母换换成小写字母。成小写字母。5 5strupr(strupr(字符串字符串作用是将字符串中小写字母作用是将字符串中小写字母换换成大写字母。成大写字母。字符数组例:例:输输入一行字符,入一行字符,统计统计其中有多少个其中有多少个单词单词,单词单词之之间间用空用空格分隔开。格分隔开。分析:分析: 单词单词的数目可由空格出的数目可由空格出现现的次数决的次数决议议延延续续的假的假设设干干个空格作个空格作为为出出现现一次空格;一行开一次空格;一行开头头的空格不的空格不统计统计在内。在内。假假设测设测出一个字符出一个字符为为非空格,而它的前面字符是空格,那非空格,而它的前面字符是空格,那么表示么表示“ “新的新的单词单词开开场场了,此了,此时变时变量量NUMNUM单词单词数累数累加加1 1。假。假设设当前字符当前字符为为非空格而前面字符也是非空格,那非空格而前面字符也是非空格,那么意味着仍是原来么意味着仍是原来单词单词的的继续继续,NUMNUM值值不不变变。设设一个前面一个前面字符能否空格的字符能否空格的标标志志flagflag,当,当flag=0flag=0时时,表示前一个字符,表示前一个字符为为空格;空格; flag flag1 1时时,前一个字符,前一个字符为为非空格。非空格。字符数组#include #include main( )main( ) char str80; char str80; int k,num=0,flag=0; int k,num=0,flag=0; char c; char c; gets(str); gets(str); for (k=0;(c=strk)!=0;k+) if(c= ) flag=0; else if (flag=0) flag=1; num+; printf(“there are %d words in the line.n,num);字符数组在错误的语句下划一横线,并加以修正。 写一函数,输入一个数字字符串,要求输出这个数字字符串,但每两个数字间空一个空格,如:输入1990,应输出1 9 9 0。 main()charstr10;scanf(“请输入数字字符串:%sn,&str);insert(str);printf(“请输入数字字符串:);Scanf(“%s,str); strlen(str)Str2*i1-1= ;printf(“n结果是:n%s,str);insert(str)charstr;inti1;for(i1=strlen(str10);i10;i1-)str2*i1=stri1;str2i1-1=;printf(“n结果是:n%sstr);
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号