版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第6章数组6.1一维数组6.2二维数组6.3
字符数组6.1一维数组6.1.1一维数组的定义6.1.2一维数组元素的引用6.1.3一维数组的初始化6.1.4一维数组程序举例6.1.1一维数组的定义问题:输入30个数,将它们排序后输出。设置变量:s0、s1、s2、……s29这些数据的特点是:具有相同的数据类型使用过程中需要保留原始数据s012296.1.1一维数组的定义数组:是相同类型数据的有序集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一确定数组元素。属于构造数据类型。构造类型数据是由基本类型数据按一定规则组成的。s01229
s[0]s[1]s[29]6.1.1一维数组的定义优点:表述简洁,可读性高便于使用循环结构s01229
s[0]s[1]s[29]6.1.1一维数组的定义一维数组的定义的一般形式:例如:inta[10];
类型名数组名[常量表达式];数组元素的类型数组变量的名称,标识符用来给定数组长度。可以是整型常量和符号常量,不能包含变量。//包含10个整型元素的数组a6.1.1一维数组的定义正确的定义方法:charc[200];floatf[5];#defineN10intnum[10+N];错误的定义方法:intarray(10);charstr[];intn;floatscore[n];6.1.2一维数组元素的引用引用数组元素的一般形式:数组名[下标]例:inta[10];//10个元素:a[0]、a[1]、……a[9]//下标不要越界,不能使用a[10]可以是整型常量或整型表达式。下标取值范围:[0,数组长度-1]说明:数组必须先定义,后使用。只能引用数组元素而不能一次引用整个数组。数组元素的使用方法与同类型的变量相同例如:intk,a[10];k=3;a[0]=23;a[k-2]=a[0]+1;scanf("%d",&a[9]);a[0]=a[5]+a[7]-a[2*3];6.1.2一维数组元素的引用一维数组在内存中的存放:一维数组的数组元素在内存里按顺序存放。系统根据数组元素的类型分配存储单元。数组名代表数组的首地址。例如:floatmark[100];低地址mark[0]mark[1]mark[2]mark[3]…高地址mark[99]一个元素占4个字节86.592.077.552.0…94.0【例6.1】一维数组的输出。main(){inta[10];inti;for(i=0;i<10;i++)a[i]=i;for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");}运行结果:0123456789aa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]【例6.2】数组元素的引用。main(){inti;inta[10];printf("input10numbers:\n");for(i=0;i<10;i++)scanf("%d",&a[i]);for(i=0;i<10;i++)printf("%d",a[i]);printf("\n");for(i=9;i>=0;i--)printf("%d",a[i]);printf("\n");}运行情况:12345678910↙1234567891010987654321aa[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]6.1.3一维数组的初始化是指在定义一个数组变量的同时给它赋值。对全部数组元素初始化inta[10]={0,1,2,3,4,5,6,7,8,9};说明:数组不初始化,其元素值为随机数。aa[0]0a[1]1a[2]2a[3]3a[4]4a[5]5a[6]6a[7]7a[8]8a[9]96.1.3一维数组的初始化只给部分数组元素赋初值。如果只给数组的前半部分元素赋初值,可连续写出初值。例如:inta[5]={1,2};只给数组的后半部分元素或某些不连续的元素赋初值,则不予赋值的地方应写0。例如:inta[5]={0,3,0,7,9};inta[5]={1,,3,,5};a[0]a[1]a[2]a[3]a[4]12000a[0]a[1]a[2]a[3]a[4]030786.1.3一维数组的初始化使一个数组中全部元素值为0,可以写成:inta[10]={0,0,0,0,0,0,0,0,0,0};或inta[10]={0};不能inta[10]={0*10};6.1.3一维数组的初始化在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长度。例如:inta[5]={1,2,3,4,5};也可以写成inta[]={1,2,3,4,5};
inta[];6.1.4一维数组程序举例【例6.3】输入10个数,求和。#include<stdio.h>main(){
inti,a[10]; longsum=0; for(i=0;i<10;i++)
scanf("%d",&a[i]); for(i=0;i<10;i++) sum=sum+a[i];
printf("%ld\n",sum);}【例6.3】输入10个数,求和。#include<stdio.h>main(){
inti,a[10]; longsum=0; for(i=0;i<10;i++) {
scanf("%d",&a[i]); sum=sum+a[i]; }
printf("%ld\n",sum);}【例6.4】计算fibonacci数列前20个数。分析:用数组f[20]存放fibonacci数列的前20个数f[0]=f[1]=1f[n]=f[n-1]+f[n-2](2≤n≤19)Fibonacci数列:1,1,2,3,5,8,13……1 (n=1)1 (n=2)Fn-1+Fn-2 (n>2)Fn=f[0]1f[1]1f[2]f[3]f[4]f[5]f[6]…f[18]f[19]【例6.4】计算fibonacci数列前20个数。
inti;
int
f[20]={1,1}; for(i=2;i<20;i++)
f[i]=f[i-2]+f[i-1]; for(i=0;i<20;i++) { if(i%5==0)printf("\n"); printf("%12d",f[i]); }523求最小值问题【例6.5】输入10个数,求最小值。【例6.6】输入n个数(n<10),求最小值。【例6.7】输入n个数(n<10),输出最小值和它所对应的下标。【例6.8】输入n个数(n<10),将最小值与第一个数交换,然后再输出整个数组。【例6.5】输入10个数,求最小值。
inti,a[10],min; //min:存放最小数
for(i=0;i<10;i++)
scanf("%d",&a[i]); min=a[0]; for(i=1;i<10;i++) if(a[i]<min)min=a[i];
printf("%d\n",min);a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]a【例6.6】输入n个数(n<10),求最小值。
inti,a[10],min,n;
printf("input
n(n<10):\n");
scanf("%d",&n);
printf("input%dnumbers:\n",n);
for(i=0;i<n;i++)
scanf("%d",&a[i]); min=a[0]; for(i=1;i<n;i++) if(a[i]<min)min=a[i];
printf("%d\n",min);【例6.7】输入n个数(n<10),输出最小值和它所对应的下标。分析:index:记录最小值对应的下标;a[index]:最小值输入数组aindex=0fori=1ton-1a[i]<a[index]index=i输出最小值a[index]和下标indexYN【例6.7】输入n个数(n<10),输出最小值和它所对应的下标。N-S流程图:
inti,min,n,index,a[10];
printf("input
n(n<10):\n");
scanf("%d",&n);
printf("input%dnumbers:\n",n); for(i=0;i<n;i++)
scanf("%d",&a[i]);
index=0; for(i=1;i<n;i++) if(a[i]<a[index])index=i;
printf("a[%d]=%d\n",index,a[index]);【例6.7】输入n个数(n<10),输出最小值和它所对应的下标。【例6.8】输入n个数(n<10),将最小值与第一个数交换,然后再输出整个数组。分析:用index记录最小值的下标,a[index]就是最小值最小值与第一个数交换:a[index]<==>a[0]a[0]a[1]a[2]a[index]a输入数组aindex=0fori=1ton-1a[i]<a[index]index=i
a[index]<==>a[0]YN【例6.8】输入n个数(n<10),将最小值与第一个数交换,然后再输出整个数组。N-S流程图:排序问题【例】用选择法对数据进行排序。【例】用冒泡法对数据进行排序。【例】用选择法对n个数据进行排序。假设n=53528115283125831238512358a[0]a[1]a[2]a[3]a[4]【例】用选择法对n个数据进行排序。选择法排序过程:从n个数中找出最小的,将它与第一个数交换,结果最小的数被安置在第一个元素位置上;再从剩余的n-1个数中找出次小的数,将它与第二个数交换;重复上述过程,共经过n-1趟排序后,排序结束。【例】用选择法对n个数据进行排序。分析:5个数a[0]~a[4]中找最小数,与a[0]交换4个数a[1]~a[4]中找最小数,与a[1]交换3个数
a[2]~a[4]中找最小数,与a[2]交换2个数
a[3]~a[4]中找最小数,与a[3]交换【例】用选择法对n个数据进行排序。对于n个数:n个数
a[0]~a[n-1]中找最小数,与a[0]交换n-1个数
a[1]~a[n-1]中找最小数,与a[1]交换…2个数
a[n-2]~a[n-1]中找最小数,与a[n-2]交换总结:a[k]~a[n-1]中找最小值,与a[k]交换(k的范围:0~n-2)【例】用选择法对n个数据进行排序。N-S流程图表示:输入数组aindex=kfori=k+1ton-1a[i]<a[index]index=ia[index]<==>a[k]YNfork=0ton-2输出数组a【例】用选择法对n个数据进行排序。
inti,index,k,n,temp,a[10];
scanf("%d",&n); for(i=0;i<n;i++)
scanf("%d",&a[i]); for(k=0;k<=n-2;k++) { index=k; for(i=k+1;i<=n-1;i++) if(a[i]<a[index])index=i; temp=a[index]; a[index]=a[k]; a[k]=temp; } for(i=0;i<n;i++)
printf("%d",a[i]);运行情况:5↙35281↙12358【例】用冒泡法对n个数据进行排序。设n=6第一趟比较经过第一趟(共5次比较与交换)后,最大数9“沉底”。【例】用冒泡法对n个数据进行排序。第二趟比较如果有n个数,则要进行n-1趟比较。在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j次两两比较。【例】用冒泡法对n个数据进行排序。冒泡法排序过程:第一趟冒泡排序比较第一个数与第二个数,若为逆序a[0]>a[1],则交换;然后依次两两比较,结果最大的数被安置在最后一个元素位置上;第二趟冒泡排序对前n-1个数进行,结果使次大的数被安置在第n-1个元素位置;重复上述过程,共经过n-1趟冒泡排序后,排序结束。【例】用冒泡法对n个数据进行排序。总结:对于6个数,共进行5趟比较过程。第1趟排序(a[0]-a[5]):进行5次两两比较。第2趟排序(a[0]-a[4]):经过4次两两比较。第3趟排序(a[0]-a[3]):经过3次两两比较。第4趟排序(a[0]-a[2]):2次两两比较。第5趟排序(a[0]-a[1]):1次两两比较【例】用冒泡法对n个数据进行排序。N-S流程图表示:输入数组a[n]forj=0ton-2fori=0ton-2-ja[i]>a[i+1]真假a[i]
a[i+1]输出a[0]到a[n-1]n-1趟比较【例】用冒泡法对n个数据进行排序。
inti,j,t,a[10];
printf("input10number:\n"); for(i=0;i<10;i++)
scanf("%d",&a[i]);
printf("\n"); for(j=0;j<=8;j++) for(i=0;i<=8-j;i++) if(a[i]>a[i+1]) { t=a[i];
a[i]=a[i+1]; a[i+1]=t; }6.2二维数组一维数组:处理列表/向量二维数组:处理表格/平面矩阵三维数组:处理三维空间的方阵6.2二维数组6.2.1二维数组的定义6.2.2二维数组元素的引用6.2.3二维数组的初始化6.2.4二维数组的输入输出6.2.5二维数组程序举例6.2.1二维数组的定义二维数组变量定义的一般形式:例如:floata[3][4];//a为3行4列的数组类型说明数组名[常量表达式][常量表达式];行数列数6.2.1二维数组的定义错误的数组定义方法:int
a[3,4];intb(3,4);intc[][];intd(3)(4);6.2.2二维数组元素的引用二维数组元素的表示形式为:例:inta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;
a[3][4]=3; /*下标越界*/数组名[行下标][列下标]行下标的取值范围:[0,行长度-1]列下标的取值范围:[0,列长度-1]说明:我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一个一维数组。例:inta[3][4];6.2.2二维数组元素的引用二维数组在内存的存放:二维数组可看作特殊的一维数组;二维数组的元素在内存中按行存放。例如:
inta[3][4];a[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]6.2.3二维数组的初始化4种方法对二维数组初始化:分行给二维数组赋初值。例如:
inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};1234567891011126.2.3二维数组的初始化将所有数据写在一个花括号内,按数组排列的顺序对各元素赋初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};1234567891011126.2.3二维数组的初始化只对部分元素赋初值。例如:inta[3][4]={{1},{5},{9}};inta[3][4]={{1},{0,6},{0,0,11}};inta[3][4]={{1},{5,6}};10005000900010000600001101000560000006.2.3二维数组的初始化如果对全部元素都赋初值,则定义数组时,对第一维的长度可以不指定。例如:inta[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};6.2.4二维数组的输入输出二维数组的输入:inti,j;inta[3][2];for(i=0;i<3;i++
) //行标
for(j=0;j<2;j++
) //列标
scanf(“%d”,&a[i][j]);a[0][0]1a[0][1]2a[1][0]3a[1][1]4a[2][0]5a[2][1]6输入:123456a1234566.2.4二维数组的输入输出二维数组的输入:inti,j;inta[3][2];for(j=0;j<2;j++) //列标
for(i=0;i<3;i++
) //行标
scanf(“%d”,&a[i][j]);输入:123456a[0][0]1a[0][1]4a[1][0]2a[1][1]5a[2][0]3a[2][1]6a1425366.2.4
二维数组的输入输出以矩阵的形式输出二维数组a[0][0]a[0][1]a[1][0]a[1][1]a[2][0]a[2][1]inti,j;inta[3][2];for(i=0;i<3;i++){for(j=0;j<2;j++)
printf("%d",a[i][j]);
printf("\n");}【例6.11】输入二维数组,并按矩阵形式输出。
inti,j,a[3][2]; for(i=0;i<3;i++) for(j=0;j<2;j++)
scanf("%d",&a[i][j]); for(i=0;i<3;i++) { for(j=0;j<2;j++)
printf("%5d",a[i][j]);
printf("\n"); }小结:遍历二维数组的方法:通常应使用二层嵌套的for循环;行下标和列下标分别做为循环变量;外层对行进行循环,内层对列进行循环6.2.5
二维数组程序举例【例6.12】将二维数组a行列元素互换,存到另一个数组b中。
inta[2][3]={{1,2,3},{4,5,6}};
intb[3][2],i,j;
for(i=0;i<=1;i++) for(j=0;j<=2;j++) b[j][i]=a[i][j];【例6.13】有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。分析:row:记录值最大的那个元素的行下标colum:记录值最大的那个元素的列下标max:最大的那个元素,即a[row][colum]【例6.13】有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。N-S流程图表示算法如下:【例6.13】有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
inti,j,row,colum,max;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; max=a[0][0]; for(i=0;i<3;i++)
for(j=0;j<4;j++) if(a[i][j]>max) { max=a[i][j]; row=i;
colum=j; } 【例6.13】有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值,以及其所在的行号和列号。
inti,j,row,colum;
inta[3][4]={{1,2,3,4},{9,8,7,6},{-10,10,-5,2}}; row=0;
colum=0; for(i=0;i<3;i++)
for(j=0;j<4;j++) if(a[i][j]>a[row][colum]) { row=i;
colum=j; } 【例6.14】有5个学生,已知每个学生有5门课的成绩,要求输出平均成绩最高的学生的成绩,以及该学生的序号。分析:采用5*6的二维数组:科目学生语文数学物理化学英语平均成绩张三7882937465李四9182727667李敏10090857298王超6789906578王莹7788994589【例6.14】有5个学生,已知每个学生有5门课的成绩,要求输出平均成绩最高的学生的成绩,以及该学生的序号。inti,j,max_i;floatsum,max=0;floats[5][6]={{78,82,93,74,65},{91,82,72,76,67},{100,90,85,72,98},{67,89,90,65,78},{77,88,99,45,89}};科目学生语文数学物理化学英语平均成绩张三7882937465李四9182727667李敏10090857298王超6789906578王莹7788994589
for(i=0;i<5;i++) //求学生的平均成绩
{sum=0;for(j=0;j<5;j++)sum=sum+s[i][j];s[i][5]=sum/5;}for(i=0;i<5;i++)if(s[i][5]>max){max=s[i][5];
max_i=i;}科目学生语文数学物理化学英语平均成绩张三7882937465李四9182727667李敏10090857298王超6789906578王莹77889945896.3字符数组6.3.1字符数组的定义6.3.2字符数组的初始化6.3.3字符串和字符串结束标志6.3.4字符数组的输入输出6.3.5字符串处理函数6.3.6字符数组应用举例6.3.1字符数组的定义用来存放字符数据的数组是字符数组。定义字符数组的一般形式:char
数组名[常量表达式];例如:
charc[10];//包含10个字符的数组6.3.2字符数组的初始化用字符常量赋初值可逐个字符赋给数组中各元素。例如:charc[10]={'I','','a','m','','h','a','p','p','y'};说明:如果在定义字符数组时不进行初始化,数组元素的值为随机数。如果初值个数>数组长度,则语法错误;如果初值个数<数组长度,则只将这些字符赋给数组中前面那些元素,其余元素自动定为空字符例如:charc[10]={'c','','p','r','o','g','r','a','m'};说明:如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。例如:charc[]={'I','','a','m','','h','a','p','p','y',};6.3.2字符数组的初始化用字符串常量赋初值例如:charc[]={"Iamhappy"};charc[]="Iamhappy";等价于charc[]={'I','','a','m','','h','a','p','p','y','\0'};说明:字符串常量包含一个字符串结束符'\0'6.3.3字符串和字符串结束标志字符串常量的存储和运算用一维字符数组实现。字符串特殊的一维字符数组。c语言规定:一个字符串以字符'\0'作为字符串结束标志。例如:charc[]="Happy";Happy\0说明:字符数组并不要求最后一个字符为'\0'在程序中往往依靠检测‘\0’的位置来判定字符串是否结束。【例6.15】计算字符串的有效长度,并输出该字符串。字符串的有效长度:有效字符的个数。即:数组中第一个'\0'前面的字符个数。Happy\0???s[0]s[1]s[2]s[3]s[4]s[5]s[6]s[7]s[8]……【例6.15】计算字符串的有效长度,并输出该字符串。chars[80]="Happy";inti,len;for(i=0;s[i]!='\0';i++);
len=i;printf("len=%d\n",len);for(i=0;s[i]!='\0';i++)
putchar(s[i]); //计算有效长度//for(i=0;i<len;i++)6.3.4字符数组的输入/输出字符数组的输入/输出有两种方法:单个字符输入/输出使用格式控制符“%c”字符串的输入/输出格式控制符“%s”1、单个字符输入/输出【例6.16】字符数组的输出。#include<stdio.h>voidmain(){ charc[10]={'I','','a','m','','a','','b','o','y'};
inti; for(i=0;i<10;i++)
printf("%c",c[i]);
printf("\n");}//putchar(c[i]);2、字符串的输入/输出用格式符“%s”输出字符串如:charc[]={"China"};printf("%s",c);
输出遇结束符'\0'结束说明:不输出结束符'\0',且输出后不换行。printf函数中的输出项是字符数组名,而不是数组元素名。把第一个“\0”字符之前的部分输出,其它的字符被忽略。
charc[20]="China\0Beijing";
printf("%s",c);
printf("%s",c);输出:ChinaChinachara[5]={‘H’,’e’,’l’,’l’,’o’};printf(“%s”,a);chara[]=“Hello”;printf(“%s”,a);输出:Hello#-=*输出:Hellochara[]={'h','e','l','\0','l','o','\0'};printf("%s",a);输出:hel【例6.17】判断输出结果。2、字符串的输入/输出用格式符“%s”输入字符串例如:charc[10];scanf("%s",c);输入:beijing
说明:输入时,遇空格键或回车键时结束输入。系统自动在字符串末尾添加'\0'结束符。beijing\0【例6.18】输入一个以问号结束的字符串(少于80个字符),统计其中数字字符的个数。分析:数组长度取上限80以'?'做为输入结束符将输入结束符'?'转换为字符串结束符'\0'It's512?It's512\0
intcount=0,i=0; chars[80]; while((s[i]=getchar())!='?') i++;
s[i]='\0'; for(i=0;s[i]!='\0';i++) if(s[i]<='9'&&s[i]>='0') count++;
printf("count=%d\n",count);运行结果:It's512?count=3【例6.18】输入一个以问号结束的字符串(少于80个字符),统计其中数字字符的个数。说明:如果输入的字符串中有空格,只将空格以前的部分读入数组。
chara[15];
scanf("%s",a);
printf("%s\n",a);输入:Howareyou?
how说明:如果利用一个scanf函数输入多个字符串,则以空格分隔。chara[5],b[5],c[5];scanf("%s%s%s",a,b,c);输入:Howareyou?
说明:使用字符数组名,而不是数组元素名。输入串长度<数组长度不要加地址运算符“&”。
如:scanf("%s",a);6.3.5字符串处理函数puts函数gets函数字符串连接函数strcat()字符串拷贝函数strcpy()字符串比较函数strcmp()计算字符串长度的函数strlen()1.puts函数功能:输出字符串输出字符串后自动换行可以包含转义字符一般形式:puts(字符数组)例如:charstr[]={"China\nBeijing"};puts(str);运行结果:ChinaBeijing2、gets函数功能:从键盘接收一个以回车结束的字符串放入字符数组,并自动加‘\0’输入的字符串中可以包含空格。一般形式:gets(字符数组)例如:charstring[80];gets(string);puts(string);输入:Howareyou?
Howareyou?说明:用puts和gets函数只能输入/输出一个字符串。不能写成puts(str1,str2)gets(str1,str2)3、字符串连接函数strcat()一般形式:
作用:把字符串str2连接到字符串str1的后面,结果放在str1中。连接后,str1的
'\0'取消,新字符串最后加
'\0'。strcat(str1,str2)3、字符串连接函数strcat()例如:chara[20]="Mynameis",b[10]="Liming";strcat(a,b);aMynameisLiming\0bLiming\0aMynameis\04、字符串拷贝函数strcpy()一般形式:作用:将字符串str2复制到字符串str1中。说明:str1的长度应大于str2的长度;拷贝时'\0'一同拷贝strcpy(str1,str2)4、字符串拷贝函数strcpy()例如:charstr1[]="student",str2[]="china";strcpy(str1,str2);str1student\0str1china\0t\0str2china\0说明:可以用strncpy函数将一个字符串中的前若干个字符复制到另一个字符串中。例如:charstr1[]="student",str2[]="china";strncpy(str1,str2,2);str1student\0str1chudent\0str2china\0说明:不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组。例如:charstr1[20],str2[20];str1={“Hello!”}; //数组名代表地址str2=str1;【例6.19】分析下面程序的运行结果。#include<stdio.h>voidmain(){ charc1[10]="abcdefghi",c2[]="china";
strcpy(c1,c2); puts(c1);
printf("%c",c1[7]);}运行结果:chinah5、字符串比较函数strcmp()一般形式:作用:对两个字符串从左向右逐个字符比较ASCII码,直到遇到不同字符或遇到'\0'为止。
若str1
<str2,返回负整数
若str1
>str2,返回正整数
若str1
==str2,返回零strcmp(str1,str2)str1abc\0
str2abcde\0str1abcd\0
str2Abcde\0strcmp(str1,str2)>0strcmp(str1,str2)<0str1china\0str2china\0strcmp(str1,str2)==0说明:字符串比较不能直接用关系运算符,必须用strcmp函数。如:if(strcmp(str1,str2)>0) if(str1>str2) 【例6.20】比较两个字符串的大小。#include<stdio.h>voidmain(){ chars1[]="aBC",s2[]="abc"; if(strcmp(s1,s2)==0) printf("s1=s2"); elseif(strcmp(s1,s2)>0) printf("s1>s2"); else printf("s1<s2");}输出结果:s1<s2【例6.21】有3个字符串,要求找出其中最大者。
chars1[10]="China",s2[10]="America", s3[10]="Japan", string[10]; if(strcmp(s1,s2)>0) strcpy(string,s1); else strcpy(string,s2); if(strcmp(s3,string)>0) strcpy(string,s3);
puts(string);6、计算字符串长度的函数strlen()一般形式:作用:计算字符串长度(实际长度,不包括'\0'
)。strlen(str)【例6.22】写出程序的运行结果。#include<string.h>#include<stdio.h>voidmain(){ charstr[20]={"hello\0abcd\0abc\0"};
printf("%d\n",strlen(str));}运行结果:56.3.6字符数组应用举例【例6.23】输入一行字符,统计其中以空格分开的单词的个数。分析:单词的数目可以由空格出现的次数决定。连续的若
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论