1、C语言程序设计第6章利用数组处理批量数据数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University2主要内容主要内容q引言引言q一维数组的定义和引用一维数组的定义和引用q二维数组的定义和引用二维数组的定义和引用q字符数组与字符串字符数组与字符串数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University3引引 言言q基本数据类型基本数据类型v整型整型v实型实型v字符型字符型q构造数据类型构造数据类型(用户自定义数据类型用户自定义数据类型)v数组数组v结构体结构体v共用体共用体数 组C C语言程序设
2、计语言程序设计Soochow UniversitySoochow University4引引 言言q数组数组v数组是有序数据的集合数组是有序数据的集合v特点特点q所有数据元素所有数据元素类型类型相同相同q数据元素类型可以是基本数据类型和构造数据类型数据元素类型可以是基本数据类型和构造数据类型q由数组名和下标确定具体的数据元素由数组名和下标确定具体的数据元素数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University5一维数组的定义一维数组的定义q一维数组的定义一维数组的定义v格式格式:类型类型 数组名数组名数组长度数组长度;q长度长度只能为常量、
3、常量表达式只能为常量、常量表达式q类型类型数组中元素的类型数组中元素的类型q数组名数组名遵循标识符命名规则,表示数组中元素的起始位置遵循标识符命名规则,表示数组中元素的起始位置v例如:例如:int a6;q分配了六个单元,每个单分配了六个单元,每个单元存放一个元存放一个int(即(即4个个Byte),),而且各单元而且各单元连续连续!q注意:注意:v c不允许对数组的大小作动态定义。不允许对数组的大小作动态定义。350 x78240 x78280 x78340 x783846175781000 x782C0 x7830aa0a1a2a3a4a5数 组q举例:举例:int a4+6;合法合法不合
4、法不合法int n=10;int an;#define N 10float arryN;合法合法结论:定义数组时,数组长度必须是常量或者常量表达式,不能为变量。C C语言程序设计语言程序设计6Soochow UniversitySoochow University数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University7一维数组的使用一维数组的使用q一维数组的使用一维数组的使用v格式:格式:名称名称下标下标;v说明:说明:1 1)下标范围:)下标范围:0长度长度-12 2)越界问题:越界问题:C中不检查越界,但越界写数据可能造中不检查越界,但
5、越界写数据可能造成系统崩溃成系统崩溃3 3)数组不能整体引用,只能引用其中的元素)数组不能整体引用,只能引用其中的元素q例如:例如:int a3;a2=19;4)下标可以是常量、变量、表达式或函数)下标可以是常量、变量、表达式或函数数 组q举例举例:int a 10;a0=a5+a7-a2*3合法合法C C语言程序设计语言程序设计8Soochow UniversitySoochow Universityint n=5;int a10;an=20;int n=5;int a5;an=20;不正确不正确注意:(1)使用数组时,程序员必须自己检查数组越界问题。(2)使用数组时,数组下标可以是常量,变
6、量,表达式,甚至是函数。合法合法数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University9一维数组的初始化一维数组的初始化q部分初始化:部分初始化:v例如:例如:int a20=3,2,5,6,9;其余元素为其余元素为0 0q全部初始化:全部初始化:数组长度可以省略数组长度可以省略v例如:例如:int a3=3,4,6;int b=23,45,67,89;q对数组全部元素初始化为对数组全部元素初始化为0方式方式v例如:例如:int a5=0,0,0,0,0;或者:或者:int a5=0;不能不能:int a5=0*10;q说明:如果不给数组设
7、置初值,则为随机数说明:如果不给数组设置初值,则为随机数数 组q在定义数组的同时,给各数组元素赋值在定义数组的同时,给各数组元素赋值qint a10=0,1,2,3,4,5,6,7,8,9;qint a10=0,1,2,3,4;相当于相当于 int a10=0,1,2,3,4,0,0,0,0,0;qint a10=0,0,0,0,0,0,0,0,0,0;相当于相当于 int a10=0;qint a5=1,2,3,4,5;可写为可写为 int a=1,2,3,4,5;C C语言程序设计语言程序设计10Soochow UniversitySoochow University数 组C C语言程序设
8、计语言程序设计Soochow UniversitySoochow University11一维数组程序举例一维数组程序举例q用数组来处理求用数组来处理求fibonacci数列问题数列问题q冒泡排序冒泡排序q选择排序选择排序q插入排序插入排序q统计数字序列中统计数字序列中0-9中各数值出现的次数中各数值出现的次数q任意从键盘上输入一个正整数(最大为任意从键盘上输入一个正整数(最大为6553565535),),请将它逆序输出请将它逆序输出数 组一维数组程序举例一维数组程序举例 例例6.2 用数组处理求用数组处理求Fibonacci数列问题数列问题q解题思路:解题思路:v例例5.8中用简单变量处理的
9、,中用简单变量处理的,缺点缺点不能在内存不能在内存中保存这些数。假如想直接输出数列中第中保存这些数。假如想直接输出数列中第25个个数,是很困难的。数,是很困难的。v如果用数组处理,每一个数组元素代表数列中如果用数组处理,每一个数组元素代表数列中的一个数,依次求出各数并存放在相应的数组的一个数,依次求出各数并存放在相应的数组元素中元素中C C语言程序设计语言程序设计12Soochow UniversitySoochow University数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University13例题例题(1)q 用数组来处理求用数组来处理求
10、fibonacci数列问题。数列问题。#include void main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i+1)%5=0)printf(n);printf(%12d,fi);数 组q 例例6.3 有有6个地区的面积,要求对它们按由小到个地区的面积,要求对它们按由小到大的顺序排列。大的顺序排列。v解题思路:解题思路:q排序的规律有两种:一种是排序的规律有两种:一种是“升序升序”,从小到大;从小到大;另一种是另一种是“降序降序”,从大到小,从大到小q把题目抽象为:把题目抽象为:“对对n个数按升序排
11、序个数按升序排序”q常用的排序算法常用的排序算法v起泡排序起泡排序(冒泡排序冒泡排序)v选择排序选择排序v插入排序插入排序一维数组程序举例一维数组程序举例C C语言程序设计语言程序设计14Soochow UniversitySoochow University数 组985420895420859420854920854290854209大数沉淀,小数起泡大数沉淀,小数起泡a0a1a2a3a4a5for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;起泡排序起泡排序C C语言程序设计语言程序设计15Soochow UniversitySoochow University数 组854
12、209584209548209542809542089a0a1a2a3a4a5for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;起泡排序起泡排序C C语言程序设计语言程序设计16Soochow UniversitySoochow University数 组542089452089425089420589a0a1a2a3a4a5for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;起泡排序起泡排序C C语言程序设计语言程序设计17Soochow UniversitySoochow University数 组420589240589204589a0a1a2a3a4a
13、5for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;起泡排序起泡排序C C语言程序设计语言程序设计18Soochow UniversitySoochow University数 组204589024589a0a1a2a3a4a5for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;起泡排序起泡排序C C语言程序设计语言程序设计19Soochow UniversitySoochow University数 组for(i=0;iai+1)for(i=0;iai+1)for(i=0;iai+1)for(i=0;iai+1)for(j=0;j5;j+)结论结论:如果有如
14、果有n n个数,则要进行个数,则要进行n-1n-1趟比较。在第趟比较。在第1 1趟比趟比较中要进行较中要进行n-1n-1次两两比次两两比较,在第较,在第j j趟比较中要进趟比较中要进行行n-jn-j次两两比较。次两两比较。C C语言程序设计语言程序设计20Soochow UniversitySoochow University数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University21程序流程图如下:程序流程图如下:冒泡排序冒泡排序数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University22
15、冒泡排序源程序冒泡排序源程序#include#define N 10void main()int arrayN;int i,j,t;printf(Input 10 numbers:n);for(i=0;iN;i+)scanf(%d,&arrayi);printf(n);for(j=0;jN;j+)for(i=0;iarrayi+1)t=arrayi;arrayi=arrayi+1;arrayi+1=arrayi;printf(The sorted numbers:n);for(i=0;iN;i+)printf(%d ,arrayi);if(i+1)%5=0)printf(n);数 组98542
16、0a0a1a2a3a4a5index=0;for(i=1;i6;i+)if(aindexai)index=imax=aindex;aindex=a5;a5=max;选择排序选择排序985420985420985420985420085429C C语言程序设计语言程序设计23Soochow UniversitySoochow University数 组085429a0a1a2a3a4a5max=a0;index=0;for(i=1;i5;i+)if(maxai)max=ai;index=iaindex=a4;a4=max;选择排序选择排序085429085429085429025489index
17、=0;for(i=1;i5;i+)if(aindexai)index=imax=aindex;aindex=a4;a4=max;C C语言程序设计语言程序设计24Soochow UniversitySoochow University数 组025489a0a1a2a3a4a5选择排序选择排序025489025489024589index=0;for(i=1;i4;i+)if(aindexai)index=imax=aindex;aindex=a3;a3=max;C C语言程序设计语言程序设计25Soochow UniversitySoochow University数 组024589a0a1a
18、2a3a4a5选择排序选择排序024589024589index=0;for(i=1;i3;i+)if(aindexai)index=imax=aindex;aindex=a2;a2=max;C C语言程序设计语言程序设计26Soochow UniversitySoochow University数 组024589a0a1a2a3a4a5选择排序选择排序024589结论结论:如果有如果有n n个数,则要进行个数,则要进行n-1n-1趟比较。在第趟比较。在第1 1趟比趟比较中要进行较中要进行n-1n-1次两两比次两两比较,在第较,在第j j趟比较中要进趟比较中要进行行n-jn-j次两两比较。次两
19、两比较。index=0;for(i=1;i2;i+)if(aindexai)index=imax=aindex;aindex=a1;a1=max;C C语言程序设计语言程序设计27Soochow UniversitySoochow University数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University28选择排序选择排序q原理原理v每次循环选择没有排序的元素中的最小元素置每次循环选择没有排序的元素中的最小元素置于元素序列的开始于元素序列的开始vN-S图图输入数组输入数组aindex=kfor i=k+1 to n-1ai aindexi
20、ndex=iaindexakYNfor k=0 to n-2输出数组输出数组a数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University29选择排序程序选择排序程序void main()int i,index,k,n,temp,a10;for(i=0;i10;i+)scanf(“%d”,&ai);for(k=0;k10;k+)index=k;for(i=k+1;i10;i+)if(ai aindex)index=i;temp=aindex;aindex=ak;ak=temp;for(i=0;i tempai+1=aiYNfor k=2 to n
21、-1输出数组输出数组a排序排序a0,a1ai+1=tempbreak;i0a0=tempYN数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University32一维数组应用举例一维数组应用举例q 统计数字序列中统计数字序列中0-9中各数值出现的次数中各数值出现的次数v 数字序列保存于一个整型数组中数字序列保存于一个整型数组中q 任意从键盘上输入一个正整数(最大为任意从键盘上输入一个正整数(最大为6553565535),),请将它逆序输出请将它逆序输出v 如:输入:如:输入:64934;64934;则输出:则输出:4394643946v 对每一个数进行
22、如下处理对每一个数进行如下处理q 提取个位数字:提取个位数字:v 让数字序列对让数字序列对10求余求余q 控制循环控制循环1.每次循环让整数减去个位数,并除以每次循环让整数减去个位数,并除以102.当当(1)结果的个位数为结果的个位数为0时,表示整数数字检测完毕。时,表示整数数字检测完毕。数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University33二维数组二维数组q多维数组的空间想象多维数组的空间想象v 二维数组:二维数组:一个表格或一个平面矩阵一个表格或一个平面矩阵v 一维数组:一维数组:一列长表或一个向量一列长表或一个向量v 多维数组:多
23、维数组:多维空间的一个数据列阵多维空间的一个数据列阵v 三维数组:三维数组:三维空间的一个方阵三维空间的一个方阵数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University34二维数组的定义二维数组的定义q格式格式v 名称名称长度长度1长度长度2;v说明:说明:1 1)长度)长度1和长度和长度2常量表达式,其中长度常量表达式,其中长度1 1表示行数,长度表示行数,长度2 2表示列数表示列数2 2)内存中二维数组的元素按行存放)内存中二维数组的元素按行存放数 组C C语言程序设计语言程序设计Soochow UniversitySoochow Uni
24、versity35b b0000b b0101b b0202b b1010b b1111b b1212b b2020b b2121b b22223003000 0H H3003004 4H H3003008 8H H300300C CH H3010H3010H3014H3014H3018H3018H301CH301CH30302020H H例如:例如:整型数组整型数组 b33=1,2,3,4,5,6,7,8,9;123456789数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University36问题:有了二维数组的基础,那么多维问题:有了二维数组的
25、基础,那么多维数组如何定义呢?数组如何定义呢?定义三维数组定义三维数组:float a234;float a234;注意:注意:多维数组元素在内存中的排列顺序:多维数组元素在内存中的排列顺序:第一维的下标变化最慢,最右边的下标第一维的下标变化最慢,最右边的下标变化最快。变化最快。二维数组的定义二维数组的定义数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University37二维数组的使用二维数组的使用 格式:格式:名称名称下标下标1下标下标2下标范围下标范围0下标下标1-1;0下标下标2-1下标可以为常量、变量、表达式或函数下标可以为常量、变量、表达
26、式或函数数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University38二维数组的说明二维数组的说明q重要的理解重要的理解v严格区分在定义数组时用的严格区分在定义数组时用的a34和引用元素和引用元素时的时的a34的区别。前者的区别。前者a34用来定义数组用来定义数组的维数和各维的大小,后者的维数和各维的大小,后者a34中的中的3和和4是是下标值,下标值,a34a34代表某一个元素。代表某一个元素。q记住:记住:v(1)数组下标总是从数组下标总是从0开始!开始!v(2)一维数组的最大下标总是数组长度减一维数组的最大下标总是数组长度减1!v(3)二维
27、数组或多维数组的最大下标总是其维二维数组或多维数组的最大下标总是其维数减数减1和各维大小减和各维大小减1。数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University39二维数组的初始化二维数组的初始化 1、按行初始化:、按行初始化:例如:例如:int a32=2,3,2,4;2、整体初始化:、整体初始化:例如:例如:int a23=2,3,4,1,8,9;3、全部元素初始化:、全部元素初始化:行可以省略行可以省略 例如:例如:int a3=2,3,4,5,6,7;数 组int a34=1,2,3,4,5,6,7,8,9,10,11,12;int
28、 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;C C语言程序设计语言程序设计40Soochow UniversitySoochow University数 组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;合法合法C C语言程序设计语言程序设计41Soochow
29、UniversitySoochow University数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University42二维数组与一维数组的关系二维数组与一维数组的关系 两维数组和一维数组的关系:两维数组和一维数组的关系:例 int a34;a00 a01 a02 a03a10 a11 a12 a13a20 a21 a22 a23每个元素ai由包含4个元素的一维数组组成二维数组a是由3个元素组成014523a01a02a03a10a11a00a13a20a21a22a23a1267101189a0a1a2数 组C C语言程序设计语言程序设计Soo
30、chow UniversitySoochow University43二维数组程序举例二维数组程序举例(1)(1)q将一个二维数组行和列元素互换,存到另一个二将一个二维数组行和列元素互换,存到另一个二维数组中。维数组中。v原理:原理:bji=aij#include void 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);printf(array b:n);for(i=0;i=2,i+)for(j=0;j
31、=1;j+)printf(%5d,bij);printf(n);数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University44二维数组程序举例二维数组程序举例(2)(2)q问题问题v有一个有一个34的矩阵,要求编程序求出其中值最的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。大的那个元素的值,以及其所在的行号和列号。vN-S流程图流程图数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University45例例(2)源程序源程序#include void main()int i,j
32、,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+)for(j=0;j max)max=aij;row=i;colum=j;/*if end*/printf(“max=%d,row=%d,colum=%dn”,max,row,colum);数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University46二维数组程序举例二维数组程序举例(2)q编程打印下列形式的杨辉三角编程打印下列形式的杨辉三角(10行行)1 11121133114641 1
33、510 10 5116152015 61nij=ni-1j-1+ni-1j数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University47字符数组与字符串字符数组与字符串q字符数组字符数组v存放字符数据的数组,字符数组中的一个元素存放一个存放字符数据的数组,字符数组中的一个元素存放一个字符。字符。q字符串字符串v字符串:双引号括起的多个字符序列,例如:字符串:双引号括起的多个字符序列,例如:“abc”,“1”,“abc123”v字符串尾:系统自动添加字符串尾:系统自动添加0 /ASCII为零的字符为零的字符v字符串的含义:字符串的起始位置字符串的
34、含义:字符串的起始位置v字符串的存储:字符串的存储:利用字符数组利用字符数组qchar s10=“Hello”;qchar s=”Hello”;/数组的长度为数组的长度为6qchar s10=2,3,4,5,0;/字符形式的串字符形式的串qchar s10=2,3,4,5;/字符形式,不是字符串字符形式,不是字符串数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University48字符串的输入字符串的输入/输出输出q利用利用scanf/printf进行:进行:char str20=“Hello world”;scanf(“%s”,str);/str数
35、组名,表示起始位置,代表串的起始位置数组名,表示起始位置,代表串的起始位置printf(“%s”,str);/输出从输出从str开始的串开始的串v说明:说明:(1)scanf中不需要求地址运算,直接用数组名;中不需要求地址运算,直接用数组名;(2)printf中给出数组名,输出遇到中给出数组名,输出遇到0结束结束;(3)scanf输入串,以空格和回车键和输入串,以空格和回车键和Tab键进行分割键进行分割q例如例如char str13;scanf(%S,Str);如果输入以下如果输入以下12个字符个字符 How are you?How0数 组C C语言程序设计语言程序设计Soochow Univ
36、ersitySoochow University49字符串的输入字符串的输入/输出输出q利用利用puts/gets进行:进行:puts(数组名数组名);输出输出字符字符串串,并将,并将0转换成换转换成换行输出。行输出。gets(数组名数组名);输入输入字符字符串串;只能以回车键作只能以回车键作为分割符为分割符v说明:说明:q一般情况下,字符串的输入采用一般情况下,字符串的输入采用gets函数函数q使用这两个函数时,需要使用这两个函数时,需要#include q用用puts函数输出的字符串中可以包含转义字符函数输出的字符串中可以包含转义字符数 组C C语言程序设计语言程序设计Soochow Un
37、iversitySoochow University50例如:例如:char str=ChinanBeijing;puts(str);输出结果:输出结果:ChinaBeijing 在输出时,将字符串结束标志0转换成n,即输出完字符串后换行。字符串的输入字符串的输入/输出输出数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University51字符串数组字符串数组:二维字符数组二维字符数组二维字符数组初始化二维字符数组初始化 例 char fruit7=“Apple”,”Orange”,”Grape”,”Pear”,”Peach”;fruit0fruit
38、1fruit2fruit3fruit4Apple00Orange0Grape00Pear000Peach00数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University52字符串相关的系统函数字符串相关的系统函数(string.h)例如:例如:char str130=“Peoples Republic of ”;char str2=“China”;printf(“%s”,strcat(str1,str2);u字符串连接函数字符串连接函数strcat格式:格式:strcat(字符数组字符数组1,字符数组字符数组2)功能:把字符数组功能:把字符数组2
39、连到字符数组连到字符数组1后面后面返值:返回字符数组返值:返回字符数组1的首地址的首地址说明:说明:字符数组字符数组1必须足够大必须足够大 连接前连接前,两串均以两串均以0结束结束;连接后连接后,串串1的的0取消取消,新串最后加新串最后加0数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University53u字符串拷贝函数字符串拷贝函数strcpy格式:格式:strcpy(字符数组字符数组1,字符串字符串2)功能:将字符串功能:将字符串2,拷贝到字符数组,拷贝到字符数组1中去中去返值:返回字符数组返值:返回字符数组1的首地址的首地址说明:说明:字符数
40、组字符数组1必须足够大必须足够大 拷贝时拷贝时0一同拷贝一同拷贝 不能使用赋值语句为一个字符数组赋值不能使用赋值语句为一个字符数组赋值字符串相关的系统函数字符串相关的系统函数(string.h)例如:例如:char str130=“Peoples Republic of ”;char str2=“China”;printf(“%s”,strcpy(str1,str2);数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University54u字符串比较函数字符串比较函数strcmp格式:格式:strcmp(字符串字符串1,字符串字符串2)功能:比较两个字
41、符串功能:比较两个字符串比较规则:对两串从左向右逐个字符比较(比较规则:对两串从左向右逐个字符比较(ASCII码),码),直到遇到不同字符或直到遇到不同字符或0为止为止返值:返回返值:返回int型整数,型整数,a.若字符串若字符串1 字符串字符串2,返回正整数返回正整数 c.若字符串若字符串1=字符串字符串2,返回零返回零说明:字符串比较不能用说明:字符串比较不能用“=”,必须用必须用strcmp字符串相关的系统函数字符串相关的系统函数(string.h)数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University55u字符串长度函数字符串长度函
42、数strlen格式:格式:strlen(字符数组字符数组)功能:计算字符串长度功能:计算字符串长度返值:返回字符串实际长度,不包括返值:返回字符串实际长度,不包括0在内在内例 对于以下字符串,strlen(s)的值为:(1)char s10=A,0,B,C,0,D;(2)char s=“tv0willn”;(3)char s=“x69072n”;字符串相关的系统函数字符串相关的系统函数(string.h)数 组strlwr函数函数-转换为小写的函数转换为小写的函数q其一般形式为其一般形式为 strlwr(字符串字符串)q函数的作用是将字符串中大写字母换成小写字函数的作用是将字符串中大写字母换成
43、小写字母母字符串相关的系统函数字符串相关的系统函数(string.h)C C语言程序设计语言程序设计56Soochow UniversitySoochow University数 组strupr函数函数-转换为大写的函数转换为大写的函数q 其一般形式为其一般形式为 strupr(字符串字符串)q函数的作用是将字符串中小写字母换成大写字函数的作用是将字符串中小写字母换成大写字母母字符串相关的系统函数字符串相关的系统函数(string.h)C C语言程序设计语言程序设计57Soochow UniversitySoochow University数 组C C语言程序设计语言程序设计Soochow U
44、niversitySoochow University58字符串的应用举例字符串的应用举例(1)q 问题问题v有有3个字符串个字符串,要求找出其中最大者。要求找出其中最大者。v今设一个二维的字符数组今设一个二维的字符数组str,大小为大小为320,即有即有3行行20列列,每一行可以容纳每一行可以容纳20个字符。下图表示此二维数组的情况。个字符。下图表示此二维数组的情况。解题思路:解题思路:可以把可以把str0、str1、str2看作看作3个一维字符数组个一维字符数组,它们它们各有各有20个元素。可以把它们如同一维数组那样进行处理。可以用个元素。可以把它们如同一维数组那样进行处理。可以用gets
45、函函数分别读入数分别读入3个字符串。经过二次比较个字符串。经过二次比较,就可得到值最大者就可得到值最大者,把它放在一维把它放在一维字符数组字符数组String中。中。数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University59例题例题(1)源程序源程序#include void main()char string20,str320;int i;for(i=0;i0)strcpy(string,str0);else strcpy(string,str1);if(strcmp(str2,string)0)strcpy(string,str2);p
46、rintf(“nthe largest string is n%sn,string);数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University60字符串的应用举例字符串的应用举例(2)q问题问题v输入一行字符,统计其中有多少个单词,单词输入一行字符,统计其中有多少个单词,单词之间用空格分隔开。之间用空格分隔开。数 组C C语言程序设计语言程序设计Soochow UniversitySoochow University61例题例题(2)源程序源程序#include void main()char string81;int i,num=0,word=0;char c;gets(string);for(i=0;(c=stringi)!=0;i+)if(c=)word=0;else if(word=0)word=1;num+;printf(There are%d words in the line.n,num);