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

类型第5章利用数组处理批量数据课件.ppt

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

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

    特殊限制:

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

    关 键  词:
    利用 数组 处理 批量 数据 课件
    资源描述:

    1、.前几章前几章使用的变量都属于使用的变量都属于基本类型基本类型,例如整型、字符型、浮点型数据,这例如整型、字符型、浮点型数据,这些都是简单的数据类型。些都是简单的数据类型。对于有些数据,只用简单的数据类型对于有些数据,只用简单的数据类型是不够的,是不够的,难以难以反映出数据的反映出数据的特点特点,也难以有效地进行处理。也难以有效地进行处理。.如果有如果有1000名学生名学生,每个学生有一每个学生有一个成绩,需要求这个成绩,需要求这1000名学生的平名学生的平均成绩。均成绩。用用s1,s2,s3,s1000表示每个学生表示每个学生的成绩,能体现的成绩,能体现内在联系内在联系。C语言用方括号中的数

    2、字表示下标,语言用方括号中的数字表示下标,如用如用s15表示表示数组名数组名.数组是一组数组是一组有序数据的集合有序数据的集合。数组中。数组中各数据的排列是有一定规律的,下标各数据的排列是有一定规律的,下标代表数据在数组中的序号代表数据在数组中的序号用一个用一个数组名数组名和和下标下标惟一确定数组中惟一确定数组中的元素的元素数组中的每一个元素都属于数组中的每一个元素都属于同一个数同一个数据类型据类型.5.1 怎样定义和引用一维数组怎样定义和引用一维数组5.2 怎样定义和引用二维数组怎样定义和引用二维数组5.3 字符数组字符数组.5.1.1 怎样定义一维数组怎样定义一维数组5.1.2 怎样引用一

    3、维数组元素怎样引用一维数组元素5.1.3 一维数组的初始化一维数组的初始化5.1.4 一维数组程序举例一维数组程序举例.一维数组是数组中最简单的一维数组是数组中最简单的它的元素只需要用数组名加一个下它的元素只需要用数组名加一个下标,就能惟一确定标,就能惟一确定要使用数组,必须在程序中先定义要使用数组,必须在程序中先定义数组数组.定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达式;数组名的命名规则和变量名相同数组名的命名规则和变量名相同如如 int a10;数组名数组名.定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数

    4、组名常量表达式常量表达式;数组名的命名规则和变量名相同数组名的命名规则和变量名相同如如 int a10;数组数组长度长度.定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达式;数组名的命名规则和变量名相同数组名的命名规则和变量名相同如如 int a10;10个元素个元素:a0,a1,a2,a9每个元素的数据类型每个元素的数据类型a0 a1 a2 a3a7 a8 a9.定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达式;int a4+6; 合法合法int n=10; int an;不合法不合法.在定

    5、义数组并对其中各元素赋值后,就在定义数组并对其中各元素赋值后,就可以引用数组中的元素可以引用数组中的元素注意:只能引用数组元素而不能一次整注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值体调用整个数组全部元素的值.引用数组元素的表示形式为:引用数组元素的表示形式为: 数组名下标数组名下标如如a0=a5+a7-a2*3 合法合法int n=5,a10;an=20;合法合法. 例例5.1 对对10个数组元素依次赋值为个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。,要求按逆序输出。解题思路:解题思路:u定义一个长度为定义一个长度为10的数组,数组定义为整型

    6、的数组,数组定义为整型u要赋的值是从要赋的值是从0到到9,可以用循环来赋值,可以用循环来赋值u用循环按下标从大到小输出这用循环按下标从大到小输出这10个元素个元素.#include int main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); return 0; 使使a0a9的值为的值为090123456789a0a1a2a3a4a5a6a7a8a9.#include int main() int i,a10; for (i=0; i=0; i-) printf(%d ,ai); printf(n); return 0;

    7、 先输出先输出a9,最,最后输出后输出a00123456789a0a1a2a3a4a5a6a7a8a9.在定义数组的同时,给各数组元素赋值在定义数组的同时,给各数组元素赋值int a10=0,1,2,3,4,5,6,7,8,9;int a10=0,1,2,3,4;相当于相当于 int a10=0,1,2,3,4,0,0,0,0,0;int a10=0,0,0,0,0,0,0,0,0,0;相当于相当于 int a10=0;int a5=1,2,3,4,5;可写为可写为 int a =1,2,3,4,5;. 例例5.2 用数组处理求用数组处理求Fibonacci数列问题数列问题解题思路:解题思路:

    8、u例例5.8中用简单变量处理的,中用简单变量处理的,缺点缺点不能在内存不能在内存中保存这些数。假如想直接输出数列中第中保存这些数。假如想直接输出数列中第25个数,是很困难的。个数,是很困难的。u如果用数组处理,每一个数组元素代表数列中如果用数组处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组的一个数,依次求出各数并存放在相应的数组元素中元素中.#include int main() int i; int 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(

    9、“%12d”,fi); printf(n); return 0;. 例例5.3 有有10个地区的面积,要求对它们个地区的面积,要求对它们按由小到大的顺序排列。按由小到大的顺序排列。解题思路:解题思路:u排序的规律有两种:一种是排序的规律有两种:一种是“升序升序”,从小到从小到大;另一种是大;另一种是“降序降序”,从大到小,从大到小u把题目抽象为:把题目抽象为:“对对n个数按升序排序个数按升序排序”u采用起泡法排序采用起泡法排序.985420895420859420854920854290854209大数沉淀,小数起泡大数沉淀,小数起泡a0a1a2a3a4a5for(j=0;jaj+1) t=a

    10、j;aj=aj+1;aj+1=t; .854209584209548209542809542089a0a1a2a3a4a5for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t; .542089452089425089420589a0a1a2a3a4a5for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t; .420589240589204589a0a1a2a3a4a5for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t; .204589024589a0a1a2a3a4a5for(j=0;jaj+1) t=aj;aj=aj+1;aj+1=t; .f

    11、or(j=0;iaj+1) for(j=0;jaj+1) for(j=0;jaj+1) for(j=0;jaj+1) for(i=5;i0;i-).int a10; int i,j,t;printf(input 10 numbers :n);for (i=0;i10;i+) scanf(%d,&ai); printf(n);for(i=0;j9;j+)for(j=0;iaj+1) t=aj;aj=aj+1;aj+1=t;printf(the sorted numbers :n);for(i=0;i10;i+) printf(%d ,ai);printf(n);.【例【例4-4】查找问题】查找问

    12、题假设数组假设数组a中有中有10个互不相同且按从小到个互不相同且按从小到大排列的数,从键盘上再输入一个同类型大排列的数,从键盘上再输入一个同类型的数,然后在数组的数,然后在数组a中查找中查找x,如果找到,如果找到,输出相应的下标,否则,输出输出相应的下标,否则,输出“Not Found”。.顺序查找顺序查找先用较简单的方法实现查找,就是在数组先用较简单的方法实现查找,就是在数组a中从第一个开始比较,若相等则找到,结中从第一个开始比较,若相等则找到,结束查找;否则继续比较第二个、第三个束查找;否则继续比较第二个、第三个。如果都没有找到,说明。如果都没有找到,说明x不在数组不在数组a中,输出中,输

    13、出“Not Found”。.#include Void main() int x, i, a10=2, 3, 5, 8, 12, 13, 14, 15, 18, 20; printf(Please input a number to search:n); scanf(%d, &x);for(i = 0; ir5,令令low=mid+1low =6mid =856=r8查找成功查找成功(1)(1)查的查的5656. 1221303538404855566064 0 1 2 3 4 5 6 7 8 9 10low =0high =10mid =536r2,令令low=mid+1high =4low

    14、=mid =336r3,令令low=mid+1high=low=mid =436high,子表长为子表长为0,查找失败。,查找失败。 (b)查找)查找36.#include void main() int x,low,high,mid; int a11=12, 21, 30, 35, 38, 40, 48, 55, 56, 60,64; printf(Please input a number to search:n); scanf(%d, &x); .low = 0;high = 10; /*设置下标边界设置下标边界*/ while(low = high) /*利用循环,查找利用循环,查找x

    15、所在的范围所在的范围*/mid = (low + high) / 2;if(x = amid) break;else if(x high)printf(Not Found!n);elseprintf(The position in array a is %dn, mid );.2456 1847 1243 1600 2346 27573045 2018 1725 2020 2458 14361427 1175 1046 1976 1477 20181分队分队2分队分队3分队分队队员队员1 队员队员2队员队员3 队员队员4队员队员5队员队员6float pay36;.5.2.1怎样定义二维数组怎

    16、样定义二维数组5.2.2怎样引用二维数组的元素怎样引用二维数组的元素5.2.3二维数组的初始化二维数组的初始化5.2.4二维数组程序举例二维数组程序举例.二维数组定义的一般形式为二维数组定义的一般形式为 类型符类型符 数组名数组名常量表达式常量表达式常量表达式常量表达式; 如:如:float a34,b510;二维数组可被看作是一种特殊的一维数组:二维数组可被看作是一种特殊的一维数组: 它的元素又是一个一维数组它的元素又是一个一维数组例如,把例如,把a看作是一个一维数组,它有看作是一个一维数组,它有3个元素:个元素: a0、a1、a2每个元素又是一个包含每个元素又是一个包含4个元素的一维数组个

    17、元素的一维数组.a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23a0a1a2.a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23逻辑存储逻辑存储内存中的存储顺序内存中的存储顺序.二维数组元素的表示形式为二维数组元素的表示形式为: 数组名下标下标数组名下标下标 b12=a23/2 合法合法for(i=0;im;i+) printf(“%d,%dn”,ai0,a0i);合法合法.int a34=1,2,3,4,5,6,7,8, 9,10,11,12;int a34=1,2,3,4,5,6,7,8,9,10,11,12

    18、;int a34=1,5,9;等价于等价于int a34=1,0,0,0,5,0,0,0, 9,0,0,0;int a34=1,5,6;相当于相当于int a34=1,5,6,0;.int a34=1,2,3,4,5,6,7,8,9,10,11,12;等价等价于于:int a 4=1,2,3,4,5,6,7,8,9,10,11,12;int a4=0,0,3, ,0,10;合法合法. 例例5.4 将一个二维数组行和列的元素互换,将一个二维数组行和列的元素互换,存到另一个二维数组中。存到另一个二维数组中。654321a635241b.解题思路:解题思路:u可以定义两个数组:数组可以定义两个数组:

    19、数组a为为2行行3列,存放指定列,存放指定的的6个数个数u数组数组b为为3行行2列,开始时未赋值列,开始时未赋值u将将a数组中的元素数组中的元素aij存放到存放到b数组中的数组中的bji元素中元素中u用嵌套的用嵌套的for循环完成循环完成.#include int main() int a23=1,2,3,4,5,6; int b32,i,j; printf(array a:n); for (i=0;i=1;i+) for (j=0;j=2;j+) printf(%5d,aij); bji=aij; printf(n); 处理处理a的一行中各元素的一行中各元素处理处理a中某一列元素中某一列元素

    20、输出输出a的的各元素各元素a元素值赋给元素值赋给b相应元素相应元素. printf(array b:n); for (i=0;i=2;i+) for(j=0;jmax,则表示则表示a01是已经比过的数据中值最大的,是已经比过的数据中值最大的,把它的值赋给把它的值赋给max,取代了,取代了max的原值的原值u以后依此处理,以后依此处理,最后最后max就是最大的值就是最大的值. for i=0 to 2 for j=0 to 3max=aijrow=Icolum=jaijmax真真 max=a00输出:输出:max,row,colum假假.记行号记行号 int i,j,row=0,colum=0,

    21、max; int a34=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=%dnrow=%dn colum=%dn,max,row,colum);记记最大值最大值记记列列号号.【例例4-6】求求33矩阵对角线之和。矩阵对角线之和。基本思想:基本思想:用一个用一个33二维数组表示该矩阵,对角线元二维数组表示该矩阵,对角线元素的特点是行号等于列号。遍历该素的特点是行号等于列号。遍历该33二二维数组,对符合对角线特点的元素累加求维数组,

    22、对符合对角线特点的元素累加求和。和。 .Void main()int a33;int i,j,sum=0;printf(input 33matrix:n);for (i=0;i3;i+) /*输入输入3*3矩阵并打印出来矩阵并打印出来*/for (j=0;j3;j+)scanf(%d,&aij);printf(%5d,aij);printf(n);.for (i=0;i3;i+) for (j=0;j3;j+) if(i=j)sum+=aij; /*对角线上的元素所处的位置是行列下标相对角线上的元素所处的位置是行列下标相等等*/printf(The sum is %dn,sum);.【例例4-

    23、7】打印出以下杨辉三角形(要求打打印出以下杨辉三角形(要求打印印10行)。行)。11 11 2 11 3 3 1 1 4 6 4 1 .基本思想:基本思想: 杨辉三角形的特点是第一列及对角线上杨辉三角形的特点是第一列及对角线上均为均为1,其余每一个元素正好等于它上面,其余每一个元素正好等于它上面一行的同一列和前一列的两个元素之和。一行的同一列和前一列的两个元素之和。即即aij=ai-1j-1+ai-1j.void main()int i,j;int a1010;printf(n);for(i=0;i10;i+) /*为杨辉三角的每行第为杨辉三角的每行第1列的元列的元素和对角线上元素赋值素和对角

    24、线上元素赋值1*/ai0=1;aii=1;./*从杨辉三角形的第三行、第二列开始,每从杨辉三角形的第三行、第二列开始,每个元素值等于其上一行对应列元素的值加个元素值等于其上一行对应列元素的值加上前一列元素的值上前一列元素的值*/for(i=2;i10;i+)for(j=1;ji;j+) aij=ai-1j+ai-1j-1;.for(i=0;i10;i+) /*打印输出杨辉三角形打印输出杨辉三角形*/for(j=0;j=i;j+)/*每一行只输出至对角线的位置为止每一行只输出至对角线的位置为止*/printf(%5d,aij);printf(n); .5.3.1怎样定义字符数组怎样定义字符数组5

    25、.3.2字符数组的初始化字符数组的初始化5.3.3怎样引用字符数组中的元素怎样引用字符数组中的元素5.3.4字符串和字符串结束标志字符串和字符串结束标志5.3.5 字符数组的输入输出字符数组的输入输出5.3.6善于使用善于使用字符串处理函数字符串处理函数5.3.7字符数组应用举例字符数组应用举例.用来存放字符数据的数组是字符数组用来存放字符数据的数组是字符数组字符数组中的一个元素存放一个字符字符数组中的一个元素存放一个字符定义字符数组的方法与定义数值型数定义字符数组的方法与定义数值型数组的方法类似组的方法类似.char c10;c0=I; c1= ;c2=a; c3=m;c4= ; c5=h;

    26、 c6=a; c7=p; c8=p; c9=y;Iam happyc0c1c2c3c4c5c6c7c8c9.char c10=I, ,a,m, ,h,a,p,p,y; char c10=c, ,p,r,o,g,r,a,m;Iam happyc0c1c2c3c4c5c6c7c8c9cpro gram 0c0c1c2c3c4c5c6c7c8c9.char diamond55= , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,* ;.例例5.6 输出一个已知的字符串。输出一个已知的字符串。解题思路:解题思路:u定义一个字符数组,并用定义一个字符数组,并用“初始化列初始化列表表

    27、”对其赋以初值对其赋以初值u用循环逐个输出此字符数组中的字符用循环逐个输出此字符数组中的字符.#include int main() char c15=I, ,a,m, ,a, ,s,t,u,d,e,n,t,.; int i; for(i=0;i15;i+) printf(%c,ci); printf(n); return 0; .例例5.7 输出一个菱形图。输出一个菱形图。解题思路:解题思路:u定义一个字符型的二维数组,用定义一个字符型的二维数组,用“初初始化列表始化列表”进行初始化进行初始化u用嵌套的用嵌套的for循环输出字符数组中的循环输出字符数组中的所有元素。所有元素。.#includ

    28、e int main() char diamond5= , ,*, ,*, ,*,*, , , ,*, ,*, ,*, , ,*; int i,j; for (i=0;i5;i+) for (j=0;j5;j+) printf(%c,diamondij); printf(n); return 0;.在在C语言中,是将字符串作为语言中,是将字符串作为字符数组字符数组来处理的来处理的关心的是字符串的关心的是字符串的有效长度有效长度而不是字符而不是字符数组的长度数组的长度为了测定字符串的实际长度,为了测定字符串的实际长度,C语言规语言规定了字符串结束标志定了字符串结束标志0. 0代表代表ASCII码

    29、为码为0的字符的字符从从ASCII码表可以查到,码表可以查到,ASCII码为码为0的字符不是一个可以显示的字符,而是的字符不是一个可以显示的字符,而是一个一个“空操作符空操作符”,即它什么也不做,即它什么也不做用它作为字符串结束标志不会产生附加用它作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨的操作或增加有效字符,只起一个供辨别的标志别的标志. char c=”I am happy”;可写成可写成char c=”I am happy”;相当于相当于char c11=”I am happy”;.char c10=”China”;可写成可写成char c10=”China”;从从

    30、c5开始,元素值均为开始,元素值均为0只显示只显示printf(”%s”,c);China 00000.字符数组的输入输出可以有两种方法字符数组的输入输出可以有两种方法:u 逐个字符输入输出逐个字符输入输出(%c)u 整个字符串一次输入输出整个字符串一次输入输出(%s)输出的字符中不包括结束符输出的字符中不包括结束符0用用%s输出字符串时,输出字符串时,printf函数中的函数中的输出项是字符数组名,不是数组元素名输出项是字符数组名,不是数组元素名.如果一个字符数组中包含如果一个字符数组中包含多个多个0,则,则遇第一个遇第一个0时输出就结束时输出就结束可以用可以用scanf函数输入一个字符串函

    31、数输入一个字符串scanf函数中的输入项函数中的输入项c是已定义的字是已定义的字符数组名,输入的字符串应符数组名,输入的字符串应短于短于已定义已定义的字符数组的长度的字符数组的长度.char c6;scanf(”%s”,c); China 系统自动在系统自动在China后面加一个后面加一个0.char str15,str25,str35;scanf(”%s%s%s”,str1,str2,str3);How are you? How 0str1are 0str2you?0str3.在在C函数库中提供了一些用来专门处理字函数库中提供了一些用来专门处理字符串的函数,使用方便符串的函数,使用方便.1.

    32、puts函数函数-输出字符串的函数输出字符串的函数 其一般形式为其一般形式为: puts (字符数组字符数组) 作用是将一个字符串输出到终端作用是将一个字符串输出到终端char str20=”China”;puts(str); 输出输出China.2. gets函数函数-输入字符串的函数输入字符串的函数 其一般形式为其一般形式为: gets(字符数组字符数组) 作用是输入一个字符串到字符数组作用是输入一个字符串到字符数组char str20;gets(str); Computer .3. strcat函数函数-字符串连接函数字符串连接函数 其一般形式为其一般形式为: strcat(字符数组字符

    33、数组1,字符数组,字符数组2) 其作用是把两个字符串连接起来,把字符其作用是把两个字符串连接起来,把字符串串2接到字符串接到字符串1的后面,结果放在字符的后面,结果放在字符数组数组1中中使用字符串函数时使用字符串函数时,在程序开头用在程序开头用#include .3. strcat函数函数-字符串连接函数字符串连接函数 char str130=”People”; char str2=”China”; printf(”%s”, strcat(str1,str2); 输出:输出:PeopleChina要足够大要足够大.4. strcpy和和strncpy函数函数-字符串复制字符串复制 strcpy

    34、一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2) 作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2);China 00000str1.4. strcpy和和strncpy函数函数-字符串复制字符串复制 strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2) 作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2);China 00000str

    35、1要足够大要足够大.4. strcpy和和strncpy函数函数-字符串复制字符串复制 strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2) 作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2);数组名形式数组名形式.4. strcpy和和strncpy函数函数-字符串复制字符串复制 strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2) 作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,

    36、str2=”China”;strcpy(str1,str2);数组名数组名或或字符串常量字符串常量.4. strcpy和和strncpy函数函数-字符串复制字符串复制 strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2) 作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2); 相当于相当于strcpy(str1,”China”);.4. strcpy和和strncpy函数函数-字符串复制字符串复制 char str110,str2=”China”; str1=”

    37、China”; 错误错误 str1=str2; 错误错误.4. strcpy和和strncpy函数函数-字符串复制字符串复制 可以用可以用strncpy函数将字符串函数将字符串2中前面中前面n个字符复制到字符数组个字符复制到字符数组1中去中去 strncpy(str1,str2,2);u作用是将作用是将str2中最前面中最前面2个字符复制到个字符复制到str1中,取代中,取代str1中原有的最前面中原有的最前面2个字符个字符u复制的字符个数复制的字符个数n不应多于不应多于str1中原有的字符中原有的字符.5. strcmp函数函数-字符串比较函数字符串比较函数 其一般形式为其一般形式为 str

    38、cmp(字符串字符串1,字符串,字符串2) 作用是比较字符串作用是比较字符串1和字符串和字符串2 strcmp(str1,str2); strcmp(”China”,”Korea”); strcmp(str1,”Beijing”);.5. strcmp函数函数-字符串比较函数字符串比较函数 字符串比较的规则是:将两个字符串自左字符串比较的规则是:将两个字符串自左至右逐个字符相比,直到出现不同的字符至右逐个字符相比,直到出现不同的字符或遇到或遇到0为止为止 如全部字符相同,认为两个字符串相等如全部字符相同,认为两个字符串相等 若出现不相同的字符,则以第一对不相同若出现不相同的字符,则以第一对不相

    39、同的字符的比较结果为准的字符的比较结果为准.5. strcmp函数函数-字符串比较函数字符串比较函数 ”A”A” ”computer”compare” ”these”that” ”1A”$20” ”CHINA”CANADA” ”DOG”TSINGHUA”.5. strcmp函数函数-字符串比较函数字符串比较函数 比较的结果由函数值带回比较的结果由函数值带回u如果字符串如果字符串1=字符串字符串2,则函数值为,则函数值为0u如果字符串如果字符串1字符串字符串2,则函数值为一个,则函数值为一个正整数正整数u如果字符串如果字符串1str2) printf(”yes”); 错误错误if(strcmp(

    40、str1,str2)0) printf(”yes”); 正确正确.5. strlen函数函数-测字符串长度的函数测字符串长度的函数 其一般形式为其一般形式为: strlen (字符数组字符数组) 它是测试字符串长度的函数它是测试字符串长度的函数 函数的值为字符串中的实际长度函数的值为字符串中的实际长度.5. strlen函数函数-测字符串长度的函数测字符串长度的函数 char str10=”China”; printf(”%d”,strlen(str); 输出结果是输出结果是5 也可以直接测试字符串常量的长度也可以直接测试字符串常量的长度 strlen(”China”);.7. strlwr函

    41、数函数-转换为小写的函数转换为小写的函数 其一般形式为其一般形式为 strlwr (字符串字符串) 函数的作用是将字符串中大写字母换成函数的作用是将字符串中大写字母换成小写字母小写字母.8. strupr函数函数-转换为大写的函数转换为大写的函数 其一般形式为其一般形式为 strupr (字符串字符串) 函数的作用是将字符串中小写字母换成函数的作用是将字符串中小写字母换成大写字母大写字母. 例例5.8 输入一行字符,统计其中有多少输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。个单词,单词之间用空格分隔开。 解题思路:问题的关键是怎样确定解题思路:问题的关键是怎样确定“出出现一个新单

    42、词了现一个新单词了”u 从第从第1个字符开始逐个字符进行检查,判断个字符开始逐个字符进行检查,判断此字符是否是新单词的开头,如果是,就此字符是否是新单词的开头,如果是,就使变量使变量num的值加的值加1,最后得到的,最后得到的num的的值就是单词总数值就是单词总数.u判断是否出现新单词,可以由是否有空格出判断是否出现新单词,可以由是否有空格出现来决定现来决定(连续的若干个空格作为出现一次连续的若干个空格作为出现一次空格;一行开头的空格不统计在内空格;一行开头的空格不统计在内)u如果测出某一个字符为非空格,而它的前面如果测出某一个字符为非空格,而它的前面的字符是空格,则表示的字符是空格,则表示“

    43、新的单词开始了新的单词开始了”,此时使,此时使num累加累加1u如果当前字符为非空格而其前面的字符也是如果当前字符为非空格而其前面的字符也是非空格,则非空格,则num不应再累加不应再累加1.u用变量用变量word作为判别当前是否开始了一个作为判别当前是否开始了一个新单词的标志,若新单词的标志,若word=0表示未出现新表示未出现新单词,如出现了新单词,就把单词,如出现了新单词,就把word置成置成1u前面一个字符是否空格可以从前面一个字符是否空格可以从word的值看的值看出来,若出来,若word等于等于0,则表示前一个字符,则表示前一个字符是空格;如果是空格;如果word等于等于1,意味着前一

    44、个,意味着前一个字符为非空格字符为非空格.Yc=空格word=0Nword=0Yword=1num+Nif(c= ) word=0; else if(word=0) word=1; num+; .当前字符当前字符I Ia am ma ab bo oy y. .是否空格是否空格否否 是是 否否 否否 是是 否否 是是 否否 否否 否否 否否wordword原值原值0 01 10 01 11 10 01 10 01 11 11 1新单词开始否新单词开始否 是是 否否 是是 否否 否否 是是 否否 是是 否否 否否 否否wordword新值新值1 10 01 11 10 01 10 01 11 11

    45、 11 1numnum值值1 11 12 22 22 23 33 34 44 44 44 4. char string81,c; int i,num=0,word=0; gets(string); /scanf(“%s”,string); for (i=0;(c=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(“%d wordsn”,num); 一定要设初始值一定要设初始值. char string81,c; int i,num=0,word=0; gets(string); for (i=0;(c=st

    46、ringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(“%d wordsn”,num); 相当于相当于c=stringi;c!=0.例例5.9 有有3个字符串个字符串,要求找出其中最大者。要求找出其中最大者。解题思路:设一个二维的字符数组解题思路:设一个二维的字符数组str,大大小为小为310。每一行存放一个字符串。每一行存放一个字符串 char str310;.for (i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,s

    47、tring)0) strcpy(string,str2);.#include#includeint main ( )char str310; char string10; int i; for (i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)0) strcpy(string,str2); printf(nthe largest:n%sn,string); return 0;.【例例4-8】输入一串字符,统计各字母出现的次输入一串字符,统计各字母出现的次数(大小写字母不区分),并对出现的

    48、字母显示数(大小写字母不区分),并对出现的字母显示其出现的个数。其出现的个数。统计统计26个字母出现的个数,必须定义一个具有个字母出现的个数,必须定义一个具有26个元素的数组,每个元素的下标表示对应的个元素的数组,每个元素的下标表示对应的字母,元素的值表示对应的字母出现的次数;从字母,元素的值表示对应的字母出现的次数;从输入的字符串中逐一取出字符,转换成大写字符输入的字符串中逐一取出字符,转换成大写字符(使得大小写不区分),进行判断;用(使得大小写不区分),进行判断;用gets()得到字符串,用得到字符串,用strlen()统计字符串中字符的个统计字符串中字符的个数。数。 .#include

    49、stdio.h#include string.h#include ctype.hvoid main() char str80,ch;int a26=0,i,j; /*数组数组a用于存放用于存放26个字母出现的次数,下标则对应个字母出现的次数,下标则对应26个个字母的顺序字母的顺序*/printf(Please input the string:n);gets(str); .for(i=0;i=A&ch=Z) /*将输入的字符逐个测试,如果是字母则累加该字母出现将输入的字符逐个测试,如果是字母则累加该字母出现的次数的次数*/ j=ch-65; /*变量变量j用来计算字母的顺序用来计算字母的顺序位,如字母位,如字母a的顺序位为的顺序位为0 */aj=aj+1;./*打印字母出现的次数,打印字母出现的次数,j+64表示将字母的顺序表示将字母的顺序位加上位加上64,转换为字符的,转换为字符的ASCII码值码值*/for(j=0;j0) printf(%c=%d ,j+65,aj); printf(n);.

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

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


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


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

    163文库