欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    kj-第6章数组课件.ppt

    • 资源ID:14914803       资源大小:749.50KB        全文页数:65页
    • 资源格式: PPT        下载积分:30金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要30金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    kj-第6章数组课件.ppt

    第1页第第6章章 数组数组 本章概述 本章的学习目标主要内容第2页本章概述本章概述l本章主要介绍了一维数组、二维数组、字本章主要介绍了一维数组、二维数组、字符数组的定义和使用方法符数组的定义和使用方法l结合大量程序实例介绍了常用的应用数组结合大量程序实例介绍了常用的应用数组的算法的算法第3页本章的学习目标本章的学习目标l本章教学目的本章教学目的:l 掌握一维数组的定义和使用方法掌握一维数组的定义和使用方法l 掌握二维数组的定义和使用方法掌握二维数组的定义和使用方法l 掌握字符数组的定义和使用方法掌握字符数组的定义和使用方法l 能使用数组编写程序并掌握常用的算法能使用数组编写程序并掌握常用的算法l本章教学重点本章教学重点:数组的定义和使用方法数组的定义和使用方法l本章教学难点本章教学难点:使用数组的常用算法使用数组的常用算法第4页主要内容主要内容6.1 一维数组一维数组6.2 二维数组二维数组6.3 字符数组与字符串字符数组与字符串 6.4 本章小结本章小结 第5页6.1 一维数组一维数组定义一维数组的形式如下:定义一维数组的形式如下: 类型说明符类型说明符 数组名数组名常量表达式常量表达式; 例如:例如: int a10;定义了有定义了有10个元素的整型数组个元素的整型数组a; 例如:例如: float score80,sum30;定义了有定义了有80个元素的实型数组个元素的实型数组score ,有,有30个元素的实型数组个元素的实型数组sum; 例如:例如: char str60,name8,num10;定义了有定义了有60个元素的字符型数组个元素的字符型数组str,有,有8个元素的字符型数组个元素的字符型数组name,有有10个元素的字符型数组个元素的字符型数组num。6.1.1 一维数组的定义一维数组的定义第6页一维数组的几点说明一维数组的几点说明(1 1)数组名的命名规则与变量名的命名规则相同。)数组名的命名规则与变量名的命名规则相同。(2 2)常量表达式的值表示数组元素的个数,即数组长度。)常量表达式的值表示数组元素的个数,即数组长度。例如定义例如定义“int a10int a10;”后,表示数组后,表示数组a a长度为长度为1010,数组,数组a a有有1010个元素,个元素,1010个数组元素的下标取个数组元素的下标取0 0、1 1、2 2、3 3、4 4、5 5、6 6、7 7、8 8、9 9这这1010个整数,个整数,即数组即数组a a的的1010个元素分别表示为:个元素分别表示为: a0a0、a1a1、a2a2、a3a3、a4a4、a5a5、a6a6、a7a7、a8a8、a9a9。(3)一个数组的所有元素是同种类型的一组变量。例如定义)一个数组的所有元素是同种类型的一组变量。例如定义“float s5;” 后,相当于定义了一组后,相当于定义了一组float型变量,即型变量,即s0、s1、s2、s3、s4中中 的每一个都是的每一个都是float型变量。型变量。(4)在同一个函数中,数组名不能与其它变量名相同。下面是错误的:)在同一个函数中,数组名不能与其它变量名相同。下面是错误的: main()() int a; float a5; 第7页(6 6)方括号中的常量表达式,可以包括常量和符号常量,但不能是变量名,即)方括号中的常量表达式,可以包括常量和符号常量,但不能是变量名,即C C语言不允许对数组的大小作动态定义。例如下面定义是错误的:语言不允许对数组的大小作动态定义。例如下面定义是错误的: int mainint main()() int nint n; scanfscanf(“%d”%d”,&n&n);); float anfloat an; 下面定义是可以的:下面定义是可以的: # define N 5# define N 5 int main int main()() float aN float aN,b3+Nb3+N; (5)允许在同一个类型说明中定义多个数组和变量,例如:)允许在同一个类型说明中定义多个数组和变量,例如: int i,j,k,a6,b8,c9;(7)系统为数组元素所分配的内存空间是连续的。)系统为数组元素所分配的内存空间是连续的。第8页一维数组元素的引用和初始化一维数组元素的引用和初始化 1.一维数组元素的引用必须先定义数组,然后才可以引用数组元素。必须先定义数组,然后才可以引用数组元素。数组元素的表示形式为:数组元素的表示形式为: 数组名数组名 下标下标 下标可以是整型常量或整型表达式,下标取值下标可以是整型常量或整型表达式,下标取值范围是范围是0 0到到“数组长度数组长度-1”-1”范围内的整数范围内的整数 第9页例6.1 求一维整型数组元素值的总和以及平均值 输入:10 30 50 70 90 110 #include int main()() int n,sum=0,a6; float aver; for ( n=0;n=5;n+) scanf(“%d”,&an);); sum=sum+ an; aver =sum/6.0; for ( n=0;n6;n+) printf(“%d,”,an);printf(“%d,%fn”, sum,aver) ; return 0; 输出:输出:1010,3030,5050,7070,9090,110110,360360,60.00000060.000000 第10页2.2.一维数组元素的初始化一维数组元素的初始化 lint a6;数组元素是没有初始值,数组元素值是不确定的。lint x6=1,3,5,7,9,11;上面定义将数组初始化为:x0=1、x1=3、x2=5、x3=7、x4=9、x5=11 lint x6=1,3;可以只给数组的一部分元素赋初值,其它值为0。 lint x =1,3,5,7,9,11;对全部数组元素赋初值时,允许省略数组长度 。l若数组元素的初值全为零,可以写成 :lint x6=0 ; 第11页例例6.2 从键盘输入一个数,在数组中按顺序查找与该数相等的从键盘输入一个数,在数组中按顺序查找与该数相等的数,输出其所在位置。数,输出其所在位置。# include # define N 10int main()() int n,m,sign=0;int numN=16,35,48,29,56,43,93,64,90,48;printf(“Please input the number:”) ;scanf(“%d”,&n););for ( m=0;mN;m+) if (n=numm) printf(“%d,%d n”,m,numm);sign=1; if(sign=0)printf(“Have no this number。”) ;return 0;第12页例例6.2 从键盘输入一个数,在数组中按顺序查找与该数相等从键盘输入一个数,在数组中按顺序查找与该数相等的数,输出其所在位置。的数,输出其所在位置。若输入:若输入:48输出为:输出为:2,48 9,48若输入:若输入:93输出为:输出为:6,93若输入:若输入:123输出为:输出为:Have no this number。第13页例例6.3 将随机产生的将随机产生的100个整数存储在数组中,找出其中最大的数及其个整数存储在数组中,找出其中最大的数及其在数组中的下标(若有多个相同的最大数,则取第一个的下标)。在数组中的下标(若有多个相同的最大数,则取第一个的下标)。# define N 10# include # include int main()int k, max, loca=0, aN; srand(time(NULL); /*设置随机数种子为当前时间*/ for (k=0;kN;k+) ak=rand(); /*产生随机数*/ for (k=0;kN;k+) printf(%d,ak); printf(n); max=a0; for(k=1;kmax) max=ak; loca=k; printf(%d,%dn,max,loca); return 0; 函数srand()是设置随机数种子,每次执行程序时该函数产生不同的整数序列,也就是传递给srand()一个整数,以便决定rand()函数从何处开始生成随机数。函数srand()调用time(NULL)返回一个自1970年1月1日以来经历的秒数。 函数rand()的值是取值为0到32767之间的随机整数。第14页例例6.4 对从键盘输入的对从键盘输入的10个整数,用选择排序法将个整数,用选择排序法将它们由大到小排序。它们由大到小排序。 第第1次找到次找到10个数中的最大数,查找的范围是下个数中的最大数,查找的范围是下标为标为0到到9范围内的所有数组元素,记住存储这个最大范围内的所有数组元素,记住存储这个最大数的数组元素的下标,将该下标对应的数组元素与下数的数组元素的下标,将该下标对应的数组元素与下标为标为0的数组元素的值对换,使下标为的数组元素的值对换,使下标为0的数组元素中的数组元素中存储最大数,即下标为存储最大数,即下标为0的数组元素中存储的是:下的数组元素中存储的是:下标为标为0到到9范围内的所有数组元素中的最大数。范围内的所有数组元素中的最大数。 第第2次找到剩余的次找到剩余的9个数(除去第个数(除去第1次找到最大数)次找到最大数)中的最大数,查找的范围是下标为中的最大数,查找的范围是下标为1到到9范围内的所有范围内的所有数组元素(除去下标为数组元素(除去下标为0的数组元素),记住存储这的数组元素),记住存储这个最大数的数组元素的下标,将该下标对应的数组元个最大数的数组元素的下标,将该下标对应的数组元素与下标为素与下标为1的数组元素的值对换,使下标为的数组元素的值对换,使下标为1的数组的数组元素中存储这个范围内的最大数,即下标为元素中存储这个范围内的最大数,即下标为1的数组的数组元素中存储的是:下标为元素中存储的是:下标为1到到9范围内的所有数组元素范围内的所有数组元素中的最大数。中的最大数。第15页 第第3 3次找到剩余的次找到剩余的8 8个数(除去第个数(除去第1 1次找到最大数、除去第次找到最大数、除去第2 2次找次找到最大数)中的最大数,查找的范围是下标为到最大数)中的最大数,查找的范围是下标为2 2到到9 9范围内的所有范围内的所有数组元素(除去下标为数组元素(除去下标为0 0和和1 1的数组元素),记住存储这个最大数的数组元素),记住存储这个最大数的数组元素的下标,将该下标对应的数组元素与下标为的数组元素的下标,将该下标对应的数组元素与下标为2 2的数组的数组元素的值对换,使下标为元素的值对换,使下标为2 2的数组元素中存储这个范围内的最大的数组元素中存储这个范围内的最大数,即下标为数,即下标为2 2的数组元素中存储的是:下标为的数组元素中存储的是:下标为2 2到到9 9范围内的所范围内的所有数组元素中的最大数。有数组元素中的最大数。 依次类推。依次类推。 直到第直到第9次找到剩余的次找到剩余的2个数中的最大数,查找的范围是下标为个数中的最大数,查找的范围是下标为8和和9对应的两个数组元素,记住存储这个最大数的数组元素的下对应的两个数组元素,记住存储这个最大数的数组元素的下标,将该下标对应的数组元素与下标为标,将该下标对应的数组元素与下标为8的数组元素的值对换,使的数组元素的值对换,使下标为下标为8的数组元素中存储这个范围内的最大数,即下标为的数组元素中存储这个范围内的最大数,即下标为8的数的数组元素中存储的是:下标为组元素中存储的是:下标为8和和9两个数组元素中的最大数。剩下两个数组元素中的最大数。剩下的一个数放在下标为的一个数放在下标为9的数组元素中,显然是最小的数。的数组元素中,显然是最小的数。 这种排序方法称为选择排序法。这种排序方法称为选择排序法。第16页例例6.4 对从键盘输入的对从键盘输入的10个整数,用选择排序法将个整数,用选择排序法将它们由大到小排序。它们由大到小排序。# define N 10# include int main ( ) int i, j, m, temp, aN; for (i=0; iN; i+) scanf (%d, &ai); for(i=0;i=N-1;i+) printf(%5d, ai); printf(n); for (i=0; i=N-2; i+) m=i; for (j=i+1; jam) m=j; temp=ai; ai=am; am=temp; for (i=0; i=N-1; i+) printf (%5d, ai); printf(n); return 0;第17页例6.4 对从键盘输入的10个整数,用选择排序法将它们由大到小排序。若输入:若输入:4 9 1 3 0 5 7 2 8 6输出为:输出为:4 9 1 3 0 5 7 2 8 6 9 8 7 6 5 4 3 2 1 0第18页例例6.5 数组数组x的的10个数已经按从大到小的顺序存放好了,从键盘输入数个数已经按从大到小的顺序存放好了,从键盘输入数y,将,将y插入数组插入数组x中,使插入后的数组中,使插入后的数组x中的中的11个数仍按从大到小的顺序存放。个数仍按从大到小的顺序存放。# define N 11# include int main() int i,k,y; int xN= 98,96,87,78,72,64,56,51,43,36; for (k=0;k=N-2;k+) printf(“%d ,”,xk); printf(“n input the number insertedn”); scanf(“%d”,&y); if (y=xN-2) xN-1=y; /*若若y小于或等于小于或等于xN-2,*/ /* 则将则将y插在最后插在最后 */ else i=0; while (ixi) /*若若y大于大于xi,则将,则将y */ /* 插在下标为插在下标为i的位置的位置 */ for (k=N-2;k=i;k-) xk+1=xk; /*下标大于或等于下标大于或等于i的元素的元素*/ /* 依次向后移动一个位置依次向后移动一个位置*/ xi=y; break; i+; for (k=0;kbott为止。为止。 注意注意:使用折半查找法,要求数组一定是有序的。:使用折半查找法,要求数组一定是有序的。第21页例6.6 数组数组b中的中的10个数按从个数按从小到大的顺序存放,现从键小到大的顺序存放,现从键盘输入一个数盘输入一个数a,请使用折半,请使用折半查找法,在数组查找法,在数组b中查找与数中查找与数a相同的数的位置。相同的数的位置。# define N 10# include int main() int top, bott, mid, loca, a, bN=1,2,3,4,5,6,7,8,9,10; scanf(%d,&a); top=0; bott=N-1; loca=-1; while (top=bott) mid=(top+bott)/2; if (a=bmid) printf(%d,%dn, a, mid); loca=mid; break; else if (abmid) bott=mid-1; else top=mid+1; if (loca=-1) printf(Did not find out %dn,a); return 0; 第22页6.2.1 二维数组的定义二维数组的定义 二维数组定义的一般形式为:二维数组定义的一般形式为: 类型说明符类型说明符 数组名数组名 常量表达式常量表达式1 1 常量表达式常量表达式22 例如下面定义了二维数组例如下面定义了二维数组scorescore和和areaarea,scorescore有有2424(4 4行行6 6列)列)个数组元素,个数组元素,areaarea有有2121(3 3行行7 7列)个数组元素,每个数组元素列)个数组元素,每个数组元素是一个是一个floatfloat型变量:型变量: float score46float score46,area37area37; 例如下面定义了二维数组例如下面定义了二维数组a a、b b和和numnum,a a有有6 6(2 2行行3 3列)个数组元素,列)个数组元素,b b有有1212(3 3行行4 4列)个数组元素,列)个数组元素,numnum有有3030(3 3行行1010列)个数组元素,列)个数组元素,每个数组元素都是一个每个数组元素都是一个intint型变量:型变量: int a23,b34int a23,b34,num310num310;第23页 二维数组中的元素在内存中是按行顺序存放的,系统为二维数组中的元素在内存中是按行顺序存放的,系统为它们分配连续的内存空间,即先放第一行的元素,再放第二它们分配连续的内存空间,即先放第一行的元素,再放第二行的元素,行的元素, 。 例如,上面定义的数组例如,上面定义的数组a的的6个元素在内存中按如下顺序个元素在内存中按如下顺序排列:排列: a00,a01,a02,a10,a11,a12 可以把二维数组看成是一种特殊的一维数组,这个一维数可以把二维数组看成是一种特殊的一维数组,这个一维数组中的每个元素又是一个一维数组。例如,可以把上面定义组中的每个元素又是一个一维数组。例如,可以把上面定义的二维数组的二维数组num看成是一维数组,这个一维数组有看成是一维数组,这个一维数组有num0、num1、num2三个元素。每个元素(三个元素。每个元素(num0或或num1或或num2)都是包含)都是包含10个元素的一维数组,个元素的一维数组,num0、num1和和num2分别是三个一维数组的名称。分别是三个一维数组的名称。 如下所示:如下所示: 第24页 也可以定义二维以上的多维数组,也可以定义二维以上的多维数组, 例如例如“int x342;”, 定义了有定义了有24个数组元素的三维数组个数组元素的三维数组x。 第25页6.2.2 二维数组元素的引用和初始化1二维数组元素的引用二维数组元素的引用 引用二维数组元素的一般形式为:引用二维数组元素的一般形式为: 数组名数组名行下标行下标列下标列下标 下标可以是整型变量或整型表达式,例如,下标可以是整型变量或整型表达式,例如,num12、numij 、numi+1j-2。行下标不能大于或等于数组的行。行下标不能大于或等于数组的行数,列下标不能大于或等于数组的列数。数,列下标不能大于或等于数组的列数。 可以将二维数组元素看成是一个普通变量,二维数组元素可以将二维数组元素看成是一个普通变量,二维数组元素可以被赋值,二维数组元素可以出现在表达式中。可以被赋值,二维数组元素可以出现在表达式中。 通常使用双重循环操作二维数组元素,外层循环控制二维通常使用双重循环操作二维数组元素,外层循环控制二维数组行下标的变化,内层循环控制二维数组列下标的变化。数组行下标的变化,内层循环控制二维数组列下标的变化。第26页例例6.7 已知矩阵已知矩阵A和和B如下,矩阵如下,矩阵C=A+2B, 矩阵矩阵D= 8A- B,请输出矩阵,请输出矩阵C和和D。 # include int main() int a23,b23,c23,d23 ,i,j,k=1; for (i=0;i2;i+)for (j=0;j3;j+) aij=k+; bij=aij+6; for (i=0;i2;i+) for (j=0;j3;j+) cij=aij+2*bij; dij=8*aij-bij; for (i=0;i2;i+) for (j=0;j3;j+) printf(%5d”,cij); printf(n); for (i=0;i2;i+) for (j=0;j3;j+) printf(%5d”,dij); printf(n); return 0;第27页例6.7 已知矩阵A和B如下,矩阵C=A+2B, 矩阵D= 8A- B,输出矩阵C和D。输出如下:输出如下:15 18 2124 27 30 1 8 1522 29 36第28页2. 二维数组元素的初始化 (1)分行给二维数组各元素赋初值,例如: int a23=1,2,3,4,5,6 ; 将将1,2,3分别赋给第一行的分别赋给第一行的3个元素,将个元素,将4,5,6分别赋给第二行分别赋给第二行的的3个元素。个元素。(2)只用一个花括号,按排列顺序对各元素赋初值。 例如下面的作用与上面相同。 int a23=1,2,3,4,5,6 ;(3)可以只对部分元素赋值。 例如:例如:int b23=1,2,3 ; 相当于相当于b00=1,b01=2,b02=0,b10=3,b11=0, b12=0。即上面没有对应列出值的数组各元素的初值取。即上面没有对应列出值的数组各元素的初值取0。 例如:例如:int b23=1,2, ; 相当于相当于b00=1,b01=2,其余元素(包括第二行)初值都是,其余元素(包括第二行)初值都是0 。 例如:例如:int b23=0,1,0,0,3 ; 相当于相当于b01=1, b12=3,其余元素都是,其余元素都是0。第29页二维数组元素的初始化 (4)可以省略行数。例如下面两种定义等价:)可以省略行数。例如下面两种定义等价: int a23= 1,2,3,4,5,6 ; int a 3=1,2,3,4,5,6 ;后一种定义省略了行数后一种定义省略了行数2。但要注意不能省略为。但要注意不能省略为 “int a2 =1,2,3,4,5,6;对部分数组元素赋初值时,也可以省略了行数,对部分数组元素赋初值时,也可以省略了行数,但应分行赋初值。例如下面的定义:但应分行赋初值。例如下面的定义: int a 4=1,2,3, ,6,7,8,9 ;第30页6.2.3 二维数组应用举例例6.8 已知矩阵已知矩阵A和和B如下,如下,A、B分别表示分别表示A、B的转置矩阵,的转置矩阵,C=A+B,输出矩阵,输出矩阵C。第31页例6.8 已知矩阵已知矩阵A和和B如下,如下,A、B分别表示分别表示A、B的转置矩阵,的转置矩阵,C=A+B,输出矩阵,输出矩阵C。 # include int main() int a23=1,2,3,4,5,6; int b23=7,8,9,10,11,12; int i,j,a132,b132,c32; for (i=0;i2;i+) for (j=0;j3;j+) a1ji=aij; /* a1是是a的转置矩阵的转置矩阵*/ b1ji=bij; /* b1是是b的转置矩阵的转置矩阵*/ for (i=0;i3;i+) for (j=0;j2;j+) cij=a1ij+b1ij;for (i=0;i3;i+) for (j=0;j2;j+) printf(%5d”,cij); printf(n); return 0; 输出如下:输出如下:8 1410 1612 18第32页例例6.9 打印打印6行如下形式的扬辉三角形。行如下形式的扬辉三角形。11 11 2 11 3 3 11 4 6 4 11 5 10 10 5 1第33页例6.9 打印打印6行如下形式的扬辉三角形。行如下形式的扬辉三角形。# define N 7# include int main() int i, j, aNN; for (i=1; iN; i+) aii=1; ai1=1; for (i=3; iN; i+) for (j=2; j=i-1; j+) aij=ai-1j-1+ai-1j; for (i=1; iN; i+) for (j=1; j=i; j+) printf(“%5d”, aij); printf(“n”); return 0;注意注意: 没有使用下标为没有使用下标为0的数组元素的数组元素.第34页6.3 字符数组与字符串字符数组与字符串l6.3.1 字符数组的定义字符数组的定义字符数组用来存放字符型数据,字符数组定义的形式字符数组用来存放字符型数据,字符数组定义的形式与前面介绍的普通数组类似,只是数据类型为与前面介绍的普通数组类似,只是数据类型为char。例如:例如: char a10,b20; 定义了有定义了有10个数组元素的字符数组个数组元素的字符数组a和有和有20个数组元个数组元素的字符数组素的字符数组b。字符数组也可以是二维或多维的,例如:字符数组也可以是二维或多维的,例如: char name8010,address8060; 定义了有定义了有80行行10列的二维字符数组列的二维字符数组name,定义了有,定义了有80行行60列的二维字符数组列的二维字符数组address。每个字符数组元素占一个字节的内存空间,可以存放每个字符数组元素占一个字节的内存空间,可以存放一个字符。一个字符。第35页6.3.2 字符数组的引用和初始化 1字符数组的引用 字符数组的引用形式同前面介绍的一维数组和二字符数组的引用形式同前面介绍的一维数组和二维数组相同。维数组相同。 形式为:形式为: 数组名下标 或 数组名行下标列下标 对下标的要求也同前面介绍的一维数组和二维对下标的要求也同前面介绍的一维数组和二维数组相同。可以将每个数组元素看成是一个普通的数组相同。可以将每个数组元素看成是一个普通的字符型变量,数组元素可以被赋值,数组元素可以字符型变量,数组元素可以被赋值,数组元素可以出现在表达式中。出现在表达式中。第36页 字符数组的初始化形式同前面介绍的一维数组和二维数组相同,字符数组的初始化形式同前面介绍的一维数组和二维数组相同,只不过现在赋给数组元素的值是字符型的数据。只不过现在赋给数组元素的值是字符型的数据。 例如可以像下面这样对字符数组例如可以像下面这样对字符数组a初始化,赋给初始化,赋给a的每个数组元素的每个数组元素一个字符:一个字符:char a5=A,B,C,D,E; 即执行上面定义后,即执行上面定义后,a0=A、a1=B、a2=C、a3=D、a4=E。 若提供的字符个数与数组元素个数相同,可以省略数组长度。例若提供的字符个数与数组元素个数相同,可以省略数组长度。例如下面的定义与上面的作用相同:如下面的定义与上面的作用相同:char a =A,B,C,D,E; 也可以像下面那样给字符数组也可以像下面那样给字符数组a的数组元素赋值:的数组元素赋值:char a5=A,B,C; 即执行上面定义后,即执行上面定义后,a0=A、a1=B、a2=C,而,而a3=a4=0。0代表代表ASCII码为码为0的字符,不是一可以显示的字符,而是一空操作符。的字符,不是一可以显示的字符,而是一空操作符。 2字符数组的初始化字符数组的初始化第37页6.3.3 字符串 字符串的用途非常大,例如,人的姓名、身份证号码,产字符串的用途非常大,例如,人的姓名、身份证号码,产品的名称、型号、产地,都是字符串。品的名称、型号、产地,都是字符串。 在在C语言中,没有专门的字符串变量,通常用字符数组存语言中,没有专门的字符串变量,通常用字符数组存放字符串。放字符串。 C语言规定用字符语言规定用字符0作为字符串结束标志,系统自动在作为字符串结束标志,系统自动在字符串尾加上字符串尾加上0。 由于系统自动在字符串尾加上了字符串结束标志由于系统自动在字符串尾加上了字符串结束标志0,所,所以可以利用以可以利用0来判断字符串是否结束。从字符串的第一个字来判断字符串是否结束。从字符串的第一个字符开始向后逐个字符检查,遇到符开始向后逐个字符检查,遇到0时,就表示字符串结束了。时,就表示字符串结束了。 前面使用过的前面使用过的printf函数,可以输出一个字符串,例如:函数,可以输出一个字符串,例如:printf(“This is C program”);); 系统自动在字符串系统自动在字符串“This is C program”的尾部加了一个的尾部加了一个0,在内存中存储的实际上是字符串,在内存中存储的实际上是字符串“This is C program0”。执行。执行printf函数输出该字符串时,系统从第一个函数输出该字符串时,系统从第一个字符字符T开始逐个字符输出,每输出一个字符都进行检查,遇开始逐个字符输出,每输出一个字符都进行检查,遇到字符串结束标志到字符串结束标志0时,就停止输出。时,就停止输出。第38页 可以使用字符串常量对一个字符数组进行初始化,例如:可以使用字符串常量对一个字符数组进行初始化,例如: char a6=“China”; 它与下面定义是等价的:它与下面定义是等价的:char a6=C,h,i,n,a,0; 可以省略上面两种定义中的数组长度可以省略上面两种定义中的数组长度6,写成下面两种形式,写成下面两种形式: char a =“China”;char a =C,h,i,n,a,0; 使用字符串常量进行初始化时,也可以省略大括号和数组长使用字符串常量进行初始化时,也可以省略大括号和数组长度度6,写成:,写成: char a =“China”; 注意:下面的定义与上面的几种定义形式是不等价的:注意:下面的定义与上面的几种定义形式是不等价的:char a =C,h,i,n,a; 因为缺少一个字符串结束标志因为缺少一个字符串结束标志0,这里省略的数组长度是,这里省略的数组长度是5,而不是而不是6。第39页6.3.4 字符数组的输入输出 l用格式符用格式符%c逐个字符输入输出字符数组逐个字符输入输出字符数组元素的值元素的值l用格式符用格式符%s整体输入输出字符数组元素整体输入输出字符数组元素的值的值 第40页用格式符用格式符%c逐个字符输入输出字符数组元素的值逐个字符输入输出字符数组元素的值# include int main() char a16; int i; for (i=0; i16; i+) scanf (%c, &ai);for (i=0; i16; i+) if (a=ai &ai=z |A=ai&ai=Z) printf (%c, ai); printf(n); return 0; 例例6.10 输入16个字符,输出其中的所有英文字母。若输入:ab123EF*#678gh?+则输出:abEFgh第41页用格式符%s整体输入输出字符数组元素的值 # include int main() char a30,b30=0; int i,j=0; scanf(%s,a); printf(%sn,a); for (i=0;i30;i+) if (ai=A|ai=E |ai=I|ai=O|ai=U) printf(%c,ai); bj+=ai; printf(n); printf(%sn,b); return 0;例例6.11 完成如下操作:输入一串字符(小于完成如下操作:输入一串字符(小于30个字符)存个字符)存储在数组储在数组a中,输出其中的所有大写元音字母,将其中的所中,输出其中的所有大写元音字母,将其中的所有大写元音字母存储到数组有大写元音字母存储到数组b中,输出数组中,输出数组b。第42页用格式符%s整体输入输出字符数组元素的值 例例6.11 完成如下操作:输入一串字符(小于30个字符)存储在数组a中,输出其中的所有大写元音字母,将其中的所有大写元音字母存储到数组b中,输出数组b。若输入:AAaa123EEFF*#deII678fgOOghUU*则输出:AAaa123EEFF*#deII678fgOOghUU* AAEEIIOOUU AAEEIIOOUU第43页注意:注意: 像上面那样输入像上面那样输入29个字符后,系统自动将个字符后,系统自动将0加在加在这串字符的最后,实际数组这串字符的最后,实际数组a中存储的是中存储的是30个字符,个字符,即即a29=0。 若定义数组若定义数组b时只是写成时只是写成“char a30,b30;”,不用不用0进行初始化,程序运行后,会造成:在数组进行初始化,程序运行后,会造成:在数组b应该包含的所有字符(应该包含的所有字符(AAEEIIOOUU)的后面没有加)的后面没有加0,当使用,当使用“printf(%sn,b);”输出时,由于没有输出时,由于没有0,除了输出,除了输出“AAEEIIOOUU”外,可能还要接着输外,可能还要接着输出一些其它的字符。出一些其它的字符。第44页对字符数组输入输出的几点说明对字符数组输入输出的几点说明 1)用)用%s输出字符数组内容时,从数组的第一个字符开始向输出字符数组内容时,从数组的第一个字符开始向后逐个字符输出,遇见后逐个字符输出,遇见0就停止,即使存储的字符个数小于数就停止,即使存储的字符个数小于数组长度,遇见组长度,遇见0也结束输出。例如:也结束输出。例如: char x8=“array”; printf(“%s”,x);x的前的前5个元素中存储了个元素中存储了5个字符(非个字符(非0),),x的后的后3个元素存储个元素存储的字符都是的字符都是0,输出,输出5个字符个字符“array”后,遇见了后,遇见了0,结束输,结束输出。出。2)若字符数组中包含两个或两个以上的)若字符数组中包含两个或两个以上的0,遇见第一个,遇见第一个0时,输出结束。例如:时,输出结束。例如: char a10=a,r,r,a,y,0,s,t,r,0; printf(“%s”,a);只是输出只是输出“array ” ,后面的,后面的“str”不能一起输出。不能一起输出。第45页对字符数组输入输出的几点说明对字符数组输入输出的几点说明 (3)与格式符)与格式符%s对应的输出项是字符数组名称,不是字符数组元素名称。对应的输出项是字符数组名称,不是字符数组元素名称。与格式符与格式符%c对应的输出项是字符数组元素名称,不是字符数组名称。例如下对应的输出项是字符数组元素名称,不是字符数组名称。例如下面面printf函数的用法都是错误的:函数的用法都是错误的:char x8;printf(“%s”,x0);printf(“%c”,x);(4)使用)使用%s给字符数组输入一串字符时,这串字符的中间不能有空格,否给字符数组输入一串字符时,这串字符的中间不能有空格,否则只是把第一个空格前的字符赋给了字符数组。例如,执行下面语句给字符数则只是把第一个空格前的字符赋给了字符数组。例如,执行下面语句给字符数组组s赋值:赋值:char s30;scanf(“%s”,s);printf(“%s”,s); 若输入中间有空格的一串字符:若输入中间有空格的一串字符: students sdudy C-program 实际上只是将第一个空格前的实际上只是将第一个空格前的8个字符个字符“students”加上加上0赋给了字符数组赋给了字符数组s。显示输出的结果是:。显示输出的结果是:students第46页6.3.5 处理字符串的函数处理字符串的函数 C语言提供了许多处理字符串的函数,使用这些函语言提供了许多处理字符串的函数,使用这些函数编程很方便。数编程很方便。 但要注意:使用函数但要注意:使用函数gets和和puts时,要用预处理时,要用预处理语句语句# include将将“stdio.h”包含进程序中来;使用函包含进程序中来;使用函数数strcat、strcpy、strcmp、strlen、strlwr、strupr时,要用预处理语句时,要用预处理语句# include将将“string.h”包含进程包含进程序中来。序中来。第47页1.输入字符串函数 格式为:格式为: gets(字符数组名字符数组名) 作用是从终端输入一个字符串,赋给字符数组。函数作用是从终端输入一个字符串,赋给字符数组。函数值是该字符数组的起始地址。值是该字符数组的起始地址。 例如执行下面语句:例如执行下面语句:char s30;gets(s); 从键盘输入从键盘输入24个字符个字符“students study C-program”后按回车键,注意到这个字符串中包含了后按回车键,注意到这个字符串中包含了2个空格,系统个空格,系统将这将这24个字符存储到字符数组个字符存储到字符数组s中,

    注意事项

    本文(kj-第6章数组课件.ppt)为本站会员(春哥&#****71;)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开