《c语言(第七章数组)课件.ppt》由会员分享,可在线阅读,更多相关《c语言(第七章数组)课件.ppt(56页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、7.1 一维数组一维数组数数组组:数数组组是是一一组组类类型型相相同同有有序序数数据据的的集集合合。用数组名和下标来唯一确定数组中的元素。用数组名和下标来唯一确定数组中的元素。一、一维数组的定义一、一维数组的定义形式形式:类型说明符类型说明符 数组名数组名 常量表达式常量表达式例例 int a10注意注意:(1)类型说明符规定了)类型说明符规定了数组元素的类型数组元素的类型(2)数组名应是合法的标识符,且不能与其它数组名应是合法的标识符,且不能与其它变量名相同。变量名相同。(3 3)方括号中常量表达式表示数组的长度(数)方括号中常量表达式表示数组的长度(数组元素的个数)。组元素的个数)。C语言
2、中,语言中,数组下标从数组下标从0开开始始.例例 int a10 10个元素分别用:个元素分别用:a0、a1、a2、a3、a4、.、a8、a9。(4)C语言语言不允许不允许对数组的对数组的大小大小做做动态定义动态定义.例如:例如:int n=5;int an;错误错误(5)允允许许在在同同一一个个类类型型说说明明中中,说说明明多多个个数数组组和多个变量。和多个变量。例如:例如:int a,b,c,d,k110,k220;二、数组元素的引用方式二、数组元素的引用方式 数组名数组名 下标下标 例例:a0=a5+a7-a2*3例例7.1 使数组元素使数组元素a0a9的值为的值为09,然后逆,然后逆序
3、输出。序输出。main()int i,a10;for(i=0;i=0;i-)printf(%d,ai);下标运算符下标运算符单目运算符单目运算符优先级为优先级为1左结合左结合不能用不能用()只能逐个引用数组元素,不能一次引用整个数组只能逐个引用数组元素,不能一次引用整个数组3、全部元素均初始化为、全部元素均初始化为0,int a10=0,0,0,0,0,0,0,0,0,0;或或 int a10=0;4、在在对对全全部部数数组组元元素素赋赋初初值值时时,可可以以不不指指定定数数组长度。组长度。例如例如:int a5=1,2,3,4,5;可以写成:可以写成:int a=1,2,3,4,5;四、一维
4、数组程序举例四、一维数组程序举例例例7.2 用数组来处理用数组来处理Fibonicci数列的前数列的前40项项。f0f1f2f3f4f5f39.11f3901452339235/*ch7_2.c*/#include stdio.hmain()int i;long f40=1,1;for(i=2;i40;i+)fi=fi-1+fi-2;for(i=0;ia1,则交换;然则交换;然 后比较第二个数与后比较第二个数与第三个数;依次类推,直至第第三个数;依次类推,直至第n-1个数和第个数和第 n个数比较为止个数比较为止第一趟冒泡排序第一趟冒泡排序,结果,结果最大最大的数被安置在最后一个元素位置上的数被
5、安置在最后一个元素位置上(2)对前)对前n-1个数进行第二趟冒泡排序,个数进行第二趟冒泡排序,结果使结果使 次大次大的数被安置在的数被安置在 第第n-1个元素位个元素位置置(3)重复上述过程,共经过)重复上述过程,共经过n-1趟冒泡排趟冒泡排序后,排序结束序后,排序结束例38 49 65 76 13 27 30 97 第一趟38 49 65 13 27 30 76 第二趟38 49 13 27 30 65 第三趟38 13 27 30 49 第四趟13 27 30 38 第五趟13 27 30 第六趟49 38 65 97 76 13 27 30 初始关键字 38497697139727973
6、09713767676273013652765306513134949304927382738303813 27 第七趟#include stdio.hmain()int a11,i,j,t,flag;printf(“input 10 numbers:n”);for(i=1;i11;i+)scanf(%d,&ai);for(j=1;j=9;j+)flag=0;for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;flag=1;if(flag=0)break;for(i=1;i11;i+)printf(%5d,ai);例初始:49 38 65 97 76 13 27 kji=113
7、49一趟:13 38 65 97 76 49 27 i=22738二趟:13 27 65 97 76 49 38 三趟:13 27 38 97 76 49 65 四趟:13 27 38 49 76 97 65 五趟:13 27 38 49 65 97 76 六趟:13 27 38 49 65 76 97 kkkkjjjjjjjjjj#include stdio.hmain()int i,j,min,t,a10;for(i=0;i10;i+)scanf(%d,&ai);for(i=0;i9;i+)min=i;for(j=i+1;jaj)min=j;if(min!=i)t=ai;ai=amin;a
8、min=t;for(i=0;imaxaijmax,把,把aijaij作为新的临时最大值,并记录下其下作为新的临时最大值,并记录下其下标标i i和和j j。当全部元素比较完后,。当全部元素比较完后,maxmax是整个矩是整个矩阵全部元素的最大值。阵全部元素的最大值。main()int i,j,row=0,colum=0,max;int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;/*首先把第一个元素首先把第一个元素a00作为临时最大值作为临时最大值max*/for(i=0;i=2;i+)/*用两重循环遍历全部元素用两重循环遍历全部元素*/for(j=0;j m
9、ax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);运行结果运行结果:max=10,row=2,colum=1 注意:本例中得到的行列值从注意:本例中得到的行列值从0始。始。例例7.8求矩阵求矩阵A55的转值矩阵,结果仍存放在原的转值矩阵,结果仍存放在原数组中。数组中。#include stdio.hmain()int a55,i,j,t;for(i=0;i5;i+)for(j=0;j5;j+)scanf(%d,&aij);for(i=0;i5;i+)for(j=0;ji;j+)t=aij;aij=aji
10、;aji=t;for(i=0;i5;i+)for(j=0;j5;j+)printf(%5d,aij);printf(n);getch();二、字符数组的初始化二、字符数组的初始化1、逐个元素初始化、逐个元素初始化 char c10=I,a,m,h,a,p,p,y;2、数据少于数组长度、数据少于数组长度,多余元素自动为多余元素自动为“空空”。char c13=I,a,m,h,a,p,p,y;3、指定初值时,未指定数组长度,则长度等于初值个数。、指定初值时,未指定数组长度,则长度等于初值个数。char c =I,a,m,h,a,p,p,y;10个初值,因此,数组个初值,因此,数组c的长度是的长度是
11、10。I a m h a p p y 0 0 0 0c0c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11c12c13I a m h a p p y c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 三、字符数组的引用三、字符数组的引用引用一个元素,得到一个字符引用一个元素,得到一个字符。例例7.9 输出一个字符串。输出一个字符串。main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(“%c”,ci);/*引用数组元素引用数组元素ci,得到一个字符,得到一个字符*/printf(n);输出结果:输出结果:I
12、 am a boyI a m h a p p y 0 0 0 0c0 c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11c12c132、字符串在存储时,系统自动在其后加上、字符串在存储时,系统自动在其后加上结束标志结束标志0(占一字节,其值为二进(占一字节,其值为二进制制0)char c14 =I am happy”;已明确指定字符数组的长度为已明确指定字符数组的长度为14,但只,但只给给10个初值,不足部分全部补个初值,不足部分全部补0。I a m h a p p yc0 c1 c2 c3 c4 c5 c6 c7 c8 c9 3、如果如果:char c10 =I am ha
13、ppy”;没有存储结束标记没有存储结束标记0,该字符数组,该字符数组不能作为字符串处理。不能作为字符串处理。.*00.*.*0*.*.*.*0.*00diamond0diamond1diamond2diamond3diamond44、二维字符数组初始化、二维字符数组初始化例例 char diamond5=.,.,*,.,*,.,*,*,.,.,.,*,.,*,.,*,.,.,*;fruit0fruit1fruit2fruit3fruit4Apple 0 0Orang e0Grape00Pear000Peach00例例 char fruit 7=Apple,Orange,Grape,Pear,P
14、each;五、字符数组的输入输出五、字符数组的输入输出1、两种输出方法:、两种输出方法:1用用“%c”格式符格式符逐个逐个输入输出。输入输出。2用用“%s”格式符按字符串输入输出。格式符按字符串输入输出。“%s”格格式式输输出出字字符符串串时时,printf()函函数数的的输输出出项项是是字字符符数数组组名名,而而不不是是元元素素名名。只写数组名只写数组名,代表数组的起始地址。代表数组的起始地址。例例 main()char a=“Hello”;printf(“%s”,a);结果:结果:Hello H e l l o 0H e l l o 0023142、遇到、遇到 0 就停止输出就停止输出,0
15、不输不输出出例例 main()char a5=H,e,l,l,o;printf(“%s”,a);结果:结果:Hello#-=*H e l l o023143、数组的长度大于字符串的实际长度,也是、数组的长度大于字符串的实际长度,也是遇到遇到0结束结束main()char a10=“Hello”;printf(%s,a);输出:输出:Hello H e l l o 0 0 0 0 0 H e l l o 0main()char a=H,e,l,0,l,o,0;printf(%s,a);输出:输出:Hel h e l 0 l o 04、数组中有多个、数组中有多个0时时,遇第一个结束遇第一个结束 c
16、har str15,str25,str35;scanf(%s%s%s,str1,str2,str3);输入:输入:How are you?H o w 0 a r e 0 y o u?0str1str2str35、字符数组的输入、字符数组的输入例例 若准备将字符串若准备将字符串“This is a string.”记录记录到字符数组到字符数组s中,正确的输入语句为:中,正确的输入语句为:(A)scanf(“%20s”,s);(B)for(k=0;k17;k+)sk=getchar();sk=0;(C)k=0;while(c=getchar()!=n)sk+=c;sk=0;六、字符串处理函数六、字
17、符串处理函数1、puts(字字符符数数组组):输输出出字字符符串串(以以0结结尾)。尾)。char c6=“China”;/*printf、puts均均以以0结结尾尾.*/printf(%sn,c);/*printf需要格式控制符需要格式控制符%s*/puts(c);/*puts不需要格式控制符不需要格式控制符,且且自动换行自动换行*/2、gets(字符数组字符数组):输入字符串到数组。输入字符串到数组。char str12;gets(str);/*以以回车回车作为输入数据的结束作为输入数据的结束*/从键盘输入:从键盘输入:I am happy则则str的内容为的内容为 “I am happy
18、”注意:注意:gets()、puts()一次只能输入输出一个字一次只能输入输出一个字符串。而符串。而scanf()、printf()可以输入输出几个字可以输入输出几个字符串。符串。3、strcat(字符数组字符数组1,字符数组字符数组2):把把“字符串字符串2”连接到连接到“字符串字符串1”的后面。的后面。例例:main()char str115=I am;char str210=Chinese.;strcat(str1,str2)printf(%sn“,str1);输出输出:I am Chinese.4、strcpy(字符数组字符数组1,字符数组字符数组2):把把“字符串字符串2”的值拷贝到
19、的值拷贝到“字符串字符串1”中。中。例例:main()char str110;char str2=Chinese;strcpy(str1,str2);puts(str1);输出输出:Chinese5、strcmp(字符串字符串1,字符串字符串2):比较比较“字符串字符串1”、“字符串字符串2”,例例:strcmp(str1,str2);strcmp(China,Korea);strcmp(str1,Beijing);比较规则:比较规则:逐逐个个字字符符比比较较ASCII码码,直直到到遇遇到到不不同同字字符或符或0,比较结果是该函数的返回值。比较结果是该函数的返回值。字字符符串串1 字字符符串串
20、2,函函数数的的返返回回值值:正正整整数数注意、字符串只能用注意、字符串只能用strcmp函数比较,不函数比较,不能用关系运算符能用关系运算符“=”比较。比较。if(strcmp(str1,str2)=0)printf(yes);if(str1=str2)printf(yes);6、strlen(字符数组字符数组):测试字符串长度。测试字符串长度。例:例:char str10=“china”;printf(“%d”,strlen(str);结果输出结果输出:57、strlwr(字符串字符串):将字符串中的大写字母转将字符串中的大写字母转换为小写字母。换为小写字母。例:例:char str2=“
21、ABCdef;strupr(str2);puts(str2);结果输出结果输出:abcdef8、strupr(字符串字符串):将字符串中的小写字母将字符串中的小写字母转换为大写字母。转换为大写字母。例:例:char str2=abcdef;strupr(str2);puts(str2);结果输出结果输出:ABCDEF注意:以上函数均是库函数,使用时必须用注意:以上函数均是库函数,使用时必须用#include语句包含头文件。语句包含头文件。使用使用puts(),gets()应包含头文件应包含头文件“stdio.h”使用使用strcat(),strcpy(),strcmp(),strlen(),s
22、trlwr(),strupr()应包含头文件应包含头文件“string.h”例例7.9 输入三个字符串,并找出其中最大者。输入三个字符串,并找出其中最大者。分析:用分析:用strcmp()函数比较字符串的大小。函数比较字符串的大小。首首先先比比较较前前两两个个,把把较较大大者者拷拷贝贝给给字字符符数数组组变变量量string(用用strcpy()函函数数拷拷贝贝),再再比比较较string和和第第三三个字符串个字符串。Str0Str1 Str20 1 2 3 4 5 6 7 8 9 10 19 C hn a 0iJ aa n 0pI ni a 0d程序:设字符串最长为程序:设字符串最长为19个
23、字符。个字符。#include string.h main()char string20;char str320;int i;for(i=0;i 0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);printf(nthe largest string is:n%sn,string);例例7.10 输入一行字符,统计其中有多少个单词输入一行字符,统计其中有多少个单词输入一字符串给输入一字符串给 string i=0 num=0 word=0当当(c=stringi)!
24、=0)c=空格空格真真真真假假假假word=0word=1num=num+1i=i+1输出:输出:numword=0#include main()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;else if(word=0)word=1;num+;printf(There are%d words in the linen,num);当前字符当前字符=空格空格是是否否未出现新单词,使未出现新单词,使word=0,num不累加不累加前一字符为空格前一字符为空格(w
25、ord=0),新单词出现新单词出现,word=1,num加加1前一字符为非空格前一字符为非空格(word=1),未出现新单词未出现新单词,num不变不变否否0是是11是是1未未01否否0是是12否否1未未12是是1未未02否否0是是13是是1未未03否否0是是14否否1未未14否否1未未14否否1未未14例例 输入:输入:I am a boy.当前字符当前字符是否空格是否空格word原值原值新单词开始否新单词开始否word新值新值num值值 Iamaboy.课堂练习1.以下对一维数组以下对一维数组a的正确说明是的正确说明是:A)char a(10);B)int a10;C)int k=5,ak
26、;D)char a=a,b,c;2.以下对二维数组以下对二维数组a的正确说明是的正确说明是:A)char a105;B)int a23;C)int k=5,akk-2;D)char a43=“abc”,“bcd”,“cde”;E)int a34=1,5,9;3、以下程序是否正确?如果错了,怎么改?、以下程序是否正确?如果错了,怎么改?程序程序1:对两个字符串进行比较。:对两个字符串进行比较。#include main()char str1=abcdefg;char str2=abcdefg;if(str1=str2)printf(yes);else printf(no);程序程序2:输出一个字符串。输出一个字符串。main()char c10=I,a,m,a,b,o,y;int i;for(i=0;i10;i+)printf(“%c”,ci);printf(n);If(strcmp(str1,str2)=0)程序程序3:输出一个字符串。:输出一个字符串。main()int i;char c1 =How are you?;printf(%s,c1 );程序程序4:输出一个字符串。:输出一个字符串。main()char c6=“China”;printf(%sn,c);puts(c);printf(%s,c1);