《利用数组处理批量数据》由会员分享,可在线阅读,更多相关《利用数组处理批量数据(92页珍藏版)》请在金锄头文库上搜索。
1、第第6章章 利用数组处理批量数据利用数组处理批量数据前几章前几章使用的变量都属于使用的变量都属于基本类型基本类型,例如整型、字符型、浮点型数据,这例如整型、字符型、浮点型数据,这些都是简单的数据类型。些都是简单的数据类型。对于有些数据,只用简单的数据类型对于有些数据,只用简单的数据类型是不够的,是不够的,难以难以反映出数据的反映出数据的特点特点,也难以有效地进行处理。也难以有效地进行处理。如果有如果有1000名学生名学生,每个学生有一每个学生有一个成绩,需要求这个成绩,需要求这1000名学生的平名学生的平均成绩。均成绩。用用s1,s2,s3,s1000表示每个学生表示每个学生的成绩,能体现的成
2、绩,能体现内在联系内在联系。C语言用方括号中的数字表示下标,语言用方括号中的数字表示下标,如用如用s15表示表示数组名数组名数组是一组数组是一组有序数据的集合有序数据的集合。数组中。数组中各数据的排列是有一定规律的,下标各数据的排列是有一定规律的,下标代表数据在数组中的序号代表数据在数组中的序号用一个用一个数组名数组名和和下标下标惟一确定数组中惟一确定数组中的元素的元素数组中的每一个元素都属于数组中的每一个元素都属于同一个数同一个数据类型据类型6.1 怎样定义和引用一维数组怎样定义和引用一维数组6.2 怎样定义和引用二维数组怎样定义和引用二维数组6.3 字符数组字符数组6.1怎样定义和引用一维
3、数组怎样定义和引用一维数组6.1.1 怎样定义一维数组怎样定义一维数组6.1.2 怎样引用一维数组元素怎样引用一维数组元素6.1.3 一维数组的初始化一维数组的初始化6.1.4 一维数组程序举例一维数组程序举例6.1.1怎样定义一维数组怎样定义一维数组一维数组是数组中最简单的一维数组是数组中最简单的它的元素只需要用数组名加一个下它的元素只需要用数组名加一个下标,就能惟一确定标,就能惟一确定要使用数组,必须在程序中先定义要使用数组,必须在程序中先定义数组数组6.1.1怎样定义一维数组怎样定义一维数组定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达
4、式;数组名的命名规则和变量名相同数组名的命名规则和变量名相同如如 int a10;数组名数组名6.1.1怎样定义一维数组怎样定义一维数组定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达式;数组名的命名规则和变量名相同数组名的命名规则和变量名相同如如 int a10;数组数组长度长度6.1.1怎样定义一维数组怎样定义一维数组定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达式;数组名的命名规则和变量名相同数组名的命名规则和变量名相同如如 int a10;10个元素个元素:a0,a1,a2,a9每个元
5、素的数据类型每个元素的数据类型a0 a1 a2 a3a7 a8 a96.1.1怎样定义一维数组怎样定义一维数组定义一维数组的一般形式为:定义一维数组的一般形式为: 类型符类型符 数组名数组名常量表达式常量表达式;int a4+6; 合法合法int n=10; int an;不合法不合法6.1.2 怎样引用一维数组元素怎样引用一维数组元素在定义数组并对其中各元素赋值后,就在定义数组并对其中各元素赋值后,就可以引用数组中的元素可以引用数组中的元素注意:只能引用数组元素而不能一次整注意:只能引用数组元素而不能一次整体调用整个数组全部元素的值体调用整个数组全部元素的值6.1.2 怎样引用一维数组元素怎
6、样引用一维数组元素引用数组元素的表示形式为:引用数组元素的表示形式为: 数组名下标数组名下标如如a0=a5+a7-a2*3 合法合法int n=5,a10;an=20;合法合法6.1.2 怎样引用一维数组元素怎样引用一维数组元素 例例6.1 对对10个数组元素依次赋值为个数组元素依次赋值为0,1, 2,3,4,5,6,7,8,9,要求按逆序输出。,要求按逆序输出。解题思路:解题思路:u定义一个长度为定义一个长度为10的数组,数组定义为整型的数组,数组定义为整型u要赋的值是从要赋的值是从0到到9,可以用循环来赋值,可以用循环来赋值u用循环按下标从大到小输出这用循环按下标从大到小输出这10个元素个
7、元素#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; 先输出先输出a9,最,最后输出后输出a00123456789a0a1a2a3a4a5a6a7a8a96.1.3一维数组的初始化一维数组的初始化在定义数组的同时,
8、给各数组元素赋值在定义数组的同时,给各数组元素赋值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;6.1.4一维数组程序举例一维数组程序举例 例例6.2 用数组处理求用数组处理求Fibonacci数列问题数列问题解题思路:解题思路:u例例5.8中用简单变量处理的,中用简单变量处理的,缺点缺点不能在内存不能在内存中
9、保存这些数。假如想直接输出数列中第中保存这些数。假如想直接输出数列中第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(“%12d”,fi); printf(n); return 0; 例例6.3 有有1
10、0个地区的面积,要求对它们按个地区的面积,要求对它们按由小到大的顺序排列。由小到大的顺序排列。解题思路:解题思路:u排序的规律有两种:一种是排序的规律有两种:一种是“升序升序”,从小到从小到大;另一种是大;另一种是“降序降序”,从大到小,从大到小u把题目抽象为:把题目抽象为:“对对n个数按升序排序个数按升序排序”u采用起泡法排序采用起泡法排序985420895420859420854920854290854209大数沉淀,小数起泡大数沉淀,小数起泡a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 85420958420954820954280954
11、2089a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 542089452089425089420589a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 420589240589204589a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; 204589024589a0a1a2a3a4a5for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t; for(i=0;iai+1) for(i=0;iai+1) for(i=0;iai+1) for(i
12、=0;iai+1) for(j=0;j5;j+)int a10; int i,j,t;printf(input 10 numbers :n);for (i=0;i10;i+) scanf(%d,&ai); printf(n);for(j=0;j9;j+)for(i=0;iai+1) t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers :n);for(i=0;i10;i+) printf(%d ,ai);printf(n);6.2 怎样定义和引用二维数组怎样定义和引用二维数组2456 1847 1243 1600 2346 27573045 2018 17
13、25 2020 2458 14361427 1175 1046 1976 1477 20181分队分队2分队分队3分队分队队员队员1 队员队员2队员队员3 队员队员4队员队员5队员队员6float pay36;6.2.1怎样定义二维数组怎样定义二维数组6.2.2怎样引用二维数组的元素怎样引用二维数组的元素6.2.3二维数组的初始化二维数组的初始化6.2.4二维数组程序举例二维数组程序举例6.2 怎样定义和引用二维数组怎样定义和引用二维数组二维数组定义的一般形式为二维数组定义的一般形式为 类型符类型符 数组名数组名常量表达式常量表达式常量表达式常量表达式; 如:如:float a34,b510;
14、二维数组可被看作是一种特殊的一维数组:二维数组可被看作是一种特殊的一维数组: 它的元素又是一个一维数组它的元素又是一个一维数组例如,把例如,把a看作是一个一维数组,它有看作是一个一维数组,它有3个元素:个元素: a0、a1、a2每个元素又是一个包含每个元素又是一个包含4个元素的一维数组个元素的一维数组6.2.1怎样定义二维数组怎样定义二维数组a00a01a02a03a10a11a12a13a20a21a22a23a0a1a2a00a01a02a03a10a11a12a13a20a21a22a23逻辑存储逻辑存储内存中的存储顺序内存中的存储顺序二维数组元素的表示形式为二维数组元素的表示形式为:
15、数组名下标下标数组名下标下标 b12=a23/2 合法合法for(i=0;im;i+) printf(“%d,%dn”,ai0,a0i);合法合法6.2.2怎样引用二维数组的元素怎样引用二维数组的元素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;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;6.2.3二维数组的初始化二维数组的初始化int a34=1,2,3,4,5,6
16、,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;合法合法6.2.3二维数组的初始化二维数组的初始化 例例6.4 将一个二维数组行和列的元素互换,将一个二维数组行和列的元素互换,存到另一个二维数组中。存到另一个二维数组中。6.2.4二维数组程序举例二维数组程序举例解题思路:解题思路:u可以定义两个数组:数组可以定义两个数组:数组a为为2行行3列,存放指定列,存放指定的的6个数个数u数组数组b为为3行行2列,开始时未赋值列,开始时未赋值u将将a数组中的元素数组中的元素aij存放到存放到b数组
17、中的数组中的bji元素中元素中u用嵌套的用嵌套的for循环完成循环完成6.2.4二维数组程序举例二维数组程序举例#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中某一列元素中某一列元素输出输出a的的各元素各元素a元素值赋给元素值赋给b相应元素相应元素 printf(array b:n); for (i=0;i=
18、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,max; int a34=1,2,3,4,9,8,7,6, -10,10,-5,2; max=a00; for (i=0;i=2;i+
19、) for (j=0;jmax) max=aij; row=i; colum=j; printf(max=%dnrow=%dn colum=%dn,max,row,colum);记记最大值最大值记记列列号号6.3.1怎样定义字符数组怎样定义字符数组6.3.2字符数组的初始化字符数组的初始化6.3.3怎样引用字符数组中的元素怎样引用字符数组中的元素6.3.4字符串和字符串结束标志字符串和字符串结束标志6.3.5 字符数组的输入输出字符数组的输入输出6.3.6善于使用善于使用字符串处理函数字符串处理函数6.3.7字符数组应用举例字符数组应用举例6.3 字符数组字符数组用来存放字符数据的数组是字符数
20、组用来存放字符数据的数组是字符数组字符数组中的一个元素存放一个字符字符数组中的一个元素存放一个字符定义字符数组的方法与定义数值型数定义字符数组的方法与定义数值型数组的方法类似组的方法类似6.3.1怎样定义字符数组怎样定义字符数组char c10;c0=I; c1= ;c2=a; c3=m;c4= ; c5=h; c6=a; c7=p; c8=p; c9=y;6.3.1怎样定义字符数组怎样定义字符数组Iam happyc0c1c2c3c4c5c6c7c8c9char c10=I, ,a,m, ,h,a,p,p,y; char c10=c, ,p,r,o,g,r,a,m;6.3.2字符数组的初始化
21、字符数组的初始化Iam happyc0c1c2c3c4c5c6c7c8c9cpro gram 0c0c1c2c3c4c5c6c7c8c9char diamond55= , ,*, ,*, ,*, *, , , ,*, ,*, ,*, , ,* ;6.3.2字符数组的初始化字符数组的初始化例例6.6 输出一个已知的字符串。输出一个已知的字符串。解题思路:解题思路:u定义一个字符数组,并用定义一个字符数组,并用“初始化列初始化列表表”对其赋以初值对其赋以初值u用循环逐个输出此字符数组中的字符用循环逐个输出此字符数组中的字符6.3.3怎样引用字符数组中的元素怎样引用字符数组中的元素#include
22、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; 6.3.3怎样引用字符数组中的元素怎样引用字符数组中的元素例例6.7 输出一个菱形图。输出一个菱形图。解题思路:解题思路:u定义一个字符型的二维数组,用定义一个字符型的二维数组,用“初初始化列表始化列表”进行初始化进行初始化u用嵌套的用嵌套的for循环输出字符数组中的循环输出字符数组中的所有元素。所有元素。6.3.3怎样引用字符数组中的元素怎样引用字符数组中的元素#includ
23、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语言规语言规定了字符串结束标志定了字符串结束标志06.3.4字符串和字符串结束
24、标志字符串和字符串结束标志 0代表代表ASCII码为码为0的字符的字符从从ASCII码表可以查到,码表可以查到,ASCII码为码为0的字符不是一个可以显示的字符,而是的字符不是一个可以显示的字符,而是一个一个“空操作符空操作符”,即它什么也不做,即它什么也不做用它作为字符串结束标志不会产生附加用它作为字符串结束标志不会产生附加的操作或增加有效字符,只起一个供辨的操作或增加有效字符,只起一个供辨别的标志别的标志6.3.4字符串和字符串结束标志字符串和字符串结束标志 char c=”I am happy”;可写成可写成char c=”I am happy”;相当于相当于char c11=”I am
25、 happy”;6.3.4字符串和字符串结束标志字符串和字符串结束标志char c10=”China”;可写成可写成char c10=”China”;从从c5开始,元素值均为开始,元素值均为0只显示只显示printf(”%s”,c);6.3.4字符串和字符串结束标志字符串和字符串结束标志China 00000字符数组的输入输出可以有两种方法字符数组的输入输出可以有两种方法:u 逐个字符输入输出逐个字符输入输出(%c)u 整个字符串一次输入输出整个字符串一次输入输出(%s)输出的字符中不包括结束符输出的字符中不包括结束符0用用%s输出字符串时,输出字符串时,printf函数中的函数中的输出项是字
26、符数组名,不是数组元素名输出项是字符数组名,不是数组元素名6.3.5 字符数组的输入输出字符数组的输入输出如果一个字符数组中包含如果一个字符数组中包含多个多个0,则,则遇第一个遇第一个0时输出就结束时输出就结束可以用可以用scanf函数输入一个字符串函数输入一个字符串scanf函数中的输入项函数中的输入项c是已定义的字是已定义的字符数组名,输入的字符串应符数组名,输入的字符串应短于短于已定义已定义的字符数组的长度的字符数组的长度6.3.5 字符数组的输入输出字符数组的输入输出char c6;scanf(”%s”,c); China 系统自动在系统自动在China后面加一个后面加一个06.3.5
27、 字符数组的输入输出字符数组的输入输出char str15,str25,str35;scanf(”%s%s%s”,str1,str2,str3);How are you? 6.3.5 字符数组的输入输出字符数组的输入输出How00str1are00str2you?0str3在在C函数库中提供了一些用来专门处理字符函数库中提供了一些用来专门处理字符串的函数,使用方便串的函数,使用方便6.3.6 善于使用善于使用字符串处理函数字符串处理函数1.puts函数函数-输出字符串的函数输出字符串的函数其一般形式为其一般形式为: puts (字符数组字符数组)作用是将一个字符串输出到终端作用是将一个字符串输
28、出到终端char str20=”China”;puts(str); 输出输出China6.3.6 善于使用善于使用字符串处理函数字符串处理函数2. gets函数函数-输入字符串的函数输入字符串的函数其一般形式为其一般形式为: gets(字符数组字符数组)作用是输入一个字符串到字符数组作用是输入一个字符串到字符数组char str20;gets(str); Computer 6.3.6 善于使用善于使用字符串处理函数字符串处理函数3. strcat函数函数-字符串连接函数字符串连接函数其一般形式为其一般形式为: strcat(字符数组字符数组1,字符数组,字符数组2)其作用是把两个字符串连接起来
29、,把字符其作用是把两个字符串连接起来,把字符串串2接到字符串接到字符串1的后面,结果放在字符数的后面,结果放在字符数组组1中中6.3.6 善于使用善于使用字符串处理函数字符串处理函数使用字符串函数时使用字符串函数时,在程序开头用在程序开头用#include 3. strcat函数函数-字符串连接函数字符串连接函数 char str130=”People”; char str2=”China”; printf(”%s”, strcat(str1,str2); 输出:输出:PeopleChina6.3.6 善于使用善于使用字符串处理函数字符串处理函数要足够大要足够大4. strcpy和和strnc
30、py函数函数-字符串复制字符串复制strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2)作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2);6.3.6 善于使用善于使用字符串处理函数字符串处理函数China 00000str14. strcpy和和strncpy函数函数-字符串复制字符串复制strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2)作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str11
31、0,str2=”China”;strcpy(str1,str2);6.3.6 善于使用善于使用字符串处理函数字符串处理函数China 00000str1要足够大要足够大4. strcpy和和strncpy函数函数-字符串复制字符串复制strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2)作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2);6.3.6 善于使用善于使用字符串处理函数字符串处理函数数组名形式数组名形式4. strcpy和和strncpy函数函数-字符
32、串复制字符串复制strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2)作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2=”China”;strcpy(str1,str2);6.3.6 善于使用善于使用字符串处理函数字符串处理函数数组名数组名或或字符串常量字符串常量4. strcpy和和strncpy函数函数-字符串复制字符串复制strcpy一般形式为一般形式为: strcpy(字符数组字符数组1,字符串字符串2)作用是将字符串作用是将字符串2复制到字符数组复制到字符数组1中去中去char str110,str2
33、=”China”;strcpy(str1,str2); 相当于相当于strcpy(str1,”China”);6.3.6 善于使用善于使用字符串处理函数字符串处理函数4. strcpy和和strncpy函数函数-字符串复制字符串复制 char str110,str2=”China”; str1=”China”; 错误错误 str1=str2; 错误错误6.3.6 善于使用善于使用字符串处理函数字符串处理函数4. strcpy和和strncpy函数函数-字符串复制字符串复制可以用可以用strncpy函数将字符串函数将字符串2中前面中前面n个个字符复制到字符数组字符复制到字符数组1中去中去strn
34、cpy(str1,str2,2);u作用是将作用是将str2中最前面中最前面2个字符复制到个字符复制到str1中,取代中,取代str1中原有的最前面中原有的最前面2个字符个字符u复制的字符个数复制的字符个数n不应多于不应多于str1中原有的字符中原有的字符6.3.6 善于使用善于使用字符串处理函数字符串处理函数5. strcmp函数函数-字符串比较函数字符串比较函数其一般形式为其一般形式为 strcmp(字符串字符串1,字符串,字符串2)作用是比较字符串作用是比较字符串1和字符串和字符串2strcmp(str1,str2);strcmp(”China”,”Korea”);strcmp(str1
35、,”Beijing”);6.3.6 善于使用善于使用字符串处理函数字符串处理函数5. strcmp函数函数-字符串比较函数字符串比较函数字符串比较的规则是:将两个字符串自左字符串比较的规则是:将两个字符串自左至右逐个字符相比,直到出现不同的字符至右逐个字符相比,直到出现不同的字符或遇到或遇到0为止为止如全部字符相同,认为两个字符串相等如全部字符相同,认为两个字符串相等若出现不相同的字符,则以第一对不相同若出现不相同的字符,则以第一对不相同的字符的比较结果为准的字符的比较结果为准6.3.6 善于使用善于使用字符串处理函数字符串处理函数5. strcmp函数函数-字符串比较函数字符串比较函数 ”A
36、”A” ”computer”compare” ”these”that” ”1A”$20” ”CHINA”CANADA” ”DOG”TSINGHUA”6.3.6 善于使用善于使用字符串处理函数字符串处理函数5. strcmp函数函数-字符串比较函数字符串比较函数比较的结果由函数值带回比较的结果由函数值带回u如果字符串如果字符串1=字符串字符串2,则函数值为,则函数值为0u如果字符串如果字符串1字符串字符串2,则函数值为一个,则函数值为一个正整数正整数u如果字符串如果字符串1str2) printf(”yes”); 错误错误if(strcmp(str1,str2)0) printf(”yes”);
37、 正确正确6.3.6 善于使用善于使用字符串处理函数字符串处理函数6. strlen函数函数-测字符串长度的函数测字符串长度的函数其一般形式为其一般形式为: strlen (字符数组字符数组)它是测试字符串长度的函数它是测试字符串长度的函数函数的值为字符串中的实际长度函数的值为字符串中的实际长度6.3.6 善于使用善于使用字符串处理函数字符串处理函数6. strlen函数函数-测字符串长度的函数测字符串长度的函数 char str10=”China”; printf(”%d”,strlen(str);输出结果是输出结果是5也可以直接测试字符串常量的长度也可以直接测试字符串常量的长度 strle
38、n(”China”);6.3.6 善于使用善于使用字符串处理函数字符串处理函数7. strlwr函数函数-转换为小写的函数转换为小写的函数其一般形式为其一般形式为 strlwr (字符串字符串)函数的作用是将字符串中大写字母换成函数的作用是将字符串中大写字母换成小写字母小写字母6.3.6 善于使用善于使用字符串处理函数字符串处理函数8. strupr函数函数-转换为大写的函数转换为大写的函数其一般形式为其一般形式为 strupr (字符串字符串)函数的作用是将字符串中小写字母换成函数的作用是将字符串中小写字母换成大写字母大写字母6.3.6 善于使用善于使用字符串处理函数字符串处理函数 例例6.
39、8 输入一行字符,统计其中有多少输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。个单词,单词之间用空格分隔开。解题思路:问题的关键是怎样确定解题思路:问题的关键是怎样确定“出出现一个新单词了现一个新单词了”u从第从第1个字符开始逐个字符进行检查,判断个字符开始逐个字符进行检查,判断此字符是否是新单词的开头,如果是,就此字符是否是新单词的开头,如果是,就使变量使变量num的值加的值加1,最后得到的,最后得到的num的的值就是单词总数值就是单词总数6.3.7字符数组应用举例字符数组应用举例u判断是否出现新单词,可以由是否有空格出判断是否出现新单词,可以由是否有空格出现来决定现来决定(连续
40、的若干个空格作为出现一次连续的若干个空格作为出现一次空格;一行开头的空格不统计在内空格;一行开头的空格不统计在内)u如果测出某一个字符为非空格,而它的前面如果测出某一个字符为非空格,而它的前面的字符是空格,则表示的字符是空格,则表示“新的单词开始了新的单词开始了”,此时使,此时使num累加累加1u如果当前字符为非空格而其前面的字符也是如果当前字符为非空格而其前面的字符也是非空格,则非空格,则num不应再累加不应再累加16.3.7字符数组应用举例字符数组应用举例u用变量用变量word作为判别当前是否开始了一个作为判别当前是否开始了一个新单词的标志,若新单词的标志,若word=0表示未出现新表示未
41、出现新单词,如出现了新单词,就把单词,如出现了新单词,就把word置成置成1u前面一个字符是否空格可以从前面一个字符是否空格可以从word的值看的值看出来,若出来,若word等于等于0,则表示前一个字符,则表示前一个字符是空格;如果是空格;如果word等于等于1,意味着前一个,意味着前一个字符为非空格字符为非空格6.3.7字符数组应用举例字符数组应用举例Yc=空格word=0Nword=0Yword=1num+Nif(c= ) word=0; else if(word=0) word=1; num+; 当前字符当前字符I Ia am ma ab bo oy y. .是否空格是否空格否否 是是
42、否否 否否 是是 否否 是是 否否 否否 否否 否否wordword原原值值0 01 10 01 11 10 01 10 01 11 11 1新新单词单词开始否开始否 是是 否否 是是否否 否否是是 否否 是是否否 否否 否否wordword新新值值1 10 01 11 10 01 10 01 11 11 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); for (i=0;(c=stringi)!=0;i+) if(c= ) word=0; else
43、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=stringi)!=0;i+) if(c= ) word=0; else if(word=0) word=1; num+; printf(“%d wordsn”,num); 相当于相当于c=stringi;c!=0例例6.9 有有3个字符串个字符串,要求找出其中最大者。要求找出其中最大者。解题思路:设一个二维的字符数组解题思路:设一个二维的字
44、符数组str,大小大小为为310。每一行存放一个字符串。每一行存放一个字符串 char str310;for (i=0;i0) strcpy(string,str0); else strcpy(string,str1); if (strcmp(str2,string)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;