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

    大学C语言程序设计基础第6章课件.ppt

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

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

    大学C语言程序设计基础第6章课件.ppt

    第第6 6章章 数数 组组概述概述双精度型双精度型双精度型双精度型(double)(double)(double)(double)结构体类型结构体类型结构体类型结构体类型(struct)(struct)(struct)(struct)共用体类型共用体类型共用体类型共用体类型(union)(union)(union)(union)数数数数 据据据据 类类类类 型型型型整型(整型(整型(整型(intintintint)实型实型实型实型单精度型单精度型单精度型单精度型(float)(float)(float)(float)字符类型字符类型字符类型字符类型(char)(char)(char)(char)数组类型数组类型数组类型数组类型枚举类型枚举类型枚举类型枚举类型(enum)(enum)(enum)(enum)基本类型基本类型基本类型基本类型构造类型构造类型构造类型构造类型指针类型指针类型指针类型指针类型 空类型空类型空类型空类型基本数据类型基本数据类型:如整型、实型、字符型。:如整型、实型、字符型。这些数据又这些数据又表现为常量、变量表现为常量、变量。基本数据类型中的数据之间没有任。基本数据类型中的数据之间没有任何关联,也没有任何顺序。一堆无序的且没有任何关联的数据是很难处何关联,也没有任何顺序。一堆无序的且没有任何关联的数据是很难处理的。所以,需要把数据变量理的。所以,需要把数据变量有序地关联有序地关联起来。形成起来。形成构造类型构造类型。构造类型:构造类型:由基本数据型按照一定的规则构成一些复杂的数据类型由基本数据型按照一定的规则构成一些复杂的数据类型.如如数组、结构体、共同体数组、结构体、共同体等。等。数组定义:数组定义:有序数据(有序数据(变量变量)的集合。)的集合。数组中的每一个元素都属于数组中的每一个元素都属于同一数据类型;同一数据类型;数组元素用一个统一的数组元素用一个统一的数组名和下标数组名和下标来唯一的确定。来唯一的确定。算法依赖于数据结构,选择合适的数据结构,可以简化算法算法依赖于数据结构,选择合适的数据结构,可以简化算法。程序程序=算法算法+数据结构。数据结构。6.1一维数组的定义和引用一维数组的定义和引用1 1、一维数组的定义:、一维数组的定义:类型说明符类型说明符 数组名数组名 常量表达式常量表达式;例如:例如:int a10int a10;表示定义了一个含有表示定义了一个含有1010个整型元素、名称为个整型元素、名称为a a的一维数组。的一维数组。说明:说明:(1)(1)类型说明符用来说明数组中各个数据元素的类型。在类型说明符用来说明数组中各个数据元素的类型。在 任何一个数组中,数据元素的类型都是一致的。任何一个数组中,数据元素的类型都是一致的。(2)(2)数组名的命名规则与变量名相同,遵循标识符命名规数组名的命名规则与变量名相同,遵循标识符命名规 则则(以字母或下划线开头,由字母、数字、下划线组以字母或下划线开头,由字母、数字、下划线组 成成)。注注意意:数数组组名名不不仅仅是是一一个个标标识识符符号号,它它还还是是一一个个地地址址常常量量。是数组第一个元素的存储地址。是数组第一个元素的存储地址。inta10;(3)常量表达式用方括号常量表达式用方括号括起,不能用圆括括起,不能用圆括号,如号,如b(10)是错误的。是错误的。(4)常量表达式表示常量表达式表示数组中元素的个数,即数组数组中元素的个数,即数组的长度的长度。例如,在。例如,在a10中,中,10表示数组中表示数组中有有10个元素。这个元素。这10个元素分别是:个元素分别是:a0,a1,a2,a3,a4,a5,a6,a7,a8,a9。注意:下标从注意:下标从0开始,没有开始,没有a10。(5)常常量量表表达达式式中中必必须须是是由由常常量量或或符符号号常常量量组组成成的的表表达达式式,不能包含变量。例如,不能包含变量。例如,(6)由于数组元素占有连续的内存单元,因此一维数组中的由于数组元素占有连续的内存单元,因此一维数组中的各个元素按照下标规定的顺序存放在内存中。各个元素按照下标规定的顺序存放在内存中。例如,我们定义了一个整型的一维数组例如,我们定义了一个整型的一维数组inta5;那么这个那么这个数组中的每个元素都将占用二个字节。数组中的每个元素都将占用二个字节。假定内存地址假定内存地址1000开始存放数组开始存放数组a:各元素起始地址:各元素起始地址:10001002100410061008各数组元素各数组元素:a0a1a2a3a4(7)定义数组只是为数组预留适当的内存空间,并未给数组定义数组只是为数组预留适当的内存空间,并未给数组元素赋值。元素赋值。int n=10;char namen;#define M 10char textM*2+17定义的作用:系统为数组开辟相应的内存空定义的作用:系统为数组开辟相应的内存空间间数数数数组组组组a a a a在在在在内内内内存存存存中中中中是是是是如如如如何何何何存存存存放放放放的呢的呢的呢的呢?aa0a1a2a3a4a5a6a7a8a9例:例:int a10;各元素在内存中连续存放各元素在内存中连续存放数组名代表首地址数组名代表首地址2.一维数组元素的引用一维数组元素的引用引引用用就就是是读读出出数数组组中中某某一一元元素素的的值值或或将将数数椐椐赋赋给给某某一一数数组元素。组元素。定义了一个数组以后,怎么引用数组中的元素呢?定义了一个数组以后,怎么引用数组中的元素呢?C语言规定只能一个一个地引用数组元素而语言规定只能一个一个地引用数组元素而不能整体引不能整体引用数组名。用数组名。引用的一般形式:引用的一般形式:数组名数组名下标下标使用说明:使用说明:先定义数组,再引用数组元素。先定义数组,再引用数组元素。用指定的下标来引用数组中的元素。用指定的下标来引用数组中的元素。下标可以是表达式。例如:下标可以是表达式。例如:x3=b11+b10;i=2;a=xi+2;一一个个数数组组含含有有n个个元元素素,那那么么下下标标的的取取值值范范围围为为0,n-1。引用数组元素时,注意下标值不要超出数组范围。引用数组元素时,注意下标值不要超出数组范围。例如:通过循环控制数组元素下标的变化,达到输入例如:通过循环控制数组元素下标的变化,达到输入10个数个数的目的。的目的。Inta10;for(i=0;i=10;i+)scanf(%d,&ai);应该在数组定义范围内操作:应该在数组定义范围内操作:#includevoidmain()inti,a10;for(i=0;i=9;i+)ai=i;for(i=0;i=9;i+)printf(“%3d”,ai);下标超界下标超界例例:从键盘输入从键盘输入10个字符,再反序输出。程序如下:个字符,再反序输出。程序如下:#includestdio.hvoidmain()charch10;/*定义字符数组定义字符数组C,它含有,它含有10个字符个字符*/inti;for(i=0;i=0;i-)/*反序输出反序输出*/printf(%c,chi);putchar(n);getch();(演示)(演示)3.3.一维数组的初始化一维数组的初始化 定义数组只是为数组元素分配了存储空间。其值是不确定的。定义数组只是为数组元素分配了存储空间。其值是不确定的。因此,在引用数组元素前,还必须给下标变量赋值。因此,在引用数组元素前,还必须给下标变量赋值。还可以在定义数组的同时给数组赋初值还可以在定义数组的同时给数组赋初值,这称为:数组的初始化这称为:数组的初始化。形式如下:形式如下:类型说明符数组名类型说明符数组名长度长度数值表数值表;使用说明:使用说明:(1)对数组的初始化操作只能在定义数组时进行,大括号中的内容即为对数组的初始化操作只能在定义数组时进行,大括号中的内容即为数组的初值,各项用逗号隔开。数组的初值,各项用逗号隔开。例如,例如,intX10=0,1,2,3,4,5,6,7,8,9;定义了一个含有定义了一个含有10个整型元素的数组。个整型元素的数组。X0=0、x1=1、x2=2(2)可以只给部分数组元素赋初值。可以只给部分数组元素赋初值。例如,例如,inta4=1,2;定义了一个含有定义了一个含有4个整型元素的数组。个整型元素的数组。但只对前但只对前2个元素个元素a0,a1赋初值,其余的元素系统将自动赋值为赋初值,其余的元素系统将自动赋值为0。(3)如果想将数组中的所有元素全部赋为如果想将数组中的所有元素全部赋为0时,可以写成:时,可以写成:inta10=0,0,0,0,0,0,0,0,0,0;也可以这样写:也可以这样写:inta10=0;虽然只给第虽然只给第0个元素赋初值,但系统会自动将剩余的数个元素赋初值,但系统会自动将剩余的数组元素赋值组元素赋值0。不能这样写:不能这样写:不能这样写:不能这样写:inta10=0*10;inta10=0*10;在在在在C C语言中不能给数组整体赋初值。语言中不能给数组整体赋初值。语言中不能给数组整体赋初值。语言中不能给数组整体赋初值。(4)对全部数组元素赋初值时,可以不指定数组的大小。对全部数组元素赋初值时,可以不指定数组的大小。inta=1,2,3,4,5;省略数组的大小后,系统能够根据初值的个数自动定义省略数组的大小后,系统能够根据初值的个数自动定义决定数组的长度为决定数组的长度为5。因此这个数组定义语句相当于:因此这个数组定义语句相当于:inta5=1,2,3,4,5;例例1:键盘输入键盘输入10数,输出其中最小的数。数,输出其中最小的数。用数组用数组a10存放存放10个数,通过循环控制数组元素的下标读入。第个数,通过循环控制数组元素的下标读入。第1个个数数a0作为比较的目标。从第二个数作为比较的目标。从第二个数a1开始直到开始直到a9,每一个数与,每一个数与min进行比较。如果大于进行比较。如果大于min,则放弃此数并读入下一个数,否则将此小数,则放弃此数并读入下一个数,否则将此小数赋值给赋值给min。通过次比较后,。通过次比较后,min就是最小数。就是最小数。-打擂台法打擂台法#includevoidmain()inti,a10,min;printf(input10number:);for(i=0;i=9;i+)scanf(%d,&ai);min=a0;for(i=1;iai)min=ai;printf(nmin=%d,min);(演示)(演示)14例例2:求求Fibonacci数列数列:1,1,2,3,5,8,的前的前20个数个数.公式为公式为:F1=1 (n=1)F2=1 (n=2)Fn=Fn-1+Fn-2 (n=3)#include void main()int i,f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%10d,fi);printf(n);算法简单,占内存多算法简单,占内存多#include main()int f1,f2,f3,i;f1=1;f2=1;printf(“%10d%10dn”,f1,f2);for(i=1;i=18;i+)f3=f1+f2;printf(“%10d”,f3);if(i%2=0)printf(“n”);f1=f2;f2=f3;15例例3:用冒泡法对:用冒泡法对n个数排序。个数排序。(由小到大)(由小到大)思想思想:让大数逐步让大数逐步“沉入沉入”数组的底部数组的底部,让小数象气泡似的让小数象气泡似的“冒起冒起”到数组的顶点。到数组的顶点。做法:做法:将将相邻相邻两个数比较,将小的调到前头。两个数比较,将小的调到前头。以五个数为例以五个数为例以五个数为例以五个数为例数组数组数组数组aa1 1 aa2 2 aa3 3 aa4 4 aa5 5 数组的初始状态数组的初始状态数组的初始状态数组的初始状态8282313165659 94747第一轮比较结果第一轮比较结果第一轮比较结果第一轮比较结果31318282656582829 9828247478282第二轮比较结果第二轮比较结果第二轮比较结果第二轮比较结果313165659 96565474765658282第三轮比较结果第三轮比较结果第三轮比较结果第三轮比较结果9 93131474765658282第四轮比较结果第四轮比较结果第四轮比较结果第四轮比较结果9 931314747656582828282656547479 93131第第1轮:共进行轮:共进行4小次两两比较,最大的数向后移到了小次两两比较,最大的数向后移到了a5(最后)最后)第第2轮:只对前轮:只对前4个数进行个数进行3次两两比较,挑出这次两两比较,挑出这4个数中最大的一个,放到个数中最大的一个,放到a4(次后次后)第第3轮:只对前轮:只对前3个数进行个数进行2次两两比较,挑出这次两两比较,挑出这3个数中最大的一个,放到个数中最大的一个,放到a3第第4轮:只对前轮:只对前2个数进行个数进行1次两两比较,挑出这次两两比较,挑出这2个数中最大的一个,放到个数中最大的一个,放到a216比较的轮数:比较的轮数:n-1第第i轮比较的次数:轮比较的次数:j=n-i#define N 5main()int aN+1,k,i,j,temp;printf(input%d number:n,N);for(k=1;k=N;k+)scanf(%d,&ak);for(i=1;i=N-1;i+)for(j=1;jaj+1)temp=aj;aj=aj+1;aj+1=temp;for(k=1;ka2 j=2:a2a3 j=3:a3a4 j=4:a4a5i=2:j=1:a1a2 j=2:a2a3 j=3:a3a4 i=3:j=1:a1a2 j=2:a2a3i=4:j=1:a1a2双重循环执行过程双重循环执行过程6.2 6.2 二维数组的定义和引用二维数组的定义和引用 到目前为止,我们问题分析的还只是一维数组。如果需到目前为止,我们问题分析的还只是一维数组。如果需要描述类似矩阵这样的数据,该如何实现呢?考虑一个要描述类似矩阵这样的数据,该如何实现呢?考虑一个3*4的矩阵的矩阵M:01234567891112Mi,j指的是第指的是第i行第行第j列的元素,其中列的元素,其中i的范围是的范围是1-3,j的范围的范围是是1-4。例如,例如,M3,2指的是第指的是第3行第行第2列的元素,其值为列的元素,其值为9。在在C语言中对类似矩阵这样的数据可以用一个语言中对类似矩阵这样的数据可以用一个二维数组二维数组来来表示。表示。C语言允许使用多维数组,二维数组是最简单的多维语言允许使用多维数组,二维数组是最简单的多维数组。数组。一、一、二维数组的定义二维数组的定义1)二维数组的定义形式二维数组的定义形式类型说明符类型说明符数组名数组名常量表达式常量表达式常量表达式常量表达式;其中其中:类型说明符用来说明数组中各个数据元素的类型。类型说明符用来说明数组中各个数据元素的类型。第第1个个常常量量表表达达式式说说明明了了这这个个数数组组有有几几行行。第第2个个常常量量表表达达式式说说明明了了每每行行有有几几个个元元素素,或或说说明明了了几几列列。数数组组元元素素的个数是两个常量表达式的乘积。的个数是两个常量表达式的乘积。例如:例如:inta34;表示定义一个二维数组表示定义一个二维数组a,它有,它有3行行4列,共列,共12个元素,个元素,其中每个元素为整型。其中每个元素为整型。可以将二维数组可以将二维数组a看成由看成由3个一维数组组成,一维数组个一维数组组成,一维数组名分别是:名分别是:a0a0、a1a1、a2a2;每个一维数组中又含有每个一维数组中又含有4个元素个元素,例如第一个一维数组,例如第一个一维数组a0的各个元素表示为:的各个元素表示为:a00、a01、a02、a03。整个整个a数组可以描述成如下形式:数组可以描述成如下形式:这种对二维数组的描述方式对第这种对二维数组的描述方式对第10章学习用章学习用指针处理数指针处理数组组时将非常有用。时将非常有用。2)二维数组的存储二维数组的存储C语言规定,二维数组中的元素排列的顺序是语言规定,二维数组中的元素排列的顺序是按行优按行优先先,即存储时先存放第一行的数据,再存放第二行的数,即存储时先存放第一行的数据,再存放第二行的数据,以此类推。例如,二维数组据,以此类推。例如,二维数组a34在内存中的存放顺在内存中的存放顺序为:序为:a00a01a02a10a11a12a20a21a22。21a00a00a01a01a02a02a03a03a10a10a11a11a12a12a13a13a20a20a21a21a22a22a23a23a a或或或或a0a0a1a1a2a2二维数组二维数组a a在内存中存放形式在内存中存放形式二维数组是按行存放的。二维数组是按行存放的。即:先存放第一行的元素即:先存放第一行的元素;再存放第二行的元素再存放第二行的元素;.。二、二、二维数组元素的引用二维数组元素的引用定义数组,引用元素。定义数组,引用元素。引用格式为:引用格式为:数组名数组名下标下标下标下标例如例如:inta22共定义了共定义了4个元素,分别为:个元素,分别为:a00,a01,a10,a11二维数组的引用使用两个下标。另外要注意:二维数组的引用使用两个下标。另外要注意:inta45;定义数组定义数组b=a34;引用元素,将元素引用元素,将元素a34赋值给变量赋值给变量b。?能用?能用b=a45给变量赋值吗?给变量赋值吗?三、二维数组的初始化三、二维数组的初始化二维数组初始化的方法有以下几种方法:二维数组初始化的方法有以下几种方法:将所有的数值顺序列在一对大括号中将所有的数值顺序列在一对大括号中:inta34=1,2,3,4,5,6,7,8,9,10,11,12;(太不直观。)(太不直观。)分行给二维数组赋初值。将初始值按行排列,每行用大分行给二维数组赋初值。将初始值按行排列,每行用大括号括起来,括号括起来,各行之间用逗号分隔。例如:各行之间用逗号分隔。例如:inta34=1,2,3,4,5,6,7,8,9,10,11,12;(比较直观,)比较直观,)可以只给每行的前面部分数组元素赋初值。可以只给每行的前面部分数组元素赋初值。inta34=1,4,3,1,2;这种赋值方式相当于这种赋值方式相当于:inta34=1,0,0,0,4,3,0,0,1,2,0,0;(系统自动将没有赋值的元素赋(系统自动将没有赋值的元素赋0。)。)可以对各行的某一元素赋初值。可以对各行的某一元素赋初值。inta34=1,0,6,0,0,11;这种赋值方式相当于这种赋值方式相当于:inta34=1,0,0,0,0,6,0,0,0,0,11,0;可以只对部分行赋初值。可以只对部分行赋初值。inta34=1,1;这种赋值方式相当于这种赋值方式相当于:inta34=1,0,0,0,0,0,0,0,1,0,0,0;如果将数组的所有元素全部赋值的话,在定义数组时可如果将数组的所有元素全部赋值的话,在定义数组时可以省略第一维的长度,但注意以省略第一维的长度,但注意第二维的长度不能省略第二维的长度不能省略第二维的长度不能省略第二维的长度不能省略。如:如:inta4=1,2,3,4,5,6,7,8,9,10,11,12;一共定义了一共定义了12个数据,系统会根据总个数自动确定第一个数据,系统会根据总个数自动确定第一维的长度(数据总数除以第二维的长度)。维的长度(数据总数除以第二维的长度)。这种赋值方式相当于:这种赋值方式相当于:inta34=1,2,3,4,5,6,7,8,9,10,11,12;也可以在对部分数组元素赋初值时省略第一维的长度。也可以在对部分数组元素赋初值时省略第一维的长度。inta4=1,1;因为有因为有3个逗号分隔的大括号,所以第一维的长度就是个逗号分隔的大括号,所以第一维的长度就是3。四、二维数组程序举例四、二维数组程序举例例例:输出一个矩阵的转置矩阵。输出一个矩阵的转置矩阵。数组数组a:245换成换成数组数组b:233784758#includevoidmain()inta23=2,4,5,3,7,8;intb32,i,j;printf(arraya:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;bji=aij;printf(n);(演示)(演示)printf(arrayb:n);for(i=0;i=2;i+)for(j=0;jmax,把,把aij作为作为新的临时最大值,新的临时最大值,并记录下其行下标并记录下其行下标I和列和列j。当全部元素比较完。当全部元素比较完后,后,max是整个矩阵全部元素的最大值。下面给出程序。是整个矩阵全部元素的最大值。下面给出程序。#includevoidmain()inti,j,row=0,colum=0,max;inta34=1,2,3,4,9,8,7,6,-10,10,-5,2;max=a00;for(i=0;i=2;i+)/*用二重循环遍历全部元素用二重循环遍历全部元素*/for(j=0;jmax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);运行结果:运行结果:max=10,row=2,colum=1(演示)(演示)例例:输输入入6个个学学生生、每每人人5门门课课的的成成绩绩,统统计计每每个个学学生生的的总总成成绩。绩。#includevoidmain()ints65,sum6,i,j;printf(“pleaseinput5score:n”);for(i=0;i6;i+)printf(“%-4d:”,i+1);for(j=0;j5;j+)sacnf(“%d”,&sij;for(i=0;i6;i+)sumi=0;for(j=0;j5;j+)sumi+=sij);for(j=0;j6;j+)printf(“student%-4d%-6.2f”,j+1,sumj);如何统计每门课的平均成如何统计每门课的平均成绩绩?另定义一个另定义一个sum15for(j=0;j5;j+)sum1j=0;for(i=0;i6;i+)sum1j+=sij;for(i=0;i5;i+)printf(“subject:%-4d%-6.2f”,i+1,sumj);例例打印出以下的杨辉三角形打印出以下的杨辉三角形(要求打印出要求打印出10行行)。11112113311464115101051问题分析问题分析这是一个这是一个10*10的矩阵,该矩阵的特点是对角线的矩阵,该矩阵的特点是对角线上方的元素全上方的元素全为为0,是一个下三角矩阵。杨辉三角形各行,是一个下三角矩阵。杨辉三角形各行系数有如下规律:系数有如下规律:(1)各行第一个数都是)各行第一个数都是1。(。(ai1=1)(2)各行最后一个数都是)各行最后一个数都是1。(aii=1)(3)从第从第3行起,其余各数是上一行同列和前一列两个数行起,其余各数是上一行同列和前一列两个数之和。之和。aij=ai-1j+ai-1j-1,(,(其中其中i为行数为行数j为列数。)为列数。)例例#include#defineN11voidmain()inti,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);printf(n);6.3 6.3 字符串与字符数组字符串与字符数组在前面的学习中,我们学习了整型、实型、字符型变在前面的学习中,我们学习了整型、实型、字符型变量,没有见到字符串变量,量,没有见到字符串变量,C语言中字符串存放在何处呢?语言中字符串存放在何处呢?原来原来C C语言语言语言语言用用用用一维字符型数组一维字符型数组一维字符型数组一维字符型数组来存放字符串来存放字符串来存放字符串来存放字符串。字符数组字符数组字符数组字符数组就是就是字符串变量字符串变量字符串变量字符串变量,字符数组的每一个元素字符数组的每一个元素(下标下标变量)存放一个字符。变量)存放一个字符。一、字符串常量一、字符串常量所谓字符串常量就是用双引号括起来的字符组合。所谓字符串常量就是用双引号括起来的字符组合。例如,例如,Iamaboy“就是一个字符串。就是一个字符串。字符串在内存中存放时,系统会在字符串结束处自动字符串在内存中存放时,系统会在字符串结束处自动加上字符串结束标志加上字符串结束标志0。(。(ASCII码为码为0)。)。系统通过字符串结束标志系统通过字符串结束标志0,判断字符串是否结束,并得,判断字符串是否结束,并得到字符串的长度。到字符串的长度。二、字符数组的定义二、字符数组的定义字符数组用来存放字符串,字符数组的说明形式如下:字符数组用来存放字符串,字符数组的说明形式如下:char数组名数组名常量表达式常量表达式常量表达式常量表达式;例如例如:chara3;a0=Y;a1=O;a2=U;这里定义这里定义a为字符数组,包含为字符数组,包含3个元素。个元素。我们知道,系统是用字符对应的我们知道,系统是用字符对应的ASCII码来处理字符码来处理字符的,于是字符和的,于是字符和0255间的整数是等价的。他们可以通间的整数是等价的。他们可以通用。但有区别:用。但有区别:charc10;/*在内存中占在内存中占10字节字节*/intc10;/*在内存中占在内存中占20字节字节*/三、字符数组的初始化三、字符数组的初始化(1)逐个元素初始化。比如:逐个元素初始化。比如:charc10=I,a,m,h,a,p,p,y;这里把这里把10个字符分别赋给个字符分别赋给c0到到c910个元素。个元素。(2)初始化数据少于数组长度初始化数据少于数组长度,多余元素自动为多余元素自动为“空空”。比如:比如:charc12=I,a,m,h,a,p,p,y;在这个初始化语句中,共写了在这个初始化语句中,共写了10个字符(含空格),还有个字符(含空格),还有2个数组元素我们没有给出初值,根据前面所讲的,对没有给个数组元素我们没有给出初值,根据前面所讲的,对没有给出初值的数组元素,系统自动对它们赋值出初值的数组元素,系统自动对它们赋值0(或或0)。这样。这样上上面这个数组初始化完毕后,如下所示:面这个数组初始化完毕后,如下所示:a0a1a2a3a4a5a6a7a8a9a10a11a0a1a2a3a4a5a6a7a8a9a10a11IIamamhappy00happy00(3)如如果果提提供供的的初初值值个个数数与与预预定定的的数数组组长长度度相相同同,在在定定义义时时可以省略数组长度,系统会根据初值个数确定数组长度。可以省略数组长度,系统会根据初值个数确定数组长度。charc=I,a,m,h,a,p,p,y,0;(4)初始化字符数组时,也可以写成如下形式:初始化字符数组时,也可以写成如下形式:chara=Iamhappy;还可以写成如下形式,这种形式还可以写成如下形式,这种形式还可以写成如下形式,这种形式还可以写成如下形式,这种形式 最符合我们的习惯:最符合我们的习惯:最符合我们的习惯:最符合我们的习惯:charc=Iamhappy;charc=Iamhappy;等价于:等价于:charc=I,a,m,h,a,p,p,y,0;系统自动在字符串尾加上一个系统自动在字符串尾加上一个:0此此0不需要人为书写。但是输出时不显示这个不需要人为书写。但是输出时不显示这个0.程序是依据标志来程序是依据标志来0来确定字符串是否结束及其长度。来确定字符串是否结束及其长度。所以,数组所以,数组c在内存中的长度在内存中的长度是是11,而不是,而不是10。应人工加上应人工加上0此处可以不加此处可以不加 00在不确定字符数组长度情况下,逐个字符赋值要注意在不确定字符数组长度情况下,逐个字符赋值要注意:例例#includevoidmain()inti,j;charc=Iamhappy;chard=I,a,m,h,a,p,p,y;puts(c);puts(d);i=sizeof(c);j=sizeof(d);printf(%d%dn,i,j);运行结果:运行结果:IamhappyIamhappy#$.1011如何解决如何解决?(应加上尾标志(应加上尾标志0)演示演示四、字符数组的输入输出四、字符数组的输入输出C语言提供了两组实现字符串输入输出操作的函数。语言提供了两组实现字符串输入输出操作的函数。一组是一组是格式输入格式输入格式输入格式输入scanf()(),格式输出格式输出格式输出格式输出函数函数printf()一组是一组是键盘输入键盘输入键盘输入键盘输入gets(数组名数组名),屏幕输出屏幕输出屏幕输出屏幕输出puts(数组名数组名)。1、使用格式函数输入输出使用格式函数输入输出将字符数组逐个字符输入输出(将字符数组逐个字符输入输出(格式符格式符“%c”)。)。将整个字符串的内容一次输入输出(将整个字符串的内容一次输入输出(格式符格式符“%s”)。(1)采用采用格式符格式符%c逐个字符输入输出逐个字符输入输出,.voidmain()charc10=I,a,m,a,b,o,y;inti;for(i=0;i10;i+)printf(%c,ci);printf(n);getch();运行结果:运行结果:Iamaboy (2)采用采用格式符格式符%s将整个字符串一次输入输出将整个字符串一次输入输出,.#includestdio.hvoidmain()charc10;scanf(%s,c);printf(%sn,c);输入:输入:china 输出:输出:china其中其中,scanf(“%s”,c);表示将键盘输入的内容按字符串的方表示将键盘输入的内容按字符串的方式送到数组式送到数组c中。中。这里注意在数组名这里注意在数组名c前不要加引用符号前不要加引用符号&,因为因为数组名就是数组的首地址。数组名就是数组的首地址。数组名就是数组的首地址。数组名就是数组的首地址。对于对于printf()输出字符串应注意:输出字符串应注意:不输出字符串结束符号不输出字符串结束符号0输出项只能是数组名,不能是具体的数组元素。输出项只能是数组名,不能是具体的数组元素。printf(“%s”,c2);是错误的。是错误的。数组定义长度大于实际长度时,输出到数组定义长度大于实际长度时,输出到0符为止。符为止。如:如:charc10=”china”;printf(“%s”,c);只输出只输出china对于用对于用scanf()输入字符串应注意:输入字符串应注意:输入的数组名此前应定义。输入的数组名此前应定义。数组名前不要加取地址符号数组名前不要加取地址符号&,数组名就是数组的,数组名就是数组的地址。地址。键入的串长度应小于定义的长度。键入的串长度应小于定义的长度。利用一个利用一个scanf()函数输入多个串时,各个串之间用函数输入多个串时,各个串之间用空格空格分隔。分隔。如:如:charc15,c25,c35;scanf(“%s%s%s”,c1,c2,c3);可输入数据:可输入数据:Howareyou?当遇到分隔符时就认为字符串输入完毕当遇到分隔符时就认为字符串输入完毕,同时将分隔符前同时将分隔符前面的字符以及字符串结束字符面的字符以及字符串结束字符0一并存入数组中。如:一并存入数组中。如:charc15scanf(“%s”,c);若输入:若输入:Howareyou?则字符串则字符串C中只能得到中只能得到How,余下的位置填,余下的位置填02、使用、使用getsgets(数组名数组名)和和putsputs(数组名数组名)输入和输出输入和输出字符串输出函数字符串输出函数形式:形式:putsputs(字符数组或字符串字符数组或字符串)功能:将一个字符串输出到屏幕上,同时将字符串结功能:将一个字符串输出到屏幕上,同时将字符串结束标志束标志0换成换成n,即输出完字符串后换行。,即输出完字符串后换行。例例J7-9:#includevoidmain()staticchara1=chinanbeijing;staticchara2=china0beijing;puts(a1);puts(a2);puts(WUHAN);getch();运行结果:运行结果:chinabeijingchinaWUHAN(演示)(演示)字符串输入函数字符串输入函数从键盘输入一个字符串到字符数组保存,字符数组名就是保存的地址。从键盘输入一个字符串到字符数组保存,字符数组名就是保存的地址。形式:形式:gets(字符数组字符数组)功能:从键盘输入一个字符串到字符数组。在输入过程中,遇功能:从键盘输入一个字符串到字符数组。在输入过程中,遇“”回回车符结束,并将其转换为车符结束,并将其转换为0存入字符串尾部,存入字符串尾部,特特殊殊地地:对对对对输输输输入入入入的的的的 空空空空格格格格 可可可可作作作作为为为为字字字字符符符符串串串串的的的的一一一一个个个个字字字字符符符符存存存存入入入入字字字字符符符符型型型型数数数数组组组组中中中中。例例J7-10:用用gets和和scanf函数分别输入字符串,函数分别输入字符串,#includevoidmain()chara115,a215;gets(a1);scanf(%s,a2);printf(a1=%sn,a1);printf(a2=%sn,a2);输入:输入:chinabeijing chinabeijing 输出:输出:a1=chinabeijinga2=china五、字符串处理函数五、字符串处理函数除了输入输出字符串函数外,在除了输入输出字符串函数外,在C语言的函数库中还提语言的函数库中还提供了一些专门的字符串处理函数。这些函数是:供了一些专门的字符串处理函数。这些函数是:字符串连接函数:字符串连接函数:strcat字符串拷贝函数:字符串拷贝函数:strcpy字符串比较函数:字符串比较函数:strcmp求字符串长度函数:求字符串长度函数:strlen大小写字母转换函数:大小写字母转换函数:strlwr和和strupr同样:在使用这些库函数前必须在文件开始处用同样:在使用这些库函数前必须在文件开始处用:include命令命令将相关的头文件包含到源程序中。将相关的头文件包含到源程序中。字符串连接函数字符串连接函数形式:形式:strcat(字符数组字符数组1,字符数组,字符数组2)功功能能:连连接接两两个个数数组组中中的的字字符符串串。把把字字符符数数组组2中中的的内内容容(串串2)连连接接到到字字符符数数组组1的的后后面面,结结果果存存放放到到字字符符数数组组1中中,strcat函函数数值值得得到到字符数组字符数组1的地址。的地址。例例:(演示)(演示)#includevoidmain()chara11=I;charb11=amaboy;printf(%sn,strcat(a,b);printf(%dn,sizeof(a);getch();执行结果如下:执行结果如下:Iamaboy11说明:说明:(1)函数应有两个参数,参数函数应有两个参数,参数1变量是字符数组名,但字符变量是字符数组名,但字符数组也可以是字符串。数组也可以是字符串。(2)定义字符数组定义字符数组1时必须考虑有容纳两个字符串的空间。时必须考虑有容纳两个字符串的空间。(3)连接后字符串中原有的连接后字符串中原有的0被字符串的第一个字被字符串的第一个字符替代,新串中保留了字符串中的符替代,新串中保留了字符串中的0,作为新串,作为新串的结束标志。的结束标志。如:如:charstr130=World“;str212=“Cup;printf(%sn,strcat(str1,str2);执行结果为:执行结果为:WorldCup字符串拷

    注意事项

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

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




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

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

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

    收起
    展开