配色: 字号:
第6章数组处理批量数据
2022-05-20 | 阅:  转:  |  分享 
  
6第章利用数组处理批量数据为什么需要循环控制解决方法要向计算机输入全班50个学生一门课程的成绩用50个float型简单变量表示学生的成绩烦琐
,如果有1000名学生怎么办呢?没有反映出这些数据间的内在联系,实际上这些数据是同一个班级、同一门课程的成绩,它们具有相同的属性。
(1)数组是一组有序数据的集合。数组中各数据的排列是有一定规律的,下标代表数据在数组中的序号。(2)用数组名和下标即可唯一地确
定数组中的元素。(3)数组中的每一个元素都属于同一个数据类型。数组数组名S15下标s[15]定义一维数组整型数组,即数组中的元素
均为整型数组名为ainta[10];类型说明符数组名[常量表达式]数组包含10个整型元素(1)数组名的命名规则和变量名相同
,遵循标识符命名规则。(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。(3)
常量表达式中可以包括常量和符号常量,不能包含变量。a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
相当于定义了10个简单的整型变量注意数组元素的下标从0开始,用“inta[10];”定义数组,则最大下标值为9,不存在数组元素a
[10]引用一维数组元素数组名[下标]只能引用数组元素而不能一次整体调用整个数组全部元素的值。数组元素与一个简单变量的地位和作用
相似。“下标”可以是整型常量或整型表达式。inta[10];//前面有int,这是定义数组,指定数组包含10个元素t=a[6];
//这里的a[6]表示引用a数组中序号为6的元素定义数组时用到的“数组名[常量表达式]”和引用数组元素时用的“数组名[下标]”形
式相同,但含义不同。注意引用一维数组元素【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,6,7,8,9,要求按逆序输
出。#includeintmain(){ inti,a[10]; for(i=0;i<=9;i++) //
对数组元素a[0]~a[9]赋值 a[i]=i; for(i=9;i>=0;i--) //输出a[9]~a[0]共10个数组元素
printf("%d",a[i]); printf("\n"); return0;}a[0]a[1]a[2]a[3]a[4]a
[5]a[6]a[7]a[8]a[9]0123456789第1个for循环使a[0]~a[9]的值为0~9。第2个for循环按a[
9]~a[0]的顺序输出各元素的值。一维数组的初始化为了使程序简洁,常在定义数组的同时给各数组元素赋值,这称为数组的初始化。(1)
在定义数组时对全部数组元素赋予初值。将数组中各元素的初值顺序放在一对花括号内,数据间用逗号分隔。花括号内的数据就称为“初始化列表
”。(2)可以只给数组中的一部分元素赋值。定义a数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,系统自
动给后5个元素赋初值为0。(3)给数组中全部元素赋初值为0。(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不
指定数组长度。但是,如果数组长度与提供初值的个数不相同,则方括号中的数组长度不能省略。inta[10]={0,1,2,3,4,5
,6,7,8,9};inta[10]={0,1,2,3,4};inta[10]={0}; //未赋值的部分元素自动设定为0in
ta[10]={0,0,0,0,0,0,0,0,0,0};或inta[]={1,2,3,4,5};int
a[5]={1,2,3,4,5};或一维数组程序举例【例6.2】用数组来处理求Fibonacci数列问题。#includedio.h>intmain(){ inti; intf[20]={1,1};//对最前面两个元素f[0]和f[1]赋初值1
for(i=2;i<20;i++) f[i]=f[i-2]+f[i-1]; //先后求出f[2]~f[19]的值 for(i=0
;i<20;i++) {if(i%5==0)printf("\n"); //控制每输出5个数后换行printf("%12d
",f[i]); //输出一个数 } printf("\n"); return0;}一维数组程序举例【例6.3】有10个地区的
面积,要求对它们按由小到大的顺序排列。98542算法85420起泡排序法54204420552088809999第一趟第二趟第三趟
第四趟第五趟一维数组程序举例【例6.3】有10个地区的面积,要求对它们按由小到大的顺序排列。#includei
ntmain(){ inta[10]; inti,j,t; printf("input10numbers:\n");
for(i=0;i<10;i++) scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j
++)//进行9次循环,实现9趟比较 for(i=0;i<9-j;i++) //在每一趟中进行9-j次比较 if(a[i]>a[
i+1]) //相邻两个数比较 {t=a[i];a[i]=a[i+1];a[i+1]=t;} printf("thesort
ednumbers:\n"); for(i=0;i<10;i++) printf("%d",a[i]); printf("\
n"); return0;}输入10个数给a[0]~a[9]j由0变到8共执行9次循环进行9-j次比较真假a[i]与a[i+1]
交换输出a[0]~a[9]a[i]>a[i+1]定义和引用二维数组小例子有3个小分队,每队有6名队员,要把这些队员的工资用数组保存
起来以备查。队员1队员2队员3队员4队员5队员6第1分队245618471243160023462757第2分队304520181
725202024581436第3分队142711751046197614772018如果建立一个数组pay,它应当是二维的,第一
维用来表示第几分队,第二维用来表示第几个队员。例如用pay2,3表示2分队第3名队员的工资,它的值是1725。二维数组常称为矩阵(
matrix)。把二维数组写成行(row)和列(column)的排列形式,可以有助于形象化地理解二维数组的逻辑结构。定义二维数组f
loat型二维数组数组名为pay类型说明符数组名[常量表达式][常量表达式]floatpay[3][6];floata[3
][4],b[5][10];//定义a为3×4(3行4列)的数组,b为5×10(5行10列)的数组数组第二维有6个元素数组第一维
有3个元素floata[3,4],b[5,10];//在一对方括号内不能写两个下标二维数组可被看作一种特殊的一维数组:
它的元素又是一个一维数组。例如,floata[3][4];可以把a看作一个一维数组,它有3个元素:a[0],a[1],a[
2],每个元素又是一个包含4个元素的一维数组:a[0]——a[0][0]a[0][1]a[0][2]a[0][3]a[
1]——a[1][0]a[1][1]a[1][2]a[1][3]a[2]——a[2][0]a[2][1]a[2
][2]a[2][3]二维数组的存储C语言中,二维数组中元素排列的顺序是按行存放的。2000200420082012201620
20202420282032203620402044a[0][0]a[0][1]a[0][2]a[0][3]a[1][0]a[1]
[1]a[1][2]a[1][3]a[2][0]a[2][1]a[2][2]a[2][3]floata[3][4]a00 a0
1 a02 a03a10 a11 a12 a13a20 a21 a22 a23第0行元素第1行元素第2行元素注
意用矩阵形式(如3行4列形式)表示二维数组,是逻辑上的概念,能形象地表示出行列关系。而在内存中,各元素是连续存放的,不是二维的,是
线性的。多维数组floata[2,3,4]; //定义三维数组a,它有2页,3行,4列多维数组元素在内存中的排列顺序为:第
1维的下标变化最慢,最右边的下标变化最快。floata[2,3,4];在内存中的排列顺序为:a[0][0][0]→a[0
][0][1]→a[0][0][2]→a[0][0][3]→a[0][1][0]→a[0][1][1]→a[0
][1][2]→a[0][1][3]→a[0][2][0]→a[0][2][1]→a[0][2][2]→a[0
][2][3]→a[1][0][0]→a[1][0][1]→a[1][0][2]→a[1][0][3]→a[1
][1][0]→a[1][1][1]→a[1][1][2]→a[1][1][3]→a[1][2][0]→a[1
][2][1]→a[1][2][2]→a[1][2][3]引用二维数组元素数组名[下标][下标]“下标”可以是整型常量或
整型表达式。数组元素可以出现在表达式中,也可以被赋值,如:b[1][2]=a[2][3]/2;inta[3][4]; //定义a
为3×4的二维数组a[3][4]=3; //不存在a[3][4]元素//数组a可用的“行下标”的范围为0~2,“列下标”的范围为
0~3在引用数组元素时,下标值应在已定义的数组大小的范围内。严格区分在定义数组时用的a[3][4]和引用元素时的a[3][4]的区
别。前者用a[3][4]来定义数组的维数和各维的大小,后者a[3][4]中的3和4是数组元素的下标值,a[3][4]代表行序号为3
、列序号为4的元素(行序号和列序号均从0起算)。注意引用一维数组元素【例6.1】对10个数组元素依次赋值为0,1,2,3,4,5,
6,7,8,9,要求按逆序输出。#includeintmain(){ inti,a[10]; for(i=0
;i<=9;i++) //对数组元素a[0]~a[9]赋值 a[i]=i; for(i=9;i>=0;i--) //输出a[9]
~a[0]共10个数组元素 printf("%d",a[i]); printf("\n"); return0;}a[0]a[1
]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]0123456789第1个for循环使a[0]~a[9]的值为0
~9。第2个for循环按a[9]~a[0]的顺序输出各元素的值。二维数组的初始化可以用“初始化列表”对二维数组初始化。(1)分行给
二维数组赋初值。(最清楚直观)(2)可以将所有数据写在一个花括号内,按数组元素在内存中的排列顺序对各元素赋初值。(3)可以对部分元
素赋初值。(4)如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省。在定义时
也可以只对部分元素赋初值而省略第1维的长度,但应分行赋初值。inta[3][4]={{1,2,3,4},{5,6,7,8},{9
,10,11,12}};inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[3][4]=
{{1},{5},{9}};①①1 0 0 05 0 0 09 0 0 0②1 0 0 00 6 0 00 0 11 0③1 0
0 05 6 0 00 0 0 0④1 0 0 00 0 0 09 0 0 0inta[3][4]={{1},{0,6},{0,
0,11}}; ②inta[3][4]={{1},{5,6}};③inta[3][4]={{1},{},{9}};④?int
a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};inta[][4]={1,2,3,4,5,6,7,8
,9,10,11,12};inta[][4]={{0,0,3},{},{0,10}};二维数组程序举例【例6.4】将一个二维数组
行和列的元素互换,存到另一个二维数组中。 ?#includeintmain(){ inta[2][3]={
{1,2,3},{4,5,6}}; intb[3][2],i,j; printf("arraya:\n"); for(i=0;
i<=1;i++) //处理a数组中的一行中各元素 { for(j=0;j<=2;j++) //处理a数组中某一列中各元素
{ printf("%5d",a[i][j]); //输出a数组的一个元素 b[j][i]=a[i][j]; //将a数组元素的值
赋给b数组相应元素 } printf("\n"); } printf("arrayb:\n"); //输出b数组各元素 fo
r(i=0;i<=2;i++) //处理b数组中一行中各元素 { for(j=0;j<=1;j++) //处理b数组中一列中各
元素 printf("%5d",b[i][j]); //输出b数组的一个元素 printf("\n"); } return0;
}二维数组程序举例【例6.5】有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。先思考一下在打
擂台时怎样确定最后的优胜者。先找出任一人站在台上,第2人上去与之比武,胜者留在台上。再上去第3人,与台上的人(即刚才的得胜者)比武
,胜者留台上,败者下台。以后每一个人都是与当时留在台上的人比武。直到所有人都上台比过为止,最后留在台上的就是冠军。#include
intmain(){ inti,j,row=0,colum=0,max; inta[3][4]={{1,
2,3,4},{9,8,7,6},{-10,10,-5,2}}; //定义数组并赋初值 max=a[0][0];//先认为a[0
][0]最大 for(i=0;i<=2;i++) for(j=0;j<=3;j++) if(a[i][j]>max)//如果某元素
大于max,就取代max的原值 { max=a[i][j]; row=i;//记下此元素的行号 colum=j;//记下此元素的列
号 } printf("max=%d\nrow=%d\ncolum=%d\n",max,row,colum); return0;
}算法找最大最小值打擂台算法max=a[0][0]fori=0to2forj=0to3真假max=a[i][j]row
=icolum=j输出:max和row、columa[i][j]>max字符数组定义字符数组用来存放字符数据的数组是字符数组。在字
符数组中的一个元素内存放一个字符。charc[10];c[0]=''I'';c[1]='''';c[2]=''a'';c[3]=''m'';
c[4]='''';c[5]=''h'';c[6]=''a'';c[7]=''p'';c[8]=''p'';c[9]=''y'';c[0]c[1]c[2
]c[3]c[4]c[5]c[6]c[7]c[8]c[9]Iㄩamㄩhappy由于字符型数据是以整数形式(ASCII代码)存放的
,因此也可以用整型数组来存放字符数据。intc[10];c[0]=''a''; //合法,但浪费存储空间字符数组的初始化对字符数组
初始化,最容易理解的方式是用“初始化列表”,把各个字符依次赋给数组中各元素。如果在定义字符数组时不进行初始化,则数组中各元素的值是
不可预料的。如果花括号中提供的初值个数(即字符个数)大于数组长度,则出现语法错误。如果初值个数小于数组长度,则只将这些字符赋给数组
中前面那些元素,其余的元素自动定为空字符(即′\0′)。如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自
动根据初值个数确定数组长度。也可以定义和初始化一个二维字符数组。charc[10]={′I′,′′,′a′,′m′,′′,
′h′,′a′,′p′,′p′,′y′}; //把10个字符依次赋给c[0]~c[9]这10个元素charc[10]={′c′
,′′,′p′,′r′,′o′,′g′,′r′,′a′,′m′};c[0]c[1]c[2]c[3]c[4]c[5]c[6]c[7
]c[8]c[9]cㄩprogram\0charc[]={′I′,′′,′a′,′m′,′′,′h′,′a′,′p′,′p′
,′y′}; //数组c的长度自动定为10chardiamond[5][5]={{′′,
′′,′′},{′′,′′,′′,′′},{′′,′′,′′,′′,′′},{′′,′′,′′,′′
},{′′,′′,′′}};引用字符数组中的元素【例6.6】输出一个已知的字符串。【例6.7】输出一个菱形图。#includ
eintmain(){ chardiamond[][5]={{'''','''',''''},{'''','''',
'''',''''},{'''','''','''','''',''''}, {'''','''','''',''''},{'''','''',''''}};
inti,j; for(i=0;i<5;i++) { for(j=0;j<5;j++) printf("%c",diamo
nd[i][j]); printf("\n"); } return0;}#includeintmain()
{ charc[15]={''I'','''',''a'',''m'','''',''a'','''',''s'',''t'',''u'',''d'',''e'',''n''
,''t'',''.''}; inti; for(i=0;i<15;i++) printf("%c",c[i]); printf("\n
"); return0;}字符串和字符串结束标志在C语言中,是将字符串作为字符数组来处理的。在实际工作中,人们关心的往往是字符串
的有效长度而不是字符数组的长度。为了测定字符串的实际长度,C语言规定了一个“字符串结束标志”,以字符′\0′作为结束标志。″Cp
rogram″字符串是存放在一维数组中的,占10个字节,字符占9个字节,最后一个字节′\0′是由系统自动加上的注意C系统在用字
符数组存储字符串常量时会自动加一个′\0′作为结束符。在定义字符数组时应估计实际字符串长度,保证数组长度始终大于字符串实际长度。如
果在一个字符数组中先后存放多个不同长度的字符串,则应使数组长度大于最长的字符串的长度。字符串和字符串结束标志printf("How
doyoudo?\n");在向内存中存储时,系统自动在最后一个字符′\n′的后面加了一个′\0′,作为字符串结束标志。在执行
printf函数时,每输出一个字符检查一次,看下一个字符是否为′\0′,遇′\0′就停止输出。charc[]={"Iam
happy"};或charc[]="Iamhappy";用一个字符串(注意字符串的两端是用双引号而不是单引号括起来的)作
为字符数组的初值。注意数组c的长度不是10,而是11。因为字符串常量的最后由系统加上一个′\0′。?charc[]={′I′,
′′,′a′,′m′,′′,′h′,′a′,′p′,′p′,′y′,′\0′};charc[]={′I′,′′,′
a′,′m′,′′,′h′,′a′,′p′,′p′,′y′};charc[10]={"China"};数组c的前5个元素为:
′C′,′h′,′i′,′n′,′a′,第6个元素为′\0′,后4个元素也自动设定为空字符。China\0\0\0\0\0字符数
组的输入输出#includeintmain(){ charc[15]={''I'','''',''a'',''m'',''
'',''a'','''',''s'',''t'',''u'',''d'',''e'',''n'',''t'',''.''}; inti; for(i=0;i<15;
i++) printf("%c",c[i]); printf("\n"); return0;}(1)逐个字符输入输出。用格式符
“%c”输入或输出一个字符。(2)将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串(string)的输入输出。#in
cludeintmain(){ charc[]="China"; printf("%s\n",c); re
turn0;}(1)输出的字符中不包括结束符′\0′。(2)用“%s”格式符输出字符串时,printf函数中的输出项是字符数
组名,而不是数组元素名。(3)如果数组长度大于字符串的实际长度,也只输出到遇′\0′结束。(4)如果一个字符数组中包含一个以上
′\0′,则遇第一个′\0′时输出就结束。字符数组的输入输出 charc[6]; scanf("%s",c);从键盘输入:Ch
ina↙系统会自动在China后面加一个′\0′结束符。 charstr1[5],str2[5],str3[5]; scanf(
"%s%s%s",str1,str2,str3);如果利用一个scanf函数输入多个字符串,则应在输入时以空格分隔。从键盘输入:
Howareyou?↙由于有空格字符分隔,作为3个字符串输入。str1:How\0\0str2:are\0\0str3:yo
u?\0charstr[13];scanf("%s",str);从键盘输入:Howareyou?↙由于系统把空格字符作为
输入的字符串之间的分隔符,因此只将空格前的字符″How″送到str中。How\0\0\0\0\0\0\0\0\0\0字符数组的输入
输出scanf("%s",&str); //str前面不应加&c数组2000C2001h2002i2003n2004a2005
\0printf("%o",c); //用八进制形式输出数组c的起始地址scanf函数中的输入项如果是字符数组名,不要再加地址符&
,因为在C语言中数组名代表该数组第一个元素的地址(或者说数组的起始地址)。若数组占6个字节。数组名c代表地址2000。可以用下面的
输出语句得到数组第一个元素的地址。实际上是这样执行的:按字符数组名c找到其数组第一个元素的地址,然后逐个输出其中的字符,直到遇′
\0′为止。注意printf("%s",c); //用八进制形式输出数组c的起始地址使用字符串处理函数输出字符串的函数puts(字
符数组)#includeintmain(){ charstr[]={"China\nBeijing"};
puts(str); return0;}作用:将一个字符串(以′\0′结束的字符序列)输出到终端。用puts函数输出的字符串中可
以包含转义字符。在用puts输出时将字符串结束标志′\0′转换成′\n′,即输出完字符串后换行。输入字符串的函数gets(字符数组
)gets(str); //str是已定义的字符数组作用:从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符数组
的起始地址。如果从键盘输入:Computer↙将输入的字符串″Computer″送给字符数组str(请注意,送给数组的共有9个字
符,而不是8个字符),返回的函数值是字符数组str的第一个元素的地址。注意用puts和gets函数只能输出或输入一个字符串。put
s(str1,str2);或gets(str1,str2);字符串连接函数strcat(字符数组1,字符数组2)作用:把两个
字符数组中的字符串连接起来,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。字符
数组1必须足够大,以便容纳连接后的新字符串。连接前两个字符串的后面都有′\0′,连接时将字符串1后面的′\0′取消,只在新串最后保
留′\0′。输出:People''sRepublicofChinacharstr1[30]={"People′sRepub
licof"};charstr2[]={"China"};printf("%s",strcat(str1,str2));
连接前str1:People''sRepublicof\0\0\0\0\0\0\0\0\0str2:China连接后str1:
People''sRepublicofChina\0\0\0\0字符串复制函数charstr1[10],str2[]="C
hina";strcpy(str1,str2);或strcpy(str1,"China");strcpy(字符数组1,字
符串2)China\0\0\0\0\0执行后,str1:作用:将字符串2复制到字符数组1中去。字符数组1必须定义得足够大,以便容纳
被复制的字符串2。字符数组1的长度不应小于字符串2的长度。“字符数组1”必须写成数组名形式,“字符串2”可以是字符数组名,也可以
是一个字符串常量。若在复制前未对字符数组1初始化或赋值,则其各字节中的内容无法预知,复制时将字符串2和其后的′\0′一起复制到字符
数组1中,取代字符数组1中前面的字符,未被取代的字符保持原有内容。不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。字
符数组名是一个地址常量,它不能改变值,正如数值型数组名不能被赋值一样。可以用strncpy函数将字符串2中前面n个字符复制到字符
数组1中去。将str2中最前面2个字符复制到str1中,取代str1中原有的最前面2个字符。但复制的字符个数n不应多于str1中原
有的字符(不包括′\0′)。str1="China";str1=str2;strncpy(str1,str2,2);字符串比
较函数strcmp(str1,str2);strcmp("China","Korea");strcmp(str1,"Beij
ing");strcmp(字符串1,字符串2)作用:比较字符串1和字符串2。字符串比较的规则是:将两个字符串自左至右逐个字符相
比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。(1)如全部字符相同,则认为两个字符串相等;(2)若出现
不相同的字符,则以第1对不相同的字符的比较结果为准。比较的结果由函数值带回。(1)如果字符串1与字符串2相同,则函数值为0。(2
)如果字符串1>字符串2,则函数值为一个正整数。(3)如果字符串1<字符串2,则函数值为一个负整数。注意对两个字符串比较不能直
接用str1>str2进行比较,因为str1和str2代表地址而不代表数组中全部元素,而只能用(strcmp(str1,str2
)>0)实现,系统分别找到两个字符数组的第一个元素,然后顺序比较数组中各个元素的值。测字符串长度的函数strlen(字符数组)#i
nclude#includeintmain(){ charstr[10]="Chin
a"; printf("%d,%d\n",strlen(str),strlen("China")); }作用:测试字符串长度的函数
。函数的值为字符串中的实际长度(不包括′\0′在内)。转换为大小写的函数strlwr(字符串)strupr(字符串)作用:将字符串
中大写字母换成小写字母。作用:将字符串中小写字母换成大写字母。注意以上介绍了常用的8种字符串处理函数,它们属于库函数。库函数并非C
语言本身的组成部分,而是C语言编译系统为方便用户使用而提供的公共函数。不同的编译系统提供的函数数量和函数名、函数功能都不尽相同,使
用时要小心,必要时查一下库函数手册。在使用字符串处理函数时,应当在程序文件的开头用#include把stri
ng.h文件包含到本文件中。字符数组应用举例输入一个字符串给stringi=0当((c=string[i])≠''\0'')真假wor
d=0真假word=1num=num+1i=i+1输出:num【例6.8】输入一行字符,统计其中有多少个单词,单词之间用空格分隔开
。string:用于存放字符串。i:计数器,用于遍历字符串中的每个字符。word:用于判断是否开始了一个新单词的标志。若word=
0表示未出现新单词,如出现了新单词,就把word置成1。num:用于统计单词数。c等于空格?word等于0?#includetdio.h>intmain(){ charstring[81]; inti,num=0,word=0; charc; g
ets(string); //输入一个字符串给字符数组string for(i=0;(c=string[i])!=''\0'';i++
) //只要字符不是''\0''就循环 if(c=='''')word=0; //若是空格字符,使word置0 elseif(w
ord==0) //如果不是空格字符且word原值为0 { word=1; //使word置1 num++; //num累加1
,表示增加一个单词 } printf("Thereare%dwordsinthisline.\n",num);//输出
单词数 return0;}字符数组应用举例读入3个字符串给str[0],str[1],str[2]YNstr[0]=>strin
gstr[1]=>stringYNstr[2]=>string输出string中的字符串str[0]>str[1]【例6.9】有3
个字符串,要求找出其中“最大”者。str[2]>stringstr[0]:Holland\0\0\0\0\0\0\0\0\0\0\0\0\0str[1]:China\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0str[2]:America\0\0\0\0\0\0\0\0\0\0\0\0\0#include#includeintmain(){ charstr[3][20]; //定义二维字符数组 charstring[20]; //定义一维字符数组,作为交换字符串时的临时字符数组 inti; for(i=0;i<3;i++) gets(str[i]); //读入3个字符串,分别给str[0],str[1],str[2] if(strcmp(str[0],str[1])>0) //若str[0]大于str[1] strcpy(string,str[0]); //把str[0]的字符串赋给字符数组string else //若str[0]小于等于str[1] strcpy(string,str[1]); //把str[1]的字符串赋给字符数组string if(strcmp(str[2],string)>0) //若str[2]大于string strcpy(string,str[2]); //把str[2]的字符串赋给字符数组string printf("\nthelargeststringis:\n%s\n",string); //输出string return0;}(1)流程图和程序注释中的“大于”是指两个字符串的比较中的“大于”。(2)str[0],str[1],str[2]和string是一维字符数组,其中可以存放一个字符串。(3)strcpy函数在将str[0],str[1]或str[2]复制到string时,最后都有一个′\0′。因此,最后用%s格式输出string时,遇到string中第一个′\0′即结束输出,并不是把string中的全部字符输出。
献花(0)
+1
(本文系太好学原创)