ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:380.82KB ,
资源ID:11000131      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11000131.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第6章数组.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第6章数组.docx

1、第6章 数组第6章 数组6.1 一维数组【学习目标】(1)掌握数组的概念和应用范围(2)掌握一维数组的定义和数组元素的引用(3)掌握一维数组的初始化的方法实例19 一维数组的定义与引用平均成绩的统计【实例任务】现从键盘上输入5位同学的成绩,要求求其平均成绩,运行结果如图6-1所示 图6-1 程序运行结果【程序代码】#include stdio.hmain( ) float score6; /* 定义单精度数组score,有6个元素 */ int i; for(i=0;i5;i+) printf(请输入第%d个同学的成绩:,i+1); /* 提示输入5个人的成绩 */ scanf(%f,&sco

2、rei); score5=0; /* score5中放平均成绩,所以先清0 */ for(i=0;i5;i+) score5+=scorei; /* 求成绩之和 */ score5/=5; /* 求平均成绩 */ printf(平均成绩是:%.2f,score5); getch(); 【相关知识】1 数组的概念将一组排列有序的、个数有限的变量作为一个整体,用一个统一的名字来表示,则这些有序变量的全体称为数组。或者说,数组是用一个名字代表顺序排列的一组元素,顺序号就是下标变量的值。而简单变量是没有序的,无所谓谁先谁后,数组中的单元是有排列顺序的。在同一数组中,构成该数组的成员称为数组单元或叫数组

3、元素。数组里面的每一个数据用数组单元名来标识。在C语言中,引用数组中的某一单元,要指出数组名和用括号括起来的数组单元在数组中的位置(顺序号)的下标。因此,数组单元又称“带下标的变量”,简称“下标变量”。例如:score5中,score是数组名。该数组可以存放5个成绩,分别用下标变量表示:score0,score1,score4。数组的主要优点在于其组织数据的方式可以使数据易于处理,也有利于数据的存储。2数组的维数数组下标的个数称为数组是数组的维数。具有一个下标的数组是一维数组,相应有两个下标的数组为二维数组,依次类推。一般来讲,数组元素下标的个数就是该数组的维数;反之,一个数组的维数一旦确定,

4、那么它的元素下标的个数也就随之确定了。例如: score5 为一维数组3一维数组的定义(1)定义一维数组的格式定义一维数组的格式为:类型标识符 数组名常量表达式 , ; 例如:float score6;定义一个数组,数组名为score,有6个元素,每个元素的类型均为float。这6个元素分别是:score0、score1、score2、score3、score4、score5。注意,下标从0开始,不能使用数组元素score6。C编译程序在编译时为score数组分配了6个连续的存储单元,每个单元占用四个字节,其存储情况如图6-2所示。score0 score1 score2 score3 sco

5、re4 score5 图6-2 数组元素的存储情况(2)对一维数组的使用有以下几点说明定义一个数组,数组名是标识符,命名规则同标识符命名规则。数组的类型,即数组元素的类型,可以是基本类型(整型、实型和字符型等),也可以是指针类型、结构体类型或共用体类型。定义数组时,必须使用下标常量表达式,表示数组中有多少个元素,即数组的长度。它可以是常量或符号常量,但是不能是变量。例如,下面写法是错误的。int n;scanf(%d,&n) ;int an ;同理,以下数组定义是不正确的:int array(10); int n; float scoren; double ba. d; char str ;

6、如果定义多个相同类型的数组,则可以使用逗号隔开。例如:int a10,b20;C编译器在进行编译时,为数组连续分配地址空间,分配空间的大小为:数组元素占用字节数数组长度。4. 一维数组的引用使用数组必须先定义,后引用。C语言规定,不能引用整个数组,只能逐个引用元素。元素引用方式为:数组名下标下标可以是整型常量或整型表达式,例如:a3=a2+a3*2;在本例子中如果已经定义好数组float score6 后,对其进行引用,可以引用score0,score1,score2,score3,score4,score5六个数组中的元素。在引用时应注意以下几点:(1)由于数组元素本身等价于同一类型的一个变

7、量,它的使用与同类型的普通变量是相同的。(2)在引用数组元素时,下标可以是整型常数或表达式,表达式内允许变量存在。引用数组时,下标从0开始(下界为0),数组的最大下标(上界)是数组长度减1。下标的取值范围是0,数组长度-1的整型值。(3)对于一维数组来说,在C语言中不能引用整个数组,只能引用单个数组元素。(4)数组名后方括号内是数组下标,下标表示该元素是数组的第几个元素。数组名后面的方括号内的内容只有在数组定义时才是数组的长度,其他时候都是数组下标。 是下标运算符,引用数组元素时,根据数组的首地址和下标数,计算出该元素的实际地址,取出该地址的内容进行操作。在本例题中,如果要引用 score2元

