版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
授课教师:厦门理工学院软件学院C语言程序设计第一页,编辑于星期六:五点三十六分。1第5章数组C
语言程序设计第二页,编辑于星期六:五点三十六分。2第5章数组
本章重点介绍:一维数组二维数组字符数组与字符串第三页,编辑于星期六:五点三十六分。35.1概述
1.用案例说明为什么使用数组【例5-1】设计一个程序,将n个人某门课程的成绩输入计算机,求平均成绩和高于平均成绩的人数。如果不使用数组,以5个人的成绩为例,使用a1、a2、a3、a4、a5来存放5个成绩,程序代码如下:
第四页,编辑于星期六:五点三十六分。4程序代码:#include"stdio.h"voidmain(){intn=0;floats,ave,a1,a2,a3,a4,a5;scanf("%f%f%f%f%f",&a1,&a2,&a3,&a4,&a5);s=a1+a2+a3+a4+a5;ave=s/5;if(a1>ave)n++;if(a2>ave)n++;if(a3>ave)n++;if(a4>ave)n++;if(a5>ave)n++;printf("%f%d\n",ave,n);}如果要统计10个人的成绩呢?第五页,编辑于星期六:五点三十六分。5
#include"stdio.h"voidmain(){intn=0,i;floats=0,ave,a[10];for(i=0;i<10;i++) {scanf("%f",&a[i]);s=s+a[i]; }ave=s/10;for(i=0;i<10;i++)if(a[i]>ave)n++;printf("平均成绩为:%.1f\n高于平均成绩的人数为:%d\n",ave,n);}使用数组来存储10个人的数据,用循环结构实现!程序代码如下:第六页,编辑于星期六:五点三十六分。65.1概述(续)2.数组与数组元素的概念数组:是用一个名字表示的一组相同类型的数据的集合,这个名字就称为数组名。如定义:floata[10];a是数组名。下标变量(或数组元素):数组中的数据分别存储在用下标区分的变量中,这些变量称为下标变量或数组元素。如:a[0]、a[1]…a[i]。每个下标变量相当于一个简单变量,数组的类型也就是该数组的下标变量的数据类型。数组属于构造类型。构造类型的数据是由基本类型数据按一定规则构成的。第七页,编辑于星期六:五点三十六分。75.2一维数组例如:
inta[10];
floatscore[5];
“数据类型”:是数组元素的数据类型。“数组名”:遵循C语言标识符规则。“常量表达式”:表示数组中有多少个元素,即数组的长度。它可以是整型常量、整型常量表达式或符号常量。
5.2.1一维数组的定义数据类型数组名[常量表达式];第八页,编辑于星期六:五点三十六分。8以下数组定义是正确的:#defineN10……floatscore1[N],score2[N];intnum[10+N];charc[26];以下数组定义是不正确的:intarray(10);intn;floatscore[n];charstr[];5.2.1一维数组的定义(续)第九页,编辑于星期六:五点三十六分。9数组在内存的存放数组下标从0开始。一维数组的数组元素在内存里按顺序存放。数组名代表数组的首地址,即score的值与score[0]的地址值(&score[0])相同。
score[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0低地址高地址score数组第十页,编辑于星期六:五点三十六分。105.2.2一维数组元素的引用1.一维数组元素的表示形式例如:输入学生成绩
for(i=0;i<5;i++)
scanf("%f",&score[i]);例如:n=3;fib[n]=fib[n-1]+fib[n-2];其中:“下标表达式”:只能是整型常量或整型表达式。
数组名[下标表达式
]第十一页,编辑于星期六:五点三十六分。115.2.2数组元素的引用(续)2.说明①下标从0开始(下界为0),数组的最大下标(上界)是数组长度减1。例如:
inta[10],i;scanf("%d",&a[10]);/*下标越界*/
C编译系统不做越界检查。第十二页,编辑于星期六:五点三十六分。125.2.2数组元素的引用(续)
②
[]是下标运算符如:x=score[2];(1)计算score[2]地址:
2000+2*4=2008(2)取出2008的内容(67.5)赋给x2000H2004H2008H200CH2010Hscore[0]score[1]score[2]score[3]score[4]91.534.567.572.084.0如果引用的数组元素超出数组范围会破坏其他变量的值。第十三页,编辑于星期六:五点三十六分。135.2.3一维数组的初始化初始化:在定义数组时给数组元素赋初值。1.在定义数组时,对全部数组元素赋初值例如:inta[5]={0,1,2,3,4};此时可以省略数组长度,例如:inta[]={0,1,2,3,4};
2.在定义数组时,对部分数组元素赋初值例如:inta[5]={1,2,3};系统为其余元素赋0。3.当初值的个数多于数组元素的个数时,编译出错例如:
inta[5]={0,1,2,3,4,5};
第十四页,编辑于星期六:五点三十六分。145.2.4一维数组应用举例【例5-2】设计一个程序,将n个人某门课程的成绩输入计算机后输出最高分和最低分。思路:首先将n个人的成绩输入到一个一维数组中。求若干个数的最大值或最小值常采用打擂台的方法:首先指定某数为最大值或最小值的擂主:如:max=a(0),min=a(0)将其他各数依次与擂主进行比较(循环嵌套分支),当所有的数都比较完之后,输出max和min的值。
第十五页,编辑于星期六:五点三十六分。15程序如下:#include"stdio.h"#defineN5voidmain(){inta[N],max,min,i;for(i=0;i<N;i++)scanf("%d",&a[i]);min=max=a[0];for(i=1;i<N;i++)if(a[i]<min)min=a[i];/*min存放最小值*/elseif(a[i]>max)max=a[i];/*max存放最大值*/printf("最高分:%d最低分:%d",max,min);printf("\n");}程序运行情况如下:7898658245
最高分:98最低分:45第十六页,编辑于星期六:五点三十六分。165.2.4一维数组应用举例(续)【例5-3】将5个数存放到一维数组中,再将这5个数按逆序存放在同一数组中并输出。交换n/2次a[0]a[1]a[2]a[3]a[4]1357997531交换前交换后a[i]与a[n-1-i]交换第十七页,编辑于星期六:五点三十六分。17程序如下:#defineN5#include"stdio.h"voidmain(){inti,t,a[N];for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N/2;i++){t=a[i];a[i]=a[N-1-i];a[N-1-i]=t;}…'输出数据}程序运行情况如下:1113151719
逆序存放后的结果是:
1917151311第十八页,编辑于星期六:五点三十六分。185.2.4一维数组应用举例(续)【例5-4】用冒泡法(也称起泡法)对输入的一组成绩按从低分到高分的顺序排序并输出。
例如将6个数:4、7、5、6、8、1按从小到大顺序用冒泡法排序,方法如下:第一趟排序情况如下:
475681第一次4和7比较,不交换475681第二次7和5比较,交换457681第三次7和6比较,交换456781第四次7和8比较,不交换456781第五次8和1比较,交换456718在第一趟排序中,6个数比较了5次,把6个数中的最大数8排在最后。第十九页,编辑于星期六:五点三十六分。19冒泡法排序(续)第二趟排序情况如下:
456718第一次4和5比较,不交换456718第二次5和6比较,不交换456718第三次6和7比较,不交换456718第四次7和1比较,交换456178在第二趟排序中,最大数8不用参加比较,其余的5个数比较了4次,把其中的最大数7排在最后,排出78。以此类推:第三趟比较4次,排出678第四趟比较2次,排出5678第五趟比较1次,排出45678最后还剩下1个数1,不需再比较,得到排序结果:145678第二十页,编辑于星期六:五点三十六分。20冒泡法排序(续)从上述过程可以看到:n个数要比较n-1趟,而在第j趟比较中,要进行n-j次两两比较。冒泡法排序for(i=0;i<N;i++)输入a[i]for(j=1;j<N;j++)for(i=0;i<N-j;i++)a[i]>a[i+1]TFa[i]与a[i+1]交换输出a[0]~a[N-1]第二十一页,编辑于星期六:五点三十六分。21程序如下:#defineN6#include"stdio.h"voidmain(){inta[N];inti,j,t;printf("请输入%d个成绩,用空格隔开:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);
冒泡法排序(续)第二十二页,编辑于星期六:五点三十六分。22for(j=1;j<=N-1;j++)for(i=0;i<N-j;i++)if(a[i]>a[i+1]){t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("成绩从低分到高分的顺序是:\n");for(i=0;i<N;i++)printf("%d",a[i]);printf("\n");}程序运行情况如下:请输入6个成绩,用空格隔开:785696837288
成绩从低分到高分的顺序是:567278838896冒泡法排序(续)第二十三页,编辑于星期六:五点三十六分。23以6个数:3、7、5、6、8、0为例,介绍选择法排序方法。思路:第一趟:将第一个数(擂主)依次和后面的数比较,如果后面的某数小于第一个数,则两个数交换,比较结束后,第一个数则是最小的数。第二趟:将第二个数(擂主)依次和后面的数比较,如果后面的某数小于第二个数,则两个数交换,比较结束后,第二个数则是次小的数;……。【例5-5】用选择法对输入的一组成绩按从低分到高分的顺序排序并输出。5.2.4一维数组应用举例(续)第二十四页,编辑于星期六:五点三十六分。24【例5-5】选择法排序(续)
选择法排序for(i=0;i<N;i++)输入a[i]for(j=0;j<N-1;j++)for(i=j+1;i<N;i++)a[j]>a[i]TFa[j]与a[i]交换输出a[0]~a[N-1]第二十五页,编辑于星期六:五点三十六分。25【例5-5】选择法排序(续)程序如下:#defineN6#include"stdio.h"voidmain(){inta[N];inti,j,t;printf("请输入%d个成绩,用空格隔开:\n",N);for(i=0;i<N;i++)scanf("%d",&a[i]);第二十六页,编辑于星期六:五点三十六分。26for(j=0;j<N-1;j++)for(i=j+1;i<N;i++)if(a[j]>a[i]){t=a[j];a[j]=a[i];a[i]=t;}printf("成绩从低分到高分的顺序是:\n");for(i=0;i<N;i++)printf("%d",a[i]);printf("\n");}程序运行情况如下:请输入6个成绩,用空格隔开:785696837288
成绩从低分到高分的顺序是:567278838896【例5-5】选择法排序(续)第二十七页,编辑于星期六:五点三十六分。275.2.5一维数组作函数参数
数组名作函数的实参,传递的是数组的首地址,此时形参也应定义为数组形式,但形参数组的长度可以省略。例如,在主函数中调用sort函数,实现将整型数组a中的10个数据排序,调用语句如下:sort(a,10);sort函数定义如下:voidsort(intb[],intn){…}第二十八页,编辑于星期六:五点三十六分。28voidsort(intb[],intn);voidprintarr(intb[]);main(){inta[10]={11,22,63,97,58,80,45,32,73,36};printf("Beforesort:\n");
printarr(a);
sort(a,10);
printf("Aftersort:\n");
printarr(a);}voidprintarr(intb[10]){inti;for(i=0;i<10;i++)printf("%5d",b[i]);printf("\n");}voidsort(intb[],intn){inti,j,t;for(i=1;i<n;i++)for(j=0;j<n-i;j++)if(b[j]>b[j+1]){t=b[j];b[j]=b[j+1];b[j+1]=t;}}第二十九页,编辑于星期六:五点三十六分。29
a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]
b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]11226397588045327336(a)排序前a[0]a[1]a[2]a[3]a[4]a[5]a[6]a[7]a[8]a[9]b[0]b[1]b[2]b[3]b[4]b[5]b[6]b[7]b[8]b[9]11223236455863738097(b)排序后2000b形参b实际是一个可以存放地址的变量a:2000实参赋给形参首地址:
2000首地址:
2000第三十页,编辑于星期六:五点三十六分。305.3二维数组
数据类型数组名[常量表达式1][常量表达式2];
例如:
floatx[2][3];
5.3.1二维数组的定义
X[0][0]X[0][1]X[0][2]X[1][0]X[1][1]X[1][2]inta[3,4],b(3,4),c[][],d(3)(4);第三十一页,编辑于星期六:五点三十六分。31x[0][0]x[0][1]x[0][2]x[1][0]x[1][1]x[1][2]2000H2004H2008H200cH2010H2014H地址值数组元素二维数组元素在内存中的排列顺序:按行存放5.3二维数组(续)第三十二页,编辑于星期六:五点三十六分。32二维数组可看作是一种特殊的一维数组x[0]是数组名,是元素x[0][0]的地址x[1]是数组名,
是元素x[1][0]的地址x[0]——x[0][0],x[0][1],x[0][2]x[1]----
x[1][0],x[1][1],x[1][2]例如,可以把x数组看作是包含二个大元素的一维数组,每个元素又是一个含有三个元素的一维数组。5.3二维数组(续)第三十三页,编辑于星期六:五点三十六分。33a[3][4]=3;/*下标越界*/a[1,2]=1;/*应写成a[1][2]=1;*/5.3.2二维数组元素的引用例:inta[3][4];a[0][0]=3;a[0][1]=a[0][0]+10;数组名[行下标表达式][列下标表达式]
数组元素的表示形式:第三十四页,编辑于星期六:五点三十六分。345.3.3二维数组的初始化例:inta[2][3]={1,2,3,4,5,6}
1.按行赋初值例:inta[2][3]={{1,2,3},{4,5,6}}初始化后结果:123456
2.按数组元素在内存中排列的顺序对各元素赋初值3.给部分元素赋初值例:inta[2][3]={{1},{4}};初始化后结果:100400第三十五页,编辑于星期六:五点三十六分。355.3.3二维数组的初始化(续)4.数组初始化时,行长度可省,列长度不能省
例如:inta[][3]={1,2,3,4,5,6,7};
intb[][4]={{1},{4,5}};初始化结果:a
结果:a[0]:123a[1]:456a[2]:700b
结果:b[0]:1000b[1]:4500第三十六页,编辑于星期六:五点三十六分。36下面对二维数组的定义都是错误的:5.3.3二维数组的初始化(续)
floatx[3][]={1.0,2.0,3.0,4.0,5.0,6.0};
inta[][],b[][2],c[3][];
intm[2][4]={1,2,3,4,5,6,7,8,9};
/*初值个数多于数组元素的个数,编译出错*/
第三十七页,编辑于星期六:五点三十六分。375.3.4二维数组应用举例【例5-7】将表5-1中4人的学号及4门课的成绩输入计算机后再按行输出。表5-1某宿舍期末考试成绩学号高数物理英语计算机100187757266100298859283100367785376100448607667第三十八页,编辑于星期六:五点三十六分。38程序如下:#include"stdio.h"voidmain(){inta[4][5],i,j;for(i=0;i<4;i++)for(j=0;j<5;j++)scanf("%d",&a[i][j]);printf("\n");printf("学号\t高数\t物理\t英语\t计算机\n");【例5-7】(续)第三十九页,编辑于星期六:五点三十六分。39【例5-7】(续)for(i=0;i<4;i++){for(j=0;j<5;j++) printf("%d\t",a[i][j]);printf("\n");}printf("\n");}程序运行情况如下:100187757266
100298859283
100367785376
100448607667
学号高数物理英语计算机100187757266100298859283100367785376100448607667第四十页,编辑于星期六:五点三十六分。405.3.4二维数组应用举例(续)【例5-8】某班有N名学生,期末考试课程有高数、物理、英语和计算机。设计一个程序实现如下功能:(1)统计每个学生的平均分。(2)统计每门课程的最高分。程序如下:#defineNUM4#include"stdio.h"voidmain(){inta[NUM][6],i,j,sum,max;第四十一页,编辑于星期六:五点三十六分。41【例5-8】(续)printf("请按行输入数据,数据之间用空格分开:\n");for(i=0;i<NUM;i++)for(j=0;j<5;j++) scanf("%d",&a[i][j]);for(i=0;i<NUM;i++)/*求每人的总分和平均分*/{sum=0; for(j=1;j<5;j++)sum=sum+a[i][j];/*求某一学生的总成绩*/a[i][5]=(int)(sum/4.0+0.5);/*将平均成绩四舍五入*/}第四十二页,编辑于星期六:五点三十六分。42【例5-8】(续)printf("\n学号\t高数\t物理\t英语\t计算机\t平均分\n");for(i=0;i<NUM;i++){for(j=0;j<=5;j++) printf("%d\t",a[i][j]); printf("\n");}
第四十三页,编辑于星期六:五点三十六分。43【例5-8】(续)printf("最高分\t");/*求每门课程的最高分*/for(j=1;j<=5;j++){max=a[0][j];for(i=1;i<NUM;i++)if(a[i][j]>max) max=a[i][j];printf("%d\t",max);}printf("\n");}第四十四页,编辑于星期六:五点三十六分。44【例5-8】(续)程序运行情况如下:请按行输入数据,数据之间用空格分开:100187757266
100298859283
100367785376
100448607667
学号高数物理英语计算机平均分10018775726675100298859283901003677853766910044860766763最高分9885928390第四十五页,编辑于星期六:五点三十六分。455.3.5二维数组作函数参数用二维数组名作实参时,与之相对应的形参也应该定义为一个二维数组形式。在被调函数中对形参数组定义时可以指定每一维的大小,也可以省略第一维大小的说明。例如:定义形参intarray[3][10]与intarray[][10]等价。而定义形参intarray[][]不合法。由于实参数组的首地址和形参数组的首地址相同,因此,实参数组和形参数组实际上是同一个数组,它们在内存中占据同一段存储空间。第四十六页,编辑于星期六:五点三十六分。465.3.5二维数组作函数参数(续)【例5-9】修改例5-8的程序,定义两个函数分别实现如下功能:(1)统计每个学生的平均分。(2)统计每门课程的最高分。程序如下:#defineNUM4#include"stdio.h"voidaver(intb[][6]);voidmaxa(intb[][6],intmax[6]);voidmain()第四十七页,编辑于星期六:五点三十六分。47【例5-9】(续){inta[NUM][6],i,j,max[6];printf("请按行输入数据,数据之间用空格分开:\n");for(i=0;i<NUM;i++)for(j=0;j<5;j++) scanf("%d",&a[i][j]);aver(a);/*求每人的平均分*/printf("\n学号\t高数\t物理\t英语\t计算机\t平均分\n");
第四十八页,编辑于星期六:五点三十六分。48【例5-9】(续)
for(i=0;i<NUM;i++){for(j=0;j<=5;j++) printf("%d\t",a[i][j]); printf("\n");}maxa(a,max);/*求每门课程的最高分*/printf("\n最高分\t");for(j=1;j<=5;j++) printf("%d\t",max[j]);printf("\n");}第四十九页,编辑于星期六:五点三十六分。49【例5-9】(续)voidaver(intb[][6]){inti,j,sum;for(i=0;i<NUM;i++){sum=0; for(j=1;j<5;j++)sum=sum+b[i][j];/*求某一学生的总成绩*/b[i][5]=(int)(sum/4.0+0.5);/*求某一学生的平均成绩*/}}第五十页,编辑于星期六:五点三十六分。50【例5-9】(续)voidmaxa(intb[][6],intmax[6]){inti,j;for(j=1;j<=5;j++){max[j]=b[0][j];for(i=1;i<NUM;i++)if(b[i][j]>max[j]) max[j]=b[i][j];}}第五十一页,编辑于星期六:五点三十六分。515.3.5二维数组作函数参数(续)【例5-10】编程序,将矩阵转置。设转置前为a矩阵,转置后为b矩阵,如下所示:
思路:矩阵转置就是将一个二维数组的行和列元素互换。将a[0][0]
b[0][0],a[0][1]
b[1][0],a[0][2]
b[2][0],a[1][0]
b[0][1],…,a[i][j]
b[j][i],…。a=123456789101112159261037114812b=第五十二页,编辑于星期六:五点三十六分。52程序如下:voidturn(intarra[][4],intarrb[][3]);/*函数声明*/#include"stdio.h"voidmain(){inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};inti,j,b[4][3];printf("转置前的矩阵:\n");for(i=0;i<3;i++) /*输出转置前的矩阵*/{for(j=0;j<4;j++)printf("%5d",a[i][j]);printf("\n");}第五十三页,编辑于星期六:五点三十六分。53【例5-10】(续)turn(a,b); /*调用函数完成转置*/printf("转置后的矩阵:\n");for(i=0;i<4;i++) /*输出转置后的矩阵*/{for(j=0;j<3;j++)printf("%5d",b[i][j]);printf("\n");}printf("\n");}第五十四页,编辑于星期六:五点三十六分。54【例5-10】(续)/*矩阵转置函数*/voidturn(intarra[][4],intarrb[][3])/*arra、arrb分别接收数组a、b的首地址*/{intr,c;for(r=0;r<3;r++)/*矩阵转置*/for(c=0;c<4;c++)arrb[c][r]=arra[r][c];}第五十五页,编辑于星期六:五点三十六分。55【例5-10】(续)程序输出结果:转置前的矩阵:
123456789101112转置后的矩阵:
159261037114812第五十六页,编辑于星期六:五点三十六分。565.4字符数组与字符串字符数组可以存放若干个字符,也可以存放字符串。字符数组与字符串的概念China\0字符串字符串的末尾必须有’\0’字符,’\0’的ASCII值为0。China不是字符串是字符串第五十七页,编辑于星期六:五点三十六分。57再例如:chara[3][5];a数组是一个二维的字符数组,可以存放15个字符或3个长度不大于4的字符串。5.4.2字符数组的定义
例如:chars[10];s数组是一维字符数组,它可以存放10个字符或一个长度不大于9的字符串。注意:字符串只能存放在字符数组中。第五十八页,编辑于星期六:五点三十六分。585.4.3字符数组的初始化China1.用字符常量赋初值例如:charc[5]={'C','h','i','n','a'};再例如:charc[6]={'C','h','i','n','a','\0'};China\0是字符串不是字符串第五十九页,编辑于星期六:五点三十六分。595.4.3字符数组的初始化(续)再例如:chara[3][10]={"basic","pascal","c"};astring\0\02.用字符串常量赋初值例如:charstr[10]={"astring"};或charstr[10]="astring";basic\0\0\0\0\0pascal\0\0\0\0c\0\0\0\0\0\0\0\0\0是字符串吗?第六十页,编辑于星期六:五点三十六分。605.4.3字符数组的初始化(续)例如:chars3[7]={'s','t','r','i','n','g'};Goodmorning!\03.初始化时长度的省略例如:chars1[]="Goodmorning!";s1[0]s1[13]例如:chars2[]={'s','t','r','i','n','g'};stringstring\0思考:哪个数组存放的是字符串?第六十一页,编辑于星期六:五点三十六分。615.4.4字符数组的引用
【例5-11】对字符数组c1赋‘0’~‘9’,对字符数组c2赋‘A’~‘Z’,然后输出c1和c2数组中的数据。程序如下:#include"stdio.h"voidmain()
1.对字符数组元素的引用第六十二页,编辑于星期六:五点三十六分。62程序如下:{charc1[10],c2[26];inti;
for(i=0;i<10;i++)c1[i]=i+48;
/*'0'~'9'的ASCII码值赋给c1[i]*/
for(i=0;i<26;i++)c2[i]=i+'A';
/*'A'~'Z'的ASCII码值赋给c2[i]*/
for(i=0;i<10;i++)printf("%c",c1[i]);printf("\n");for(i=0;i<26;i++)printf("%c",c2[i]);printf("\n");}第六十三页,编辑于星期六:五点三十六分。632.对字符数组的整体引用⑴输出字符串例如:charc[]="China";printf("%s",c);输出结果为:ChinaC是数组首地址第六十四页,编辑于星期六:五点三十六分。642.对字符数组的整体引用(续)⑵输入字符串例如:charc[10];scanf("%s",c);输入:beijing
beijing\0c第六十五页,编辑于星期六:五点三十六分。65再例如:charstr1[10],str2[10],str3[10];scanf("%s%s%s",str1,str2,str3);输入:pascalbasicc
注意:不可以为数组整体赋值,例如:
charc[10];c="beijing"
;因为c是数组首地址,是常量!三个字符串用空格隔开,分别赋给str1、str2、str3三个数组。
2.对字符数组的整体引用(续)第六十六页,编辑于星期六:五点三十六分。665.4.5字符串处理函数说明:(1)在调用以下字符串处理函数的程序里,在程序的前面要加入#include"stdio.h"或#include"string.h"预处理命令。(2)在字符串处理函数中,凡是用数组名或字符串首地址作参数的地方,都可以用指针变量作参数。指针变量的概念在第6章介绍。第六十七页,编辑于星期六:五点三十六分。671.字符串输出函数puts()调用格式:puts(str)功能:输出一个字符串,输出后自动换行。说明:str可以是字符数组名或字符串常量。例如:charstr1[]="China";charstr2[]="Beijing";puts(str1);puts(str2);输出结果:ChinaBeijing第六十八页,编辑于星期六:五点三十六分。682.字符串输入函数gets()调用格式:gets(str)功能:从键盘读入一个字符串存入str数组中,并且得到一个函数值,该函数值是str数组的首地址。说明:str是数组名。程序运行情况如下:Howareyou?
Finethankyou.
Howareyou?Finethankyou.
例如:main(){charc1[20],c2[20];gets(c1);gets(c2);puts(c1);puts(c2);}第六十九页,编辑于星期六:五点三十六分。693.字符串连接函数strcat()调用格式:strcat(str1,str2)功能:把str2中的字符串连接到str1字符串的后面,结果放在str1数组中.函数值:str1的首地址。beijingandshanghai\0str1必须足够大输出结果:beijingandshanghai例如:charstr1[21]="beijingand";charstr2[]="shanghai";printf("%s",strcat(str1,str2));第七十页,编辑于星期六:五点三十六分。704.字符串复制函数strcpy()调用格式:strcpy(str1,str2)功能:将str2中的字符串复制到str1数组中。函数值:
str1的首地址。Beijing\0s1必须足够大思考:这样赋值s1="Beijing";或s1=s2;可以吗?为什么?s1的结果例如:chars1[10],s2[]="Beijing";strcpy(s1,s2);或:strcpy(s1,"Beijing");第七十一页,编辑于星期六:五点三十六分。715.字符串比较函数strcmp()
调用格式:strcmp(str1,str2)abcde\0str1abcde\0str2abc\0
abcde\0abcd\0
Abcde\0str1str2str1str2strcmp(str1,str2)==0strcmp(str1,str2)>0strcmp(str1,str2)<0第七十二页,编辑于星期六:五点三十六分。72例如:比较两个字符串的大小。main(){chars1[]="aBC",s2[]="abc";if(strcmp(s1,s2)==0)printf("s1=s2");elseif(strcmp(s1,s2)>0)printf("s1>s2");elseprintf("s1<s2");}程序输出结果:s1<s2思考:若有语句if(s1>s2)printf("s1>s2");比较的是什么?第七十三页,编辑于星期六:五点三十六分。736.测试字符串长度函数strlen()调用格式:strlen(str)功能:测试字符串长度。函数值:str数组中字符的个数(不包括’\0’)。思考:"China和str1[10]在内存中各占几个字节?输出结果:5例如:charstr1[10]="China";printf("%d",strlen(str1));第七十四页,编辑于星期六:五点三十六分。747.大写字母转换成小写字母函数strlwr()
调用格式:strlwr(str)功能:将str字符串中的大写字母转换成小写字母。
输出结果:microsoftword输出结果:abcd例
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 脱位病人的中医护理
- 色釉料项目可行性研究报告
- 年产xx指甲钳项目建议书
- 新建高速中央报警接收机项目立项申请报告
- 新建不锈钢足球项目立项申请报告
- 年产xx分配器项目建议书
- 2023年SDH光纤传输系统资金筹措计划书
- 小儿急性白血病护理
- 大班美术活动教案:线描画
- 大班幼儿体育教案:转身接物
- 纽约泪珠公园(R)
- 机器时代-“探索者”机械创新套件说明(高级版A32)
- 关于徐州市建设质子和重离子肿瘤医院的建议书
- 公安派出所建筑外观形象设计规范1
- 分管教学副校长在期中质量分析会上的发言教学文稿
- AI表面质量检测系统产品介绍PPT课件
- 各国黄铜牌号及标准规定对照表
- 预缴税款的申报表(doc 2页)
- 餐饮服务单位(食堂)餐厨废弃物(泔水)处理记录台账
- 七年级上学期数学难题难度训练含答案解析
- 食用菌栽培教案(60课时)
评论
0/150
提交评论