版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数组本章主要内容:6.1数组的概念6.2一维数组(重点)6.3二维数组(重点)6.4字符数组本章教学要求:了解数组中数据的存储方法
熟悉数组的概念、数组元素的表示方法掌握数组的编程方法6.1数组的基本概念本节介绍数组的定义和数组程序设计要解决的问题。
6.1.1数组解决的问题类型相同的一组数的存储类型相同一组数的处理通过对下标的控制实现对数组的处理:循环变量控制下标处理的数组映射到下标如:40个学生成绩的存储
100个整数的排序数组6.1数组的基本概念本节介绍数组的定义和数组程序设计要解决的问题。
6.1.2数组的基本概念数组就是计算机内存中的一块连续的存储区域,用来存储数据类型相同的一组数据。数组通过数组名来表示。数组名的命名规则与变量名相同。数组名就代表整个数组的首地址,即第一个数组元素的地址。数组中的成员称为数组元素,数组是通过数组元素访问它的每个成员的。数组元素是一个具体的变量,也称为下标变量。数组元素的表示形式为:数组名[下标]使用:数组遵循先定义后使用的原则,未定义的数组不能使用。数组元素如同其它基本变量一样,可以被赋值,也可以在表达式中使用。分类:根据数组下标的多少,数组可分为一维数组和多维数组。
数组6.2一维数组本节主要介绍一维数组的定义和使用。
6.2.1一维数组的定义1.一维数组的定义形式一维数组是指带一个下标的数组,用来存储一组类型相同的数据。定义形式:类型说明符数组名[常量表达式];
注意:类型说明符是任一种基本数据类型或构造数据类型。数组名是用户定义的数组标识符。方括号中的常量表达式表示数组元素的个数,也称为数组的长度。
数组6.2一维数组6.2.1一维数组的定义1.一维数组的定义例如:inta[10];floatb[20],s[40];说明:数组名也是标识符,其命名规则要符合标识符的规定。常量表达式表示数组元素的个数,其值必须大于等于1。常量表达式中可以包括常量和符号常量,但不能包含变量。定义数组时,数组长度可以用符号常量表示。一个数组定义语句中可以定义多个相同类型的数组,也可以和其他相同类型的变量一起定义,用“,”隔开。
数组6.2一维数组6.2.1一维数组的定义2.一维数组元素的引用一维数组元素的引用形式:数组名[下标]例如:inta[5]数组a有5个数组元素:a[0]、a[1]、a[2]、a[3]、a[4]。注意:不能使用数组元素a[5],其下标已越界。说明:下标表示该元素在数组中的位置,它可以是整型常量、整型变量或整型表达式。如:a[3]、a[i+j]、a[i++]。
C语言规定,数组元素下标从0开始,最大下标为数组长度减1。数组元素可以像一个独立的简单变量来使用。如:a[0]=a[1]+a[2]-a[5-1];
数组6.2一维数组6.2.1一维数组的定义3.一维数组的存储形式数组是有序的同类数据的集合,它在计算机内部的存储也是有序的。在编译时,系统根据数组的定义为数组分配一个连续的存储区域,数组元素按下标由小到大的次序连续存放,下标为0的元素排在前面,每个元素占据的存储空间大小与同类型的简单变量相同。例如:inta[5]a数组中每个元素在内存占4个字节的存储空间,各元素连续存放的示意图如图6-1所示。
数组6.2一维数组6.2.2一维数组的使用1.一维数组的初始化数组初始化赋值是指指在定义数组的同时对数组元素赋初始值。将各数组元素的初值写在花括号“{}”中,用逗号隔开。数组初始化是在编译阶段进行的,这样可以减少运行时间,提高运行效率。初始化格式:类型名数组名[元素个数]={初始值列表};(1)对全部元素赋初值。例如:inta[10]={0,1,2,3,4,5,6,7,8,9};各数组元素的初始值依次为:a[0]=0、a[1]=1、a[2]=2、a[3]=3、a[4]=4、a[5]=5、a[6]=6、a[7]=7、a[8]=8、a[9]=9。也可以不指定数组的长度,例如:inta[]={0,1,2,3,4,5,6,7,8,9};系统会根据元素初值的个数自动计算数组长度为10。数组6.2一维数组6.2.2一维数组的使用1.一维数组的初始化(2)对部分元素初始化。当“{}”中值的个数少于元素个数时,只给最前面部分元素赋值,其余元素系统默认为0。例如:inta[10]={0,1,2,3,4};各元素的初始值为:a[0]=0、a[1]=1、a[2]=2、a[3]=3、a[4]=4、a[5]~a[9]均为0。注意:由于数组长度与提供的初值的个数不相同,这时的数组长度不能省略。当“{}”中提供的初值个数多于数组元素的个数时,系统只使用前面的数据,多余的数据不使用。数组6.2一维数组6.2.2一维数组的使用2.一维数组的输入在程序执行过程中,可以通过赋值语句给数组元素赋值,也可以通过输入语句给数组元素赋值。(1)通过赋值语句给数组元素赋值。
例如:inta[5];a[0]=1,a[1]=23,a[2]=16,a[3]=6,a[4]=10;这种方法适用于赋值的数据没有规律,且编程时数据已知。
数组6.2一维数组6.2.2一维数组的使用2.一维数组的输入(1)通过赋值语句给数组元素赋值。
如果赋值数据有规律,用循环控制较为方便。例如:给一个数组赋值为1、2、3、4、5inta[5];for(i=0;i<=4;i++)a[i]=i+1;程序执行后,a[0]=1、a[1]=2、a[2]=3、a[3]=4、a[4]=5。
数组6.2一维数组6.2.2一维数组的使用2.一维数组的输入(2)通过输入语句给数组元素赋值。
如果编程时,不知道给数组元素的具体值,可以通过循环控制输入语句来实现。循环控制变量的取值为数组元素下标的取值范围。例如:给一个数组赋值任意5个整数。inta[5];for(i=0;i<=4;i++)scanf("%d",&a[i]);程序执行后,从键盘上输入5个整数,数据间用空格分隔。
数组6.2一维数组6.2.2一维数组的使用2.一维数组的输入(2)通过输入语句给数组元素赋值。
为了方便我们输入数据,一般在输入语句前加提示信息。该程序段可以改为:inta[5];printf("请输入5个整数:");/*提示信息*/for(i=0;i<=4;i++)scanf("%d",&a[i]);数组6.2一维数组6.2.2一维数组的使用2.一维数组的输入(2)通过输入语句给数组元素赋值。
也可以提示一次输入一个元素的值。程序段可以改为:inta[5];for(i=0;i<=4;i++){printf("请输入第%d个整数:",i+1);scanf("%d",&a[i]);}数组6.2一维数组6.2.2一维数组的使用3.一维数组的输出(1)如果输出一维数组某些元素的值,可以使用printf()语句直接输出。
例如:inta[10]={0,1,2,3,4,5,6,7,8,9};printf("%d,%d",a[3],a[5]);数组6.2一维数组6.2.2一维数组的使用3.一维数组的输出(2)如果要输出整个数组的值,可以通过循环控制输出语句来实现。例如:inta[5]={1,2,3,4,5};printf("5个整数:");for(i=0;i<=4;i++)printf("%4d",a[i]);数组6.2一维数组6.2.2一维数组的使用3.一维数组的输出(3)如果程序段改为如下形式,可以提示输出每一个元素的值。例如:inta[5]={21,32,13,54,25};for(i=0;i<=4;i++)printf("第%d个整数:%d\n",i+1,a[i]);数组6.2一维数组6.2.3程序设计实例一维数组主要是通过控制下标来实现对数据元素的处理。【例6-1】正入倒出10个整数。1.分析(1)数据设数组a存储10个整数,i控制下标,取值从0到9,其类型均为int。(2)算法①输入时从a[0]到a[9]存放;②输出时从a[9]到a[0]输出。程序流程图如图6-2所示。
数组6.2一维数组【例6-1】正入倒出10个整数。
2.源程序
数组6.2一维数组【例6-1】正入倒出10个整数。
3.思考本例是先输入的数据放在a[0],最后输入的数据放在a[9]。如果反过来,先输入的数据放在a[9],最后输入的数据放在a[0],实现正入倒出10个整数,程序如何修改?
数组6.2一维数组6.2.4程序设计实例【例6-2】选票统计。某次选举有三名候选人,编号分别是1、2、3,每张选票只选一人。现收到10张有效选票,请统计每个候选人的得票数。1.分析(1)数据设数组a统计三个候选人的得票数,即a[1]统计1号候选人的得票数,a[2]统计2号候选人的得票数,a[3]统计3号候选人的得票数。x接收选票,i控制循环次数,其类型均为int。
数组6.2一维数组6.2.4程序设计实例【例6-2】选票统计。某次选举有三名候选人,编号分别是1、2、3,每张选票只选一人。现收到10张有效选票,请统计每个候选人的得票数。1.分析(2)算法①计票数组a赋初值0;②用变量i循环控制10次循环,循环内容:输入一张选票x,给a[x]++;③循环输出数组a的三个元素,即每人的得票数。程序流程图如图6-3所示。
数组6.2一维数组【例6-2】选票统计。
2.源程序
数组6.2一维数组【例6-2】选票统计。
3.思考如果候选人是6人,每张选票可以选3人,统计100张有效选票中每个人的得票数,如何修改程序?
数组6.2一维数组【例6-3】选择法排序:10人的考试成绩(整数)降序输出。1.分析(1)数据设数组a存储10个整数,i,j控制下标,其类型为int。(2)算法①循环输入10个整数,存放到数组a中;②采用选择法排序。选择法排序的思想是:用第1个数与后面的每一个数相比,如果有比它大的就交换。剩下的9个数,再按照相同的方法求出最大的数。直到求出9个最大数为止。③循环控制输出数组a,输出时注意数据的域宽。程序流程图如图6-4所示。
数组6.2一维数组【例6-3】选择法排序。
2.源程序
数组6.2一维数组【例6-3】选择法排序。
3.思考将人数改为20人,成绩改为实数,如何修改程序?
数组6.2一维数组【例6-4】冒泡法排序:10人的考试成绩(整数)降序输出。1.分析(1)数据设数组a存储10个整数,i,j控制下标,其类型为int。(2)算法①循环输入10个整数,存放到数组a中;②采用冒泡法排序。冒泡法排序的思想是:从第1个数开始,两两比较,使大数在前,小数在后,第一趟出来的是最小的数,放在最后。依次此类推,进行9趟比较;③循环控制输出数组a,输出时注意数据的域宽。
数组6.2一维数组【例6-4】冒泡法排序。
2.源程序
数组6.2一维数组【例6-4】冒泡法排序。
3.思考将人数改为20人,成绩改为实数,如何修改程序?
数组6.3二维数组本节主要介绍二维数组的定义和使用。
6.3.1二维数组的定义1.二维数组的定义形式二维数组是指带两个下标的数组,用来存储一组数据类型相同的表格数据(Listdata)。定义形式:类型说明符数组名[常量表达式1][常量表达式2];
注意:常量表达式1为第一维下标的长度,也就是行下标的长度;常量表达式2为第二维下标的长度,也就是列下标的长度。数组6.3二维数组6.3.1二维数组的定义1.二维数组的定义例如:inta[3][4],b[5][5];说明:二维数组的每一维元素的下标均从0开始。二维数组元素的个数=常量表达式1×常量表达式2。
数组6.3二维数组6.3.1二维数组的定义2.二维数组元素的引用二维数组元素的引用形式:数组名[行下标][列下标]例如:a[2][3],表示第3行第4列的元素。说明:(1)下标可以是整型表达式,如a[3-2][2*2-1]。(2)数组元素可以出现在表达式中,也可以被赋值。例如:a[2][3]=a[1][2]/2;(3)在使用数组元素时,注意下标值应在已定义的数组大小的范围内。inta[3][4];a[3][2]=1;数组6.3二维数组6.3.1二维数组的定义3.二维数组的存储形式在C语言中,我们可以把二维数组看作是一种特殊的一维数组:它的元素又是一维数组。例如,inta[3][4];可以把a看作是一个一维数组,它有3个元素:a[0]、a[1]、a[2],每个元素又是一个包含4个元素的一维数组,如图6-5所示。在内存中,二维数组元素的存放顺序是:按行存放,即在先顺序存放第一行的元素,再顺序存放第二行的元素,依次类推。如前例:inta[3][4];数组a中每个元素在内存中占2个字节的存储空间,其示意图如图6-6所示。
数组6.3二维数组6.3.2二维数组的使用1.二维数组的初始化(1)按行给二维数组赋初值。例如:inta[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};(2)按数组元素的排列顺序赋初值。例如:inta[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};(3)按数组元素的排列顺序赋初值。例如:inta[3][4]={{1},{5,6},{9}};它只对部分元素赋了初值,即a[0][0]=1,a[1][0]=5,a[1][1]=6,a[2][0]=9,未赋值的元素全部取0值。(4)第一维长度可以省略,但第二维长度不能省略。例如:inta[][4]={{0,0,1},{0},{0,9}};//数组共有3行。数组6.3二维数组6.3.2二维数组的使用2.二维数组的输入在程序执行过程中,可以通过赋值语句给数组元素赋值,也可以通过输入语句给数组元素赋值。(1)通过赋值语句给数组元素赋值。
例如:inta[3][4];a[0][0]=1;a[0][1]=2;(2)通过双重循环给数组元素赋值。例如:for(i=0;i<3;i++)for(j=0;j<4;j++)scanf("%d",&a[i][j]);
数组6.3二维数组6.3.2二维数组的使用3.二维数组的输出将二维数组按行来输出,即输出完第1行,输出第2行,…依此类推,需要有两层循环。例如:
数组6.3二维数组【例6-6】3行3列整型数组的输入与输出。1.分析(1)数据设二维数组a存放3行3列数据,i,j控制下标,其类型为int。(2)算法①双循环控制输入二维数组a;②双循环控制输出二维数组a,注意换行。
数组6.3二维数组【例6-6】3行3列整型数组的输入与输出。
2.源程序
数组6.3二维数组【例6-6】3行3列整型数组的输入与输出。
3.思考打印下列行列式。123456
数组6.3二维数组6.3.3程序设计实例【例6-7】打印下列8行杨辉三角(直角杨辉三角)。1.分析设一个8行8列的二维数组a来存放杨辉三角,i,j控制下标。输出时从第1列输出,即为直角杨辉三角。
数组6.3二维数组【例6-6】打印下列8行杨辉三角(直角杨辉三角)。
2.源程序
数组6.3二维数组【例6-7】打印8行杨辉三角(直角杨辉三角)。
3.思考打印10行杨辉三角(直角杨辉三角)。打印10行杨辉三角(等腰杨辉三角)。数组6.3二维数组【例6-8】学生成绩统计。一个班50个人4门课,统计(1)每个人的总分与平均分;(2)每门课的平均分。学生信息包括学号、语文、数学、英语、计算机、总分、平均分。1.分析(1)数据设数组a存储50个人的所有信息,i,j控制下标,其类型均为int。(2)算法先输入50个人的信息,学号自动获取,只需要输入每个人的4门课成绩;然后计算每个人的总分(放到a[i][5]中)和平均分(放到a[i][6]中),再求每门课的平均分(放到a[50][j]中);最后输出成绩表。
数组6.3二维数组【例6-8】成绩统计。
2.源程序
数组6.4字符数组本节主要介绍字符数组的定义与使用、字符串常用函数。
6.4.1字符数组的定义1.字符数组的定义用来存放字符数据的数组称为字符数组。字符数组中的每一个元素存放一个字符。定义形式:char字符数组名[常量表达式];注意:char是字符数组的类型。常量表达式给出字符数组的长度(即:字符个数)字符数组也可以是二维或多维数组。
例如:charc[10];/*数组c有10个元素,可以存储最多有9个字符的字符串*/chard[5][10];/*数组d为二维字符数组,可以存储5个字符串*/数组6.4字符数组6.4.1字符数组的定义2.字符数组的初始化数组初始化赋值是指在数组类型说明的时同时给数组元素赋值。(1)字符数组也允许在类型说明时做初始化赋值。例如:charc[10]={'C','','p','r','o','g','r','a','m','!'};(2)当对全体元素赋初值时也可以省略长度说明,系统根据初值个数确定数组长度。例如:
charc[]={'C','','p','r','o','g','r','a','m','!'};(3)字符串在C语言中没有专门的字符串变量,通常用一个一维字符数组来存放一个字符串,用二维字符数组存放多个字符串。例如:charc[]={"Cprogram"};
chard[][20]={"Cprogram","Javaprogram","Basicprogram"};数组6.4字符数组6.4.2字符数组的使用1.字符串处理函数C语言提供了丰富的字符串处理函数,大致可分为字符串的输入、输出、合并、修改、比较、转换、复制、搜索等几类。使用这些函数可大大减轻编程的负担。常用的字符串函数如表6-1所示。
注意:①用于输入输出的字符串函数,在使用前应包含头文件"stdio.h";②使用其它字符串函数则应包含头文件"string.h"。数组6.4字符数组6.4.1字符数组的定义与使用2.字符数组的输入输出(1)一个字符串的输入输出。【例6-9】用字符数组a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年三季度报天津地区A股流动负债合计排名前十大上市公司
- 课题申报参考:教育家精神赋能高校师德师风建设研究
- 二零二五版外资企业会计人员聘用与管理服务协议3篇
- 二零二五年环境治理担保合同标的属性与实施3篇
- 二零二五年度农产品批发市场合作协议书4篇
- 2025年湛江货运从业资格证怎么考
- 医院工作个人工作总结
- 二零二五版个体工商户雇工劳动合同(文创产业专用)3篇
- 2025年度智能交通设施安装与维护承包合作协议4篇
- 2025年度智慧家居虫害预防与治理服务合同4篇
- 2024年高纯氮化铝粉体项目可行性分析报告
- 安检人员培训
- 山东省潍坊市2024-2025学年高三上学期1月期末 英语试题
- 危险性较大分部分项工程及施工现场易发生重大事故的部位、环节的预防监控措施
- 《榜样9》观后感心得体会四
- 2023事业单位笔试《公共基础知识》备考题库(含答案)
- 化学-广东省广州市2024-2025学年高一上学期期末检测卷(一)试题和答案
- 2025四川中烟招聘高频重点提升(共500题)附带答案详解
- EHS工程师招聘笔试题与参考答案(某大型央企)2024年
- 营销策划 -丽亭酒店品牌年度传播规划方案
- 2025年中国蛋糕行业市场规模及发展前景研究报告(智研咨询发布)
评论
0/150
提交评论