8、素的值,其步骤分为首先计算2000+2*4=2008;其次取出2008的内容。5数组元素的地址数组元素的地址:数组元素的地址也可用元素前面加取地址运算符的方式来获得,形式如下:&数组名下标实例20 一维数组的初始化与引用查询数据中的最大值【实例任务】从键盘上输入10个整型数据,找出其中的最大值并显示出来。运行结果如图6-3所示。图6-3 运行结果【程序代码】#include stdio.hmain( ) int a10,max,i ; /*定义数组a中有10个元素,最大值max,变量i*/ for(i=0;i10;i+) scanf(%d,&ai); /*从键盘上输入10个整型数据*/ max

9、=a0; /*假设最大值为第一个元素*/ for(i=1;i10;i+) if(maxai) max=ai ; /*经过比较,可能会推翻最初的假设*/ printf(max=%d,max); /*输出最大值*/ getch(); 【相关知识】1 一维数组的初始化数组的初始化是指在定义数组时给全部数组元素或部分数组元素赋值。一维数组初始化的形式为:存储类型 数据类型 数组名数组长度=初值列表;内的各个初值之间用逗号分隔,数值类型必须与数组类型一致。系统将按初值的排列顺序,顺次给数组元素赋值。如下面定义语句:int a10= 78,98,67,87,-56,-67,67,0,-98,67 ;cha

10、r c5=c, h, i, n, a ; 当中所列初值的数量必须小于等于数组长度。当初值数量小于数组长度时,数值型数组的后面没有初值的元素由系统自动赋值为0。例如:对a数组中所有元素赋初值0。可以写为int a 10=0 ; 又如:对数值元素a0赋初值0,对a1赋初值1,其他元素均赋初值0。可以写为int a 10=0,1再如:char c5=0 ;等价于char c5=0, 0 , 0, 0 , 0 ;2. 数组大小的指定可以通过赋初值定义数组的大小。在对全部数组元素赋初值时,可以不指定数组的长度,系统会自动计算长度。例如:int a =1, 2, 3, 4, 5 ; 等价于 int a5=

11、1, 2, 3, 4, 5 ;又如:int a =0, 0, 0, 0, 0 ;等价于 int a5=0 ;【课堂精练】1. 从键盘上输入10个整型数据,将其逆序输出。运行结果如图6-4所示。 图6-4 程序运行结果根据程序运行结果,请将下面程序补充完整并调试。#include stdio.hmain() int i,a10; printf( 请输入10个整数:n);for (i=0;i=0;i-) _ /*引用数组元素输出*/ printf(n); getch(); 2请输入10个数,找出最大值和最小值所在的位置,并把两者对调,然后输出调整后的10个数。程序的运行结果如图6-5所示。 图6-

12、5 程序运行结果根据程序的运行结果,将下面程序补充完整。#include stdio.h main( ) int a10,max,min,i,j,k;printf(请输入各个数组元素的值:); for (i=0;i10;i+)scanf(%d,&ai);printf(互换前的各数组元素的值为:n);for(i=0;i10;i+)printf(%5d,ai); max=min=a0;/*先假设a0是最大值,也是最小值,后面验证可能会推翻假设*/for(i=0;i10;i+) if(aimin) min=ai; k=i; /*变量k记录最小值的下标号*/_ max=ai; j=i; /*j记录最大

13、值的下标号*/ aj=min; /*最大值和最小值互换*/_ printf(n互换后的各数组元素的值为:n);for(i=0; i10; i+)printf(%5d,ai);getch(); 6.2 二维数组【学习目标】(1)掌握二维数组的定义和数组元素的引用方法(2)掌握二维数组的初始化方法实例21 二维数组的定义与引用-统计总成绩及平均成绩【实例任务】从键盘上任意输入某班n个学生的三门课程的成绩,计算每个学生的平均成绩、计算每门课程的平均成绩,并且打印成绩单,输出三门课程成绩的平均分及课程的平均分。运行结果如图6-6所示。 图6-6 程序运行结果【程序代码】#include stdio.h

