书签 分享 收藏 举报 版权申诉 / 61
上传文档赚钱

类型c语言程序设计课件:第七章数组.ppt

  • 上传人(卖家):罗嗣辉
  • 文档编号:2057181
  • 上传时间:2022-01-26
  • 格式:PPT
  • 页数:61
  • 大小:259.50KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《c语言程序设计课件:第七章数组.ppt》由用户(罗嗣辉)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    语言程序设计 课件 第七 数组
    资源描述:

    1、第七章 数 组 7 71 1 数据结构与数组的概念数据结构与数组的概念 影响程序设计的因素除算法外还有数据结构。影响程序设计的因素除算法外还有数据结构。 数据结构概念数据结构概念 编写一个程序除了重视算法的设计外,还需编写一个程序除了重视算法的设计外,还需重视数据类型的选择,即选择合适的数据类型来重视数据类型的选择,即选择合适的数据类型来存放要处理的数据。在程序设计中,数据类型就存放要处理的数据。在程序设计中,数据类型就称为称为数据结构数据结构,选择合适的数据类型实际上就是,选择合适的数据类型实际上就是进行进行数据结构的设计数据结构的设计。在程序设计中有格言:在程序设计中有格言: 数据结构数据

    2、结构+ +算法算法= =程序程序 说明数据结构与算法同等重要,算法依赖说明数据结构与算法同等重要,算法依赖于数据结构,对于同一个问题的求解,可以于数据结构,对于同一个问题的求解,可以采用不同的数据结构和不同的算法,对不同采用不同的数据结构和不同的算法,对不同的数据结构有不同的算法,其复杂程度也会的数据结构有不同的算法,其复杂程度也会不同,选择合适的数据结构,可以降低算法不同,选择合适的数据结构,可以降低算法的复杂程度。因此,在程序设计中应重视数的复杂程度。因此,在程序设计中应重视数据结构的设计。据结构的设计。例:求任意例:求任意100100个数中的最大值。个数中的最大值。 main()main

    3、() int int i, i,a a,max;,max; max=-32768 max=-32768 for(i=1;i=100;i+) for(i=1;imax) max=a;max) max=a; printf printf(“n max=%d”,max);(“n max=%d”,max); 用一个简单变量作为用一个简单变量作为数据结构,合理,算数据结构,合理,算法简单法简单 对于三个数的排序:对于三个数的排序:main()main() int int a,b,ca,b,c,t; ,t; scanf scanf(“%d,%d,%d”,&a,&b,&c);(“%d,%d,%d”,&a,&b

    4、,&c); if(ab) t=a; a=b; b=t;if(ab) t=a; a=b; b=t; if(ac) t=a; a=c; c=t; if(ac) t=a; a=c; c=t; if(bc) t=b; b=c; c=t; if(bc) t=b; b=c; c=t; printf printf(“n %d,%d,%d”,a,b,c);(“n %d,%d,%d”,a,b,c); 对于很多个数的排序用变量会很复杂而用数组会对于很多个数的排序用变量会很复杂而用数组会使算法很简单。使算法很简单。仍可用变量作为数据结构 数组的概念数组的概念int a10a0 a1 a2 a3 a4 a5 a6 a

    5、7 a8 a9 一组具有同样类型的数据的集合一组具有同样类型的数据的集合 统一用一个名字代表统一用一个名字代表-数组名(数组名(代表一组数代表一组数)数组元素下标数组名 数组中的各成员称数组元素,由数组名加数组中的各成员称数组元素,由数组名加下标唯一地确定。下标唯一地确定。 将一组数用一个名字代表,便于管理。将一组数用一个名字代表,便于管理。 只有一个下标的数组称为一维数组;只有一个下标的数组称为一维数组; 可有二维数组、三维数组、可有二维数组、三维数组、七维数组。、七维数组。 7 72 2 一维数组的定义和引用一维数组的定义和引用 定义定义 一般形式:一般形式: 类型符类型符 数组名数组名

    6、常量表达式常量表达式 ; int a10; float b10; 类型符 数组名 长度 作用:作用:分配一组连续的内存单元分配一组连续的内存单元说明:说明: 数组必须先定义后使用。数组必须先定义后使用。 数组名的命名规则与变量相同。数组名的命名规则与变量相同。 常量表达式表示元素的个数(长度),下标常量表达式表示元素的个数(长度),下标 从从0 0开始。开始。 常量表达式不能包含变量,即不允许作动态常量表达式不能包含变量,即不允许作动态定义。定义。 引用引用 逐个引用其元素,不能进行整体引用。逐个引用其元素,不能进行整体引用。 引用的一般形式引用的一般形式: 数组名数组名 下标下标 如:如:a

    7、0=50; a1=100;a0=50; a1=100; a2=a0+a1; a2=a0+a1; 与与 a2=a0+a1a2=a0+a1有根本性的区别:下标可变。有根本性的区别:下标可变。例:从键盘输入例:从键盘输入1010个数。个数。用变量:用变量:( (不方便不方便) )scanfscanf(“%d%d%d%d%d%d%d%d%d%d”(“%d%d%d%d%d%d%d%d%d%d”, &a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);&a0,&a1,&a2,&a3,&a4,&a5,&a6,&a7,&a8,&a9);用数组:用数组: ( (灵活方便灵活方便) )

    8、 for(i=0;i10;i+) scanf for(i=0;i10;i+) scanf(“%d”,&(“%d”,&aiai);); 用循环控制输入个数和下标的变化。用循环控制输入个数和下标的变化。 注意下标的变化范围。注意下标的变化范围。 初始化初始化 在定义数组的同时给数组赋初值。在定义数组的同时给数组赋初值。 intainta10=0,1,2,3,4,5,6,7,8,9;10=0,1,2,3,4,5,6,7,8,9; int int a10=0,1,2,3,4;a10=0,1,2,3,4; int int a=0,1,2,3,4;a=0,1,2,3,4; 应用举例应用举例(1 1)对)对

    9、100100个学生的分数统计最高分、最低分个学生的分数统计最高分、最低分和平均分。和平均分。 两种方法:两种方法: 用变量作为存放初始数据的数据结构用变量作为存放初始数据的数据结构 用数组作为存放初始数据的数据结构用数组作为存放初始数据的数据结构 main() main() int int i, i,a a,max,min;,max,min; float aver=0; float aver=0; max=0; min=100; max=0; min=100; for(i=0;i100;i+) for(i=0;imax) max=a; if(amax) max=a; if(amin) min=

    10、a; if(amin) min=a; aver+=a; aver+=a; aver/=100; aver/=100; printf printf(“n %d,%d,%f”,max,min,aver);(“n %d,%d,%f”,max,min,aver); 用变量 main()main() int int i, i,a100a100,max,min;,max,min; float aver=0; float aver=0; for(i=0;i100;i+) scanf for(i=0;i100;i+) scanf(“%d”,&ai);(“%d”,&ai); max=a0; min=a0; ma

    11、x=a0; min=a0; for(i=0;i100;i+) for(i=0;imax) max=ai; if(aimax) max=ai; if(aimin) min=ai; if(aiamax) max=i;if(aiamax) max=i;if(aiamin) min=i;if(aiamin) min=i; (2 2)统计高于平均分的人数。)统计高于平均分的人数。main()main() int int i,a,n; i,a,n; float aver=0; float aver=0; for(i=0;i100;i+) for(i=0;i100;i+) scanf scanf(“%d”,

    12、&a);(“%d”,&a); aver+=a; aver+=a; aver/=100; aver/=100; n=0;n=0; for(i=0;i100;i+) for(i=0;iaver)n+; if(aaver)n+; printf printf(“n %d”,n);(“n %d”,n); 用变量数据结构不合理数据结构不合理main()main() int int i, i,a100a100,n;,n; float aver=0; float aver=0; for(i=0;i100;i+) scanf for(i=0;i100;i+) scanf(“%d”,&ai);(“%d”,&ai)

    13、; for(i=0;i100;i+) aver+=ai; for(i=0;i100;i+) aver+=ai; aver/=100; aver/=100; n=0; n=0; for(i=0;iaver)n+; for(i=0;iaver)n+; printf printf(“n %d”,n);(“n %d”,n); 用数组1(3)对100个学生的分数统计出每分一档人数。 0 ? 1 ? 2 ? 3 ? 4 ? 99 ? 100 ?main()main() int int i,a;i,a; for(i=1;i=100;i+) for(i=1;i=100;i+) scanf scanf(“%d”

    14、,&a);(“%d”,&a); 输出输出 int int i,a,i,a,n101;n101;for(i=0;i101;i+) ni=0;for(i=0;i101;i+) ni=0;na+;na+;完整程序:完整程序:main()main() int int i,a,n101;i,a,n101; for(i=0;i101;i+)ni=0; for(i=0;i101;i+)ni=0; for(i=1;i=100;i+) for(i=1;i=0;i-) for(i=100;i=0;i-) printf printf(“n %3d:%3d”,i,ni);(“n %3d:%3d”,i,ni); 体会数

    15、组作体会数组作为存放结果为存放结果的数据结构的数据结构时的优越性时的优越性。按按1010分一档统计?分一档统计?main()main() int int i,a,n101;i,a,n101; for(i=0;i101;i+)ni=0; for(i=0;i101;i+)ni=0; for(i=1;i=100;i+) for(i=1;i=100;i+) scanf scanf(“%d”,&a);(“%d”,&a); na+; na+; int int i,a,ni,a,n1111;for(i=0;ifor(i=0;i1111;i+)ni=0;i+)ni=0;nna/10a/10+;+;(4 4)对

    16、)对1010个学生的分数按从小到大的顺序排序个学生的分数按从小到大的顺序排序后输出。后输出。 两种典型的排序算法:两种典型的排序算法:选择法选择法和和起泡法起泡法。选择法基本思想:选择法基本思想: 首先选择最小的数放在首先选择最小的数放在0 0位置,再在剩下的数位置,再在剩下的数中选择最小的数放在下一位置,中选择最小的数放在下一位置,依次类,依次类推,共进行推,共进行9 9次选择。次选择。 5 8 7 4 3 9 0 1 2 6 每次选择都要与其后的所有数进行比较换位。每次选择都要与其后的所有数进行比较换位。 5 8 7 4 3 9 0 1 2 6 ijmain()main() int int

    17、 a10,i,j,t; a10,i,j,t; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(i=0;i9;i+) for(i=0;i9;i+) for(j= for(j=i+1i+1 ;j10 ;j+) ;jaj) if(aiaj) t=ai; ai=aj; aj=t; t=ai; ai=aj; aj=t; f o r ( j = 0 ; j 1 0 ; j + + ) f o r ( j = 0 ; j 1 0 ; j + + ) printfprintf(“%3d”,ai);(“%3d”,ai); 5

    18、 8 7 4 3 9 0 1 2 6 5 8 7 4 3 9 0 1 2 6 ij 先找最小值所在的位置,最后再换位:main()main() inta inta10,i,j,t,k; 10,i,j,t,k; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(i=0;i9;i+) for(i=0;i9;i+) k=i; k=i; for(j=i+1;j10;j+) if(ajak)k=j; for(j=i+1;j10;j+) if(ajak)k=j; t=ai; ai=ak; ak=t; t=ai; ai=a

    19、k; ak=t; for(j=0;j10;j+) printf for(j=0;j10;j+) printf(“%3d”,ai);(“%3d”,ai); 起泡法基本思想起泡法基本思想: 首先将所有数中的最大值首先将所有数中的最大值“冒泡冒泡”到最后位到最后位置,再将剩下的数中的最大值置,再将剩下的数中的最大值“冒泡冒泡”到上一位到上一位置,置,依次类推,共进行,依次类推,共进行9 9次次“冒泡冒泡”。 每次每次“冒泡冒泡”都是一种翻滚过程,即相邻两个都是一种翻滚过程,即相邻两个数进行比较换位。数进行比较换位。 5 8 7 4 3 9 0 1 2 6main()main() int int a1

    20、0,i,j,t; a10,i,j,t; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(j=1;j=9;j+) for(j=1;j=9;j+) for(i=0;i10-j; i+) for(i=0;iai+1) if(aiai+1) t= ai; ai= ai+1; ai+1=t; t= ai; ai= ai+1; ai+1=t; for(j=0;j10;j+) printf for(j=0;j10;j+) printf(“%3d”,ai);(“%3d”,ai); 要特别注意两个循环的范围。 ( (5) (

    21、5) 循环移位循环移位 对一数列中的每个数向后移对一数列中的每个数向后移3 3个位置,最后个位置,最后3 3个个数移到最前面。数移到最前面。 5 8 7 4 3 9 0 1 2 6 1 2 6 5 8 7 4 3 9 0用循环移位实现用循环移位实现: 5 8 7 4 3 9 0 1 2 6main()main() int int i,j,k,a10;i,j,k,a10; for(i=0;i10;i+)scanf for(i=0;i10;i+)scanf(“%d”,&ai);(“%d”,&ai); for(i=0;i10;i+)printf for(i=0;i10;i+)printf(“%3d”

    22、,ai);(“%3d”,ai); for(i=1;i10;i+)ai=ai-1;for(i=1;i0;i-)ai=ai-1;for(i=9;i0;i-)ai=ai-1;k=a9;k=a9;a0=k;a0=k;for(j=1;j=3;j+)for(j=1;j=3;j+) k=a9;k=a9; (6)(6)狐狸找兔子问题狐狸找兔子问题绕 围绕着山顶有围绕着山顶有1010个洞,一只兔子和一只狐狸个洞,一只兔子和一只狐狸分别住在洞里,狐狸总想吃掉兔子;一天,兔子分别住在洞里,狐狸总想吃掉兔子;一天,兔子对狐狸说:你想吃掉我有一个条件,先把洞顺序对狐狸说:你想吃掉我有一个条件,先把洞顺序编号,你从最后一

    23、个洞出发,第一次先到第一个编号,你从最后一个洞出发,第一次先到第一个洞找我,第二次隔一个洞找,第三次隔两个洞找,洞找我,第二次隔一个洞找,第三次隔两个洞找,依次类推,寻找次数不限,我躲在一个洞里,依次类推,寻找次数不限,我躲在一个洞里不动,只要找到我你就可以饱餐一顿。狐狸一想不动,只要找到我你就可以饱餐一顿。狐狸一想只有只有1010个洞,寻找次数又不限,那有找不到的呢?个洞,寻找次数又不限,那有找不到的呢?马上答应了条件,结果狐狸跑断了腿也没找到,马上答应了条件,结果狐狸跑断了腿也没找到,请问兔子躲在哪个洞里?请问兔子躲在哪个洞里?12346789105 算法思想:算法思想: 开辟数组,每个元

    24、素代表一个洞,并赋初值开辟数组,每个元素代表一个洞,并赋初值0 0,表示各个洞都还未找,然后按规律找,每,表示各个洞都还未找,然后按规律找,每找一个洞,对应的数组元素就赋值找一个洞,对应的数组元素就赋值1 1,表示已,表示已找过,找过,最后根据数组元素值,最后根据数组元素值1 1与与0 0来识别来识别各洞是否已找过。各洞是否已找过。main()main() int int i, k=10; i, k=10; int int a10=0,0,0,0,0,0,0,0,0,0;a10=0,0,0,0,0,0,0,0,0,0; for(i=1;i=10000;i+) for(i=1;i=10000;i

    25、+) k=(k+i)%10;k=(k+i)%10; if(k=0) k=10; if(k=0) k=10; ak-1=1;ak-1=1; for(i=0;i10;i+) for(i=0;i10;i+) if(ai=0) printf if(ai=0) printf(“%3d”,i+1);(“%3d”,i+1); 7 73 3 二维数组的定义和引用二维数组的定义和引用 定义定义 一般形式:一般形式:类型符类型符 数组名数组名 常量表达式常量表达式 常量表达式常量表达式 ; int int a34; float b510;a34; float b510; 行行 列列二维数组的逻辑结构就如同一张表格

    26、二维数组的逻辑结构就如同一张表格: a00 a01 a02 a03 a10 a11 a12 a13 a20 a21 a22 a23 存放形式:按行存放。存放形式:按行存放。a0a1a2 二维数组可以看作是一个特殊的一维数组,二维数组可以看作是一个特殊的一维数组,它的元素又是一个一维数组。它的元素又是一个一维数组。C C语言这样的处语言这样的处理方法在很多情况下显得很方便。理方法在很多情况下显得很方便。 与一维数组相比,二维数组的定义多一个与一维数组相比,二维数组的定义多一个长度,其元素多一个下标。长度,其元素多一个下标。 在应用中,如果要处理的数据如同一数列,在应用中,如果要处理的数据如同一数

    27、列,则可定义一维数组来存放;而如果要处理的数则可定义一维数组来存放;而如果要处理的数据如同一张表格,则应定义二维数组来存放。据如同一张表格,则应定义二维数组来存放。 引用引用 引用形式:引用形式:数组名数组名 下标下标下标下标 如:如:a03=a12+a23;a03=a12+a23; 其元素有两个下标。其元素有两个下标。 例:从键盘输入例:从键盘输入1212个数到二维数组中。个数到二维数组中。 intint a34,i,j; a34,i,j; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j4;j+) for(j=0;j4;j+) scanf scanf(“%d”

    28、,&aij);(“%d”,&aij);需要用两重循环来控制两个下标的变化。需要用两重循环来控制两个下标的变化。 如果键盘输入的数据是:如果键盘输入的数据是:1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 10 11 12, 9 10 11 12, 则在数组中如何存放?两个循环则在数组中如何存放?两个循环换位呢?两个下标换位呢?换位呢?两个下标换位呢? intint a34,i,j; a34,i,j; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j4;j+) for(j=0;j4;j+) scanf scanf(“%d”,&aij);(“%d”

    29、,&aij); for(j=0;j4;j+) for(j=0;j4;j+) for(i=0;i3;i+) for(i=0;i3;i+) scanf scanf(“%d”,&aij);(“%d”,&aij); for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j4;j+) for(j=0;j4;j+) scanf scanf(“%d”,&aji);(“%d”,&aji);例:输入一个表格的数据到二维数组中,并找最例:输入一个表格的数据到二维数组中,并找最 大值所在的位置大值所在的位置main()main() int int a34,i,j,i1,j1; a34,i,j,

    30、i1,j1; for(i=0;i3;i+) for(i=0;i3;i+) f o r ( j = 0 ; j 4 ; j + + ) f o r ( j = 0 ; j 4 ; j + + ) scanfscanf(“%d”,&aij);(“%d”,&aij); i1=0; j1=0;i1=0; j1=0; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j4;j+) for(j=0;jai1j1)i1=i; j1=j;if(aijai1j1)i1=i; j1=j; printf printf(“n %d,%d”,i1,j1);(“n %d,%d”,i1,j1);

    31、初始化初始化 对二维数组赋初值的几种方法:对二维数组赋初值的几种方法: intint a34= a34= 1,2,3,4,5,6,7,8,9,10,11,12; 1,2,3,4,5,6,7,8,9,10,11,12; intint a34=1,2,3,4,5,6,7,8,9,10,11,12; a34=1,2,3,4,5,6,7,8,9,10,11,12; intint a34=1,5,9; a34=1,5,9; intint a34=1,0,6,0,0,11; a34=1,0,6,0,0,11; intint a4=1,2,3,4,5,6,7,8,9,10,11,12; a4=1,2,3,4

    32、,5,6,7,8,9,10,11,12; int int a4=0,0,3,9,10;a4=0,0,3,9,10; 举例举例(1 1)矩阵的基本操作)矩阵的基本操作 二维数组的逻辑结构就如同一个矩阵,因此,二维数组的逻辑结构就如同一个矩阵,因此,矩阵操作都可用二维数组实现。矩阵操作都可用二维数组实现。a11 a12 a13 a1na21 a22 a23 a2na31 a32 a33 a3n am1 am2 am3 amnA=假定假定M=3M=3,N=4N=4 求和:求和:main()main() int int a34,i,j,s=0; a34,i,j,s=0; for(i=0;i3;i+)

    33、for(i=0;i3;i+) for(j=0;j4;j+) s+=aij; for(j=0;j4;j+) s+=aij; 上三角?下三角?主对角线?for(i=0;i3;i+)for(i=0;i3;i+) for(j= for(j=i i;j4;j+) s+=aij;j4;j+) s+=aij;for(i=0;i3;i+)for(i=0;i3;i+) for(j=0;j for(j=0;j=i=i;j+) s+=aij;j+) s+=aij;for(i=0;i3;i+)for(i=0;i3;i+) for(j= for(j=i i;j=;j=i i;j+) s+=aij;j+) s+=aij;

    34、for(i=0;i3;i+) s+=afor(i=0;i3;i+) s+=ai ii i;1 2 3 45 6 7 89 10 11 12非方阵转置:非方阵转置:a aijijbbjijimain()main() int int a34,b43,i,j; a34,b43,i,j; for(i=0;i3;i+) for(i=0;i3;i+) for(j=0;j4;j+) bji=aij; for(j=0;j4;j+) bji=aij; 1 2 3 45 6 7 89 10 11 121 5 9 2 6 103 7 114 8 12方阵转置:方阵转置:a aijijaajijimain()main

    35、() int int a33,i,j,t; a33,i,j,t; for(i=0; i3; i+) for(i=0; i3; i+) for(j=0; j3; j+) for(j=0; j3; j+) t=aij; aij=aji; aji=t; t=aij; aij=aji; aji=t; 1 2 34 5 67 8 9for(j=i+1; j3; j+)for(j=i+1; j3; j+) 将矩阵中和值为最大的那一行元素与首行对换。将矩阵中和值为最大的那一行元素与首行对换。main()main() int a34,i,j,t,s,smax int a34,i,j,t,s,smax=-327

    36、68,row;=-32768,row; for(i=0;i3;i+) for(i=0;i3;i+) s=0;for(j=0;j4;j+)s+=aij; s=0;for(j=0;jsmax) smax if(ssmax) smax=s; row=i;=s; row=i; for(j=0;j4;j+) for(j=0;j4;j+) t=a0j;a0j=arowj; arowj=t; t=a0j;a0j=arowj; arowj=t; 1 5 3 84 6 1 79 2 5 6 7 74 4 字符数组字符数组 用于存放字符的数组称字符数组。用于存放字符的数组称字符数组。 字符数组的每一个元素存放一个

    37、字符。字符数组的每一个元素存放一个字符。 字符数组的独特之处:字符数组的独特之处: (1 1)字符数组可以看作字符串变量。)字符数组可以看作字符串变量。 (2 2)对字符数组可以进行某些整体操作。)对字符数组可以进行某些整体操作。 (3 3)有专用的字符串处理函数。)有专用的字符串处理函数。 1 1、将字符数组作为字符串变量、将字符数组作为字符串变量 char c10;char c10; 给给c c分配分配1010个字节的内存单元。个字节的内存单元。 把把c c看作数组时,按数组元素的形式访问:看作数组时,按数组元素的形式访问: c0=a; c1=b; c2=c; c0=a; c1=b; c2

    38、=c; c3=d;c3=d; a b c d char c10=a,b,c,d ; char c10=a,b,c,d ; 也属于字符赋初值的形式。也属于字符赋初值的形式。 如果把字符序列看作一个整体(字符串),如果把字符序列看作一个整体(字符串),则则c c就可看作是存放这个字符串的串变量;但必就可看作是存放这个字符串的串变量;但必须在字符序列后加上须在字符序列后加上“字符串结束标志字符串结束标志”后,才后,才能成为完整的字符串。能成为完整的字符串。 如:如:c4=0; c4=0; 或或 c4=0;c4=0; a b c d 0 a b c d 0 也可以按字符串形式初始化:也可以按字符串形式

    39、初始化: char c10=”abcdchar c10=”abcd”;”; char c=”abcd char c=”abcd”; ”; 分配分配5 5个字节个字节 2 2、对字符数组的整体操作、对字符数组的整体操作 对字符数组的有些操作可以整体进行,如输入对字符数组的有些操作可以整体进行,如输入输出。输出。 for(i=0;i10;i+) printffor(i=0;i10;i+) printf(“%c”,ci);(“%c”,ci); 对数组元素操作对数组元素操作 printfprintf(“%s”,c);(“%s”,c); 整体操作整体操作 注意以上两种操作有区别。注意以上两种操作有区别。

    40、 可将前者改为:可将前者改为: for(i=0;ci!=0;i+)printffor(i=0;ci!=0;i+)printf(“%c”,c(“%c”,ci);i); 对于输入:对于输入: for(i=0;i10;i+) scanffor(i=0;i10;i+) scanf(“%c”,&ci);(“%c”,&ci); 对数组元素操作对数组元素操作 scanfscanf(“%s”,c);(“%s”,c); 整体操作整体操作 对字符数组输入输出可以整体进行,但不允许对字符数组输入输出可以整体进行,但不允许整体赋值:整体赋值: char c10=”abcdchar c10=”abcd”,x10;”,x

    41、10; x=c; x=c; 不允许不允许 对于二维字符数组,可以看作是一维的字符对于二维字符数组,可以看作是一维的字符串数组。串数组。 例:从键盘输入例:从键盘输入1010个人的名字到计算机个人的名字到计算机: main() main() int int i; i; char name1020; char name1020; 1010个元素的一维字符串数组个元素的一维字符串数组 for(i=0;i10;i+) scanffor(i=0;i1字符串字符串2 2时:时:返回一正整数返回一正整数。 字符串字符串110(a,b)0) puts(a); ) puts(a); 不能用不能用abab els

    42、e puts(b); else puts(b); 使用字符串处理函数需要包含头文件使用字符串处理函数需要包含头文件string.hstring.h (6 6) strlenstrlen( (字符数组字符数组) ) 测试字符串的实际长度(从返回值得到)。测试字符串的实际长度(从返回值得到)。 (7 7) strlwrstrlwr( (字符串字符串) ) 将字符串中的大写字母全改为小写字母。将字符串中的大写字母全改为小写字母。 (8 8) struprstrupr( (字符串字符串) ) 将字符串中的小写字母全改为大写字母。将字符串中的小写字母全改为大写字母。 注意:注意:在使用字符串处理函数时,

    43、别忘了将在使用字符串处理函数时,别忘了将头文件头文件string.hstring.h包含进去。包含进去。4 4、字符串操作举例、字符串操作举例(1 1)从键盘输入一字符串到数组从键盘输入一字符串到数组a a中,再拷贝到中,再拷贝到数组数组b b中(不用库函数)。中(不用库函数)。 main()main() char a50,b50; char a50,b50; int i; int i; scanf scanf(“%s”,a);(“%s”,a); for(i=0; ai; i+) bi=ai; for(i=0; ai; i+) bi=ai; bi=0; bi=0; printf printf(

    44、“%s”,b);(“%s”,b); (2 2)从键盘输入两个字符串到数组从键盘输入两个字符串到数组a a和和b b中,在中,在将将b b中的内容连接到中的内容连接到a a中(不用库函数)。中(不用库函数)。main()main() char a50,b50; char a50,b50; int int i,j;i,j; scanf scanf(“%s%s”,a,b);(“%s%s”,a,b); for(i=0; ai; i+); for(i=0; ai; i+); for(j=0; bj; j+) ai+=bj; for(j=0; bj; j+) ai+=bj; ai=0; ai=0; printf printf(“%s”,a);(“%s”,a); (3 3)从键盘输入一字符串,并将其中的大写字从键盘输入一字符串,并将其中的大写字母改成小写字母后输出(不用库函数)。母改成小写字母后输出(不用库函数)。main()main() char a50; char a50; int int i;i; scanf scanf(“%s”,a);(“%s”,a); for(i=0; ai; i+) for(i=0; ai; i+) if(ai=A&ai=A&ai=Z) ai+=32; printf printf(“%s”,a);(“%s”,a);

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:c语言程序设计课件:第七章数组.ppt
    链接地址:https://www.163wenku.com/p-2057181.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库