版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章数组信息工程学院主讲人:XXX内容提要41一维数组的定义和引用12二维数组的定义和引用423字符数组42数组的应用42524445.1一维数组的定义和引用一维数组的定义数组中的每个元素只带有一个下标时,这样的数组称为一维数组。
定义格式如下:数据类型说明符数组名[常量表达式];例如:inta[8];它表示定义了一个整型数组,数组名为a,数组中有8个元素。说明如下:(1)数据类型说明符用来说明数组的类型,即数组中元素值的类型,可以是整型、符点型,或是其它的数据类型,本例中数据类型说明符表明数组a中8个元素的数据类型是整型。(2)数组名的命名规则遵循标识符的命名规则,和变量名的命名规则相同。(3)在定义数组时,需要指定数组元素的个数,其中方括号中的内容只能是整型常量或整型常量表达式,方括号中的值指定数组元素的个数。(4)数组名不能与其它变量名相同。5.1一维数组的定义和引用一维数组的引用数组元素引用的格式:数组名[下标]其中,“下标”是个整型表达式。如x[0],x[j],x[i+k]都是对数组元素的合法引用。但数组下标表达式的值必须大于等于0,并且小于等于数组上界的值。另外一个数组元素就是一个变量名,代表内存中一个存储单元。【例5.1】对数组元素的引用#include<stdio.h>voidmain(){inti,a[8];for(i=0;i<=7;i++)a[i]=i;for(i=7;i>=0;i--)printf("%d",a[i]);}运行结果:5.1一维数组的定义和引用一维数组的初始化定义数组时给数组元素赋值就是一维数组的初始化。格式如下:数据类型说明符数组名[数组长度]={值1,值2,值3,......,值n};例如:inta[8]={0,1,2,3,4,5,6,7};(1)所赋的值放在等号后的一对花括号中,数值类型必须与所说明的数据类型一致,所赋值之间用逗号隔开,系统会按赋值顺序自动进行分配。(2)当在赋值时花括号中的值的个数少于赋值元素的个数时,将自动给后面的元素赋值0。5.1一维数组的定义和引用一维数组的初始化(3)可以通过赋初值来指定数组的大小,这时数组名后的一对方括号中可以不指定数组的大小,但方括号不能省略。例如:inta[5]={1,1,1,1,1};可以写成inta[]={1,1,1,1,1};(4)数组初始化时,初始值的个数不能大于数组元素的个数,否则会出现错误。例如:inta[5]={1,1,1,1,1,1,1,1};//这是错误的(5)数组元素只能逐个赋值,不能对数组整体赋值。5.1一维数组的定义和引用【例5.3】编写一个程序,通过键盘给数组a中的5个元素赋初值。#include<stdio.h>voidmain(){inta[5];inti;for(i=0;i<5;i++){scanf("%d",&a[i]);printf("a[%d]=%d",i,a[i]);}}运行结果:一维数组程序举例5.1一维数组的定义和引用【例5.4】用数组求Fibonacci数例的前20项(1,1,2,3,5,8,13,21,.....)。#include<stdio.h>voidmain(){inti;intf[20]={1,1};//定义并初始化一维数组,使f[0]=1,f[1]=1,其余元素为0for(i=2;i<20;i++)f[i]=f[i-2]+f[i-1];//数例中的每i项等于i-2项加上i-1项的和for(i=0;i<20;i++){if(i%5==0)printf("\n");printf("%8d",f[i]);}printf("\n");}运行结果:一维数组程序举例5.1一维数组的定义和引用【例5.5】输入5个整数,输出其中的最大值和最小值。#include<stdio.h>voidmain(){intmax,min,a[5],i;printf("请输入5个数:\n");for(i=0;i<5;i++)scanf("%d,",&a[i]);max=min=a[0];for(i=0;i<5;i++){if(a[i]>max)max=a[i];if(a[i]<min)min=a[i];}printf("最大值max=%d\n",max);printf("最小值min=%d\n",min);}运行结果:一维数组程序举例5.2二维数组的定义和引用二维数组的定义数组中的每个元素有两个下标时,这样的数组称为二维数组。定义格式如下:数据类型说明符数组名[常量表达式1][常量表达式2];其中两个方括号中的常量表达式只能是正整数。如果将二维数组看做表格,那么常量表达式1就代表行数,常量表达式二就代表列数。例如:inta[3][4];说明如下:(1)定义了一个数组名为a的二维数组。(2)数组中的每个元素都是整型变量。(3)数组a中共有3×4=12(3行4列)个元素。(4)数组a的逻辑结构是一个具有3行4列的矩阵。5.2二维数组的定义和引用二维数组的引用二维数组元素引用的格式:数组名[下标1][下标2]其中,第1个下标表示行下标,第2个下标表示列下标,通过行下标和列下标确定数组元素在二维数组中的位置。例如:inta[3][4];说明如下:(1)引用二维数组元素时,要把二维数组的下标分别放在两个方括号内。不可以把a[0][1]写成a[0,1]。(2)二维数组元素的下标值应该在已经定义的数组大小的范围之内。(3)二维数组名a表示二维数组的首地址。(4)二维数组元素可以参加表达式运算,也可以赋值。5.2二维数组的定义和引用【例5.7】二维数组元素的使用。程序如下:#include<stdio.h>voidmain(){inta[2][3];inti,j;for(i=0;i<2;i++)for(j=0;j<3;j++)scanf(“%d”,&a[i][j]);for(i=0;i<2;i++){for(j=0;j<3;j++)printf(“%3d”,a[i][j]);printf(“\n”);}}运行结果:二维数组的引用举例5.2二维数组的定义和引用二维数组的初始化同一维数组一样,C语言允许在定义二维数组时对二维数组进行初始化,对二维数组初始化可以通过下面的方式实现。(1)通过分行赋初值给二维数组,所赋值的个数与二维数组元素的个数相同。如:inta[4][3]={{1,2,3},{4,5,6},{7,8,9},{10,11,12}};(2)通过分行赋初值给二维数组,所赋值的个数与二维数组元素的个数不相同。(3)对二维数组赋初值时可以省略内花括号对。(4)对全部数组元素赋初值时,可以省略第一个方括号中的常量表达式,不能省略第二个方括号中的常量表达式,即第一维的长度可以不指定,但第二维的长度不能省略。5.2二维数组的定义和引用5.2.4二维数组的程序举例【例5.8】将二维数组的行列元素互换,存到另外一个二维数组中。例如:析如下:(1)通过外层循环控制行,让变量i依次等于0,1,.....,行长度-1。(2)通过内层循环控制列,让变量j依次等于0,1,.....,列长度-1。(3)内层循环的循环体为:将a[i][j]的值赋给b[j][i]。二维数组程序举例5.2二维数组的定义和引用程序如下:#include<stdio.h>voidmain(){inta[2][3]={{1,2,3},{4,5,6}};intb[3][2],i,j;printf(“数组a:\n”);for(i=0;i<=1;i++){for(j=0;j<=2;j++){printf(“%5d”,a[i][j]);b[j][i]=a[i][j];}printf(“\n”);}printf(“数组b:\n”);for(i=0;i<=2;i++){for(j=0;j<=1;j++)printf(“%5d”,b[i][j]);printf(“\n”);}}二维数组程序举例运行结果:5.2二维数组的定义和引用【例5.9】通过键盘输入3行4列的数组元素,求出数组中的最大值及所在行、列的下标。#include<stdio.h>voidmain(){inta[3][4],max,row,col,i,j;for(i=0;i<3;i++)for(j=0;j<4;j++)scanf(“%d”,&a[i][j]);max=a[0][0];row=col=0;for(i=0;i<3;i++)for(j=0;j<4;j++)if(max<a[i][j]){max=a[i][j];row=i;col=j;}printf(“max=a[%d][%d]=%d\n”,row,col,max);}运行结果:二维数组程序举例5.3二维数组的定义和引用二维数组的定义数组中的每个元素有两个下标时,这样的数组称为二维数组。定义格式如下:数据类型说明符数组名[常量表达式1][常量表达式2];其中两个方括号中的常量表达式只能是正整数。如果将二维数组看做表格,那么常量表达式1就代表行数,常量表达式二就代表列数。例如:inta[3][4];说明如下:(1)定义了一个数组名为a的二维数组。(2)数组中的每个元素都是整型变量。(3)数组a中共有3×4=12(3行4列)个元素。(4)数组a的逻辑结构是一个具有3行4列的矩阵。5.3字符数组字符数组的定义
字符数组是用来存放字符数据的数组。字符数组的每一个元素中存放一个字符。字符数组的定义格式同前面介绍的数值型数组方法类似,例如:charc[8];说明如下:(1)它表示定义了一个字符型数组,数组名为a,数组有8个元素,它们都为字符型数据。(2)由于字符型和整型是相互通用的,所以上面的定义也可以写成:intc[8];只是char型占用1个字节,int型占用4个字节,这样容易造成空间浪费。(3)二维字符数组的定义同前,不再赘述。5.3字符数组字符数组的初始化字符数组允许在定义时对其进行初始化,一维数组的初始化有以下几种方式:(1)用字符常量对字符数组初始化charc[8]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’,‘\0’};赋值后各元素如图5-11所示。5.3字符数组字符数组的初始化(2)用字符串对字符数组初始化
通过字符串(C语言规定用“”括起来的多个字符叫字符串)给字符数组赋值时,编译系统会自动在字符串尾部加字符串结束标志‘\0’。‘\0’在字符数组中也占一个元素的空间,因些,在声明字符串长度时要预留出结束标志的空间。例如:charc[6]={“Happy”};charc[6]=“Happy”;charc[]=“Happy”;charc[6]={‘H,‘a’,‘p’,‘p’,‘y’,‘\0’};charc[]={‘H,‘a’,‘p’,‘p’,‘y’,‘\0’};charc[6]={‘H,‘a’,‘p’,‘p’,‘y’};
上面的语句都是定义字符数组c,数组的长度都为6;字符数组的值为字符串Happy,字符串本身的长度为5。5.3字符数组字符数组的引用可以通过引用字符数组中的一个元素得到一个字符,字符数组的引用和前面一维数组和二维数组类似。【例5.10】通过字符数组输出一个字符串。#include<stdio.h>voidmain(){charc[14]={‘I’,‘’,‘a’,‘m’,‘’,‘a’,‘’,‘s’,‘t’,‘u’,‘d’,‘e’,‘n’,‘t’};inti;for(i=0;i<14;i++)printf(“%c”,c[i]);printf(“\n”);}运行结果:5.3字符数组字符数组的引用【例5.11】通过字符数组输出一个菱形。#include<stdio.h>voidmain(){chara[][5]={{'','','*'},{'','*','','*'},{'*','','','','*'},{'','*','','*'},{'','','*'}};inti,j;for(i=0;i<5;i++){for(j=0;j<5;j++)printf("%c",a[i][j]);printf("\n");}}运行结果:5.3字符数组字符串处理函数1、puts函数其一般形式:puts(字符数组)该函数的作用是将一个字符串(以‘\0’为结束标志的字符序列)输出。2、gets函数其一般形式:gets(字符数组)该函数的作用是从键盘上输入一个字符串给字符数组,然后得到一个函数值。该函数的值是字符数组的地址。5.3字符数组字符串处理函数3、strcat函数其一般形式:strcat(字符数组1,字符串2)该函数的作用是把两个字符数组中的字符串连接起来,把字符串2连接到字符串1的后面,并删除字符串1后面的结束标志符‘\0’,最后把链接后的结果存放在字符数组1中。4、strcpy函数其一般形式:strcpy(字符数组1,字符串2)该函数是字符串复制函数,作用是将字符串2复制到字符数组1中。字符串复制起到字符串赋值运算的功能。5.3字符数组字符串处理函数7、strlwr函数其一般形式:Strlwr(字符数组)该函数的作用是将字符串中的大写字母转换成小写字母。函数的实际参数只能是字符数组,不能是字符串。8、strupr函数其一般形式:strupr(字符数组)该函数的作用是将字符串中的小写字母转换成大写字母。函数的实际参数只能是字符数组,不能是字符串。5.3字符数组字符串处理函数5、字符串比较函数strcmp其一般形式:strcmp(字符串1,字符串2)该函数的作用是比较字符串1和字符串2。6、strlen函数其一般形式:strlen(字符数组)该函数的作用是返回字符串的长度(不包括字符串结束标志符‘\0’),返回的是字符串的实际长度,和字符数组的长度有区别。5.3字符数组【例5.12】从键盘输入一个英文句子(一行字符),统计有多少个单词,单词之间用空格分隔。#include<stdio.h>voidmain(){charstr[255];inti,num=0;gets(str);if(str[0]!='')num=1;for(i=0;(str[i]);i++)if(str[i]==''&&str[i+1]!='')num++;printf("Thereare%dwordsintheline.\n",num);}运行结果:字符数组应用举例5.3字符数组【例5.13】通过键盘输入三个英文单词,输出其中最大的单词。#include<stdio.h>#include<string.h>voidmain(){chars1[20],s2[20],s3[20],max[20];gets
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年外科护理学二试题及答案
- 2025年护理权利试题及答案
- 2025年2024护理中级试题及答案
- (2025年)采购管理复习重点考点试题带答案
- 育婴员中级模拟考试题(含参考答案)
- 《一级建造师之一建民航机场工程实务》资格考试50题真题附参考答案
- 电子乐器相关法律法规与知识产权考核试卷(附答案)
- 病历书写考核试题(附答案)
- 综合解析人教版八年级物理《运动和力》综合练习试题
- 旅游业务回顾及前瞻
- 塞尔达玩家测试题及答案
- 2025-2030中国单反数码相机市场现状深度剖析及需求预测研究报告
- 施工质量检查制度
- 2025年粮油集团笔试试题及答案
- 个人成长目标设定与实现路径
- 化学发展史课件
- 尿路感染的护理常规
- 应急计划评审表
- 配电房岗位职责
- 2024-2025华为ICT大赛(实践赛)-网络赛道理论考试题库大全-上(单选题)
- 应急第一响应人理论考试试卷(含答案)
评论
0/150
提交评论