14、#define N 40main() float ave3,scoreN4,sum; int i,j,n; printf(请输入学生的人数:); scanf(%d, &n); printf(请输入这些学生的三门成绩:); for(i=0;in;i+) printf(请输入第%d个学生的3门成绩:,i+1); for(j=0;j3;j+) scanf(%f, &scoreij); for(i=0;in;i+) /*计算每个学生的平均成绩*/ sum=0; for(j=0;j3;j+) sum=sum+scoreij; scorei3= sum/3; for(j=0;j3;j+) /*计算每门课的

15、平均成绩*/ sum=0; for(i=0;in;i+) sum=sum+scoreij; avej= sum/n; /*打印成绩单*/ printf(序号 课程1 课程2 课程3 平均成绩 n); /*输出表头*/ for(i=0;in;i+) printf(%-10d,i+1); /*左对齐,输出学生编号*/ /*输出3科成绩平均分*/ for(j=0;j4;j+) printf(%-9.1f, scoreij); /*左对齐输出*/ printf(n); /*输出课程平均分*/ printf(平均成绩 ); /*一个汉字占两个字符的位置,后面添加2个空格*/ for (j = 0; j

16、3; j+) printf(%-9.1f, avej); /*左对齐输出*/ getch(); 【相关知识】1二维数组的定义定义二维数组的一般格式为:类型标识符 数组名常量表达式1常量表达式2 ; 在二维数组的定义中,数组名后面紧跟两个方括号括起来两个下标。常量表达式1的值指明了二维数组的行数,常量表达式2的值指明了二维数组的列数。行下标值和列下标值的乘积,是数组元素的个数。例如:float score404;定义了一个实型二维数组score,共有40*4=160个元素,可以称为40行4列的数组。对于以上定义的数组有以下几点说明,这些说明同样适合其他二维数组。(1)二维数组中每个数组元素必须有

17、两个下标,常量表达式的值即为下标的值,与一维数组要求一样,其下标只能是正整数,并且从0开始。(2)二维数组可看作是一种特殊的一维数组。可以将二维数组元素排列成一个矩阵,用二维数组的第1个下标表示数组元素所在的行,第2个下标表示所在的列,二维数组只是在逻辑上是二维的,从存储上看,二维数组仍是一维线性空间。C语言中,按照行优先方式存储二维数组,即先存放第0行的元素,再存放第1行的元素;同一行中再按列顺序存放。例如:float score404;可以把score数组看作是包含二个元素的一维数组,每个元素又是一个含有四个元素一维数组。按行形式排列数组元素的表示如下:第0列 第1列 第2列 第3列 sc

18、ore0 score00 score01 score02 score 03 score1 score10 score11 score12 score 13 score2 score20 score21 score22 score 23 score39 score390 score391 score392 score393 2二维数组元素的引用C语言规定,不能引用整个数组,只能逐个引用元素。二维数组中各个元素可看作具有相同数据类型的一组变量。因此,对变量的引用及一切操作,同样适用于二维数组元素。二维数组元素引用的格式为:数组名行下标表达式列下标表达式说明:(1)下标可以是整型常量或整型表达式。第

19、一维下标的取值范围是0,第一维长度-1, 第二维下标的取值范围是0,第二维长度-1。(2)二维数组的引用和一维数组的引用类似,要注意下标取值不要超过数组的范围。例如,下面的语句均是正确的二维数组引用格式。int a34;a00=3;a01=a00+10;ai-1i=i+j;a01=a00;a02=a01%(int)(x);a20+;scanf (%d , &21);printf (%d , a21);而下面两种引用是错误的。a34=3; /* 下标越界 */a1,2=1; /* 应写成 a12=1; */实例22 二维数组的初始化与引用求矩阵的乘积【实例任务】编写程序求一个M行N列的矩阵和一个

20、N行W列的矩阵的乘积。运行结果如图6-7所示。 图6-7 程序运行结果【程序代码】#include stdio.h#define M 4#define N 5#define W 4main( )int aMN,bNW,cMW,i,j,k; printf(please enter array a(%d*%d):n,M,N); for(i=0;iM;i+) /*输入第一个矩阵*/ for(j=0;jN;j+) scanf(%d,&aij); printf(please enter array b(%d*%d):n ,N,W);for(i=0;iN;i+) /*输入第二个矩阵*/ for(j=0;j

21、W;j+) scanf(%d,&bij); for(i=0;iM;i+) /*两个矩阵相乘,求乘积矩阵中的每一元素*/ for(j=0;jW;j+) cij=0; for(k=0;kN;k+) cij+=aik*bkj; printf(c=a*b:n); for(i=0;iM;i+) for(j=0;jW;j+) printf(%6d,cij); /*按行输出乘积矩阵*/ printf(n); getch(); 【相关知识】1二维数组的初始化定义之后进行数组的初始化操作,则只能对每个数组元素一一赋值。int arr410,i,j;for(i=0;i4;i+) for(j=0;j10;j+) a

22、rrij=0;2赋值格式如果在定义数组时完成数组的初始化操作,赋值格式有三种。(1)将数组元素的初值依次放在一对中并用赋值号与数组连接。具体格式为:存储类型 数据类型 数组名数组长度=初值列表;例如int a23=1,2,3,4,5,6;(2)内各个初值之间用逗号分隔,初值类型必须与数组类型一致。系统自动按数组元素在内存的顺序将初值依次赋给相应的元素。若数值型数组的初值数量不足时,将0赋给其余数组元素,有定义如下:int x23=1,2,3,4,5;运行后,x00=1、x01=2、x02=3、x10=4、x11=5,其余元素被自动赋值为0。(3)赋初值时,每一行的初值放在一对中,所有行的初值再

23、放在一对中。系统将第一对内数据依次赋值给数组的第0行,将第二对内数据依次赋值给数组的第1行,依次类推。具体格式为:存储类型 数据类型 数组名数组长度=第0行初值列表,第1行初值列表, ;有定义如下:int x44=1,2,3,4,4,5,6,7;系统将1、2、3、4依次赋给第0行的x00、x01、x02和x03;4、5、6依次赋给第1行的x10、x11和x12, x03的初值,系统自动赋0;系统给第2行的x20、x21、x22和x23均赋值0;第3行对应7,则系统将7赋值给x30,余下的x31、x32和x33均被系统赋值为0。(4)数组初始化时,行长度可省,列长度不能省。编译系统会根据赋初值的

24、情况,自动得到第一维的长度。所给初值的个数也不能多于数组元素的个数。例如:int a3=1,2,3,4,5,6,7; /*隐含指明行下标为3*/int b4=1,4,5;/*隐含指明行下标为2*/下面对二维数组的初始化都是错误的:int a ,b 2,c3 ; /*数组初始化时,行长度和列长度不正确*/float x3 =1.0,2.0,3.0,4.0,5.0,6.0;/*列长度不能省*/int m24=1,2,3,4,5,6,7,8,9 /* 编译出错,初值个数多于数组元素的个数 */ 3二维数组元素的地址二维数组数组元素的地址可用数组元素前面加地址操作符的方式来表示:&数组名下标1下标2【

25、课堂精练】1求出矩阵a的主对角线上的元素之和,程序运行结果如图6-8所示。 图6-8 程序运行结果 根据程序运行结果,将下面程序补充完整。#include stdio.hmain ( ) int a33=1,3,5,7,9,11,13,15,17,sum=0,i,j;for(i=0;i3;i+)for(j=0;j3;j+)if(i=j)/*对角线上元素的行列下标值是相等的*/_printf(sum=%d,sum); getch(); 2.定义一个二维数组,编程求出最大值的元素所在的行和列下标值。程序的运行结果如图6-9所示。 图6-9 程序运行结果根据程序运行结果,将下面程序补充完整。#inc

26、lude stdio.hmain() int i,j,row=0,col=0,max; int a33=3,-6,90,15,-53,71,12,48,91;/*定义二维数组并初始化*/ max=a00;/*假设第一个数组元素就是最大值,后面再进行比较*/ for(i=0;i3;i+) for(j=0;jmax) _ row=i; col=j; printf(最大值:%dn所在行号为:%dn所在列号为:%d,max,row,col); getch(); 6.3 字符数组与字符串【学习目标】(1) 掌握字符数组的定义与引用方法(2) 掌握字符串的存储形式(3) 掌握字符数组与字符串的区别实例23 字符数组的定义与引用字母替换【实例任务】编写程序将一行字符中所有字母替换为在字母表中其后的第三个字母,即a替换为d、b替换为f、c替换为g,x、y、z分别替换为a、b、c,然后输出。运行结果如图6-10所示。 图6-10 程序运行结果【程序代码】#include stdio.h#include string.hmain( )char str80,i;printf(请输入大小写字符序列: );i=0;while(stri=getchar( )!=n)/*输入字符序列,当输入字符为回车时结束*/ i+

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1