新编C语言程序设计教程数组课件_第1页
新编C语言程序设计教程数组课件_第2页
新编C语言程序设计教程数组课件_第3页
新编C语言程序设计教程数组课件_第4页
新编C语言程序设计教程数组课件_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、新编C语言程序设计教程 清华大学出版社周二强 软件学院 计算机科学与工程系配套视频:配套视频: 博客:博客: 6章章 数组数组6.1 6.1 一维数组一维数组 6.1.1 一维数组定义 6.1.2 一维数组初始化 6.1.3 一维数组应用6.2 6.2 多维数组多维数组 6.2.1 二维数组定义及初始化 6.2.2 二维数组应用 6.2.3 多维数组新编C语言程序设计教程数组数组先看一个程序,它的功能很简单,输入先看一个程序,它的功能很简单,输入5 5个学生的英语个学生的英语成绩,输出他们的平均成绩。成绩,输出他们的平均成绩。新编C语言程序设计教程数组数组数组并非一组数,数组并非一组数,而是一

2、组变量,定义一个数组,就是定义了一组变量,而是一组变量,定义一个数组,就是定义了一组变量,并且这组变量类型相同。属于数组的变量也称为数组元素。并且这组变量类型相同。属于数组的变量也称为数组元素。新编C语言程序设计教程数组6.1.1 一维数组的定义一维数组的定义方式为:一维数组的定义方式为:类型类型 数组名数组名 整型常量表达式整型常量表达式 ;其中,类型用来指明该数组所含变量的类型,它可以是整其中,类型用来指明该数组所含变量的类型,它可以是整型,浮点型或字符型,也可以是后面要介绍的指针类型,甚型,浮点型或字符型,也可以是后面要介绍的指针类型,甚至还可以是数组类型本身。至还可以是数组类型本身。数

3、组名用来标识这组变量,是一个标识符,应符合标识符数组名用来标识这组变量,是一个标识符,应符合标识符的命名规则。的命名规则。整型常量表达式是一个值为整型的常量表达式,常量表达整型常量表达式是一个值为整型的常量表达式,常量表达式通常是指操作数为字面量的表达式。常量表达式的值确定式通常是指操作数为字面量的表达式。常量表达式的值确定数组含有多少个变量,即数组元素的个数,也称数组的长度。数组含有多少个变量,即数组元素的个数,也称数组的长度。新编C语言程序设计教程数组语句int a3;定义了一个整型数组,数组名为定义了一个整型数组,数组名为a a,它有,它有3 3个数组元素。个数组元素。数组数组a a的的

4、3 3个数组元素分别是个数组元素分别是a0a0,a1a1和和a2a2。这条语。这条语句也可理解为定义了变量名为句也可理解为定义了变量名为a0a0,a1a1,a2a2的的3 3个整个整型变量。型变量。新编C语言程序设计教程数组int a3;注意:注意:(1) (1) 数组元素的下标是从数组元素的下标是从0 0开始的,这是初学数组时最开始的,这是初学数组时最容易出错的地方。应牢记上面的数组容易出错的地方。应牢记上面的数组a a中并没有数组元素中并没有数组元素a3a3!(2) (2) 定义数组时,必须用整型常量表达式。如定义数组时,必须用整型常量表达式。如 int n = int n = 3; in

5、t an; 3; int an; 中数组的定义方式就是错误的。中数组的定义方式就是错误的。(3) (3) 使用数组元素时可以用使用数组元素时可以用anan的形式,如果的形式,如果n n的值为的值为2 2,则则anan就是就是a2a2。新编C语言程序设计教程数组例6-1 求100个学生的英语平均成绩可见,数组不仅解决了定义多个变量的麻烦,而且通过数组定义的多个变量依据下标构成了有序的一组,便于用统一的方法对大批量的数据进行处理。由于数组是多个变量的集合,数组类型在C语言中又称为构造数据类型,而整型、浮点型、字符型则称为基本数据类型。新编C语言程序设计教程数组 6.1.2 一维数组的初始化与一般变

6、量类似,数组也可以在定义时给数组元素赋值,即与一般变量类似,数组也可以在定义时给数组元素赋值,即数组的初始化。构造数据类型常含有多个变量,初始化时需用数组的初始化。构造数据类型常含有多个变量,初始化时需用多个初值,并置于一对花括号中。初始化数组的基本形式为:多个初值,并置于一对花括号中。初始化数组的基本形式为:类型类型 数组名数组名 整型常量表达式整型常量表达式=value0,value1=value0,value1,. . . ;. . . ;各数组元素的初值按照各数组元素的初值按照0 0至至n-1n-1的下标次序由左向右依次放在的下标次序由左向右依次放在一对花括号中,中间用逗号分隔。一对花

7、括号中,中间用逗号分隔。如有如有int a3 = 1, 2, 3; int a3 = 1, 2, 3; ,则它相当于,则它相当于int a3; a0 = 1; a1 = 2; a2 = 3int a3; a0 = 1; a1 = 2; a2 = 3。新编C语言程序设计教程数组注意:1.1.可以只给前面的部分数组元素赋值,也就是说当花括号可以只给前面的部分数组元素赋值,也就是说当花括号中的值用完后,剩余的数组元素自动被赋为中的值用完后,剩余的数组元素自动被赋为0 0(对于字符型数(对于字符型数组,理解为组,理解为ASCIIASCII码值是码值是0 0的字符)。如的字符)。如char letter

8、3 char letter3 =A A, , B B; ; 则则letter0 = letter0 = A A ; letter1= ; letter1= B B; letter2=; letter2=00。2.2.数组初始化时,可以省略数组的长度,此时数组元素的数组初始化时,可以省略数组的长度,此时数组元素的个数为花括号中初值的个数。如有个数为花括号中初值的个数。如有float f = 3.3, 2.2, float f = 3.3, 2.2, 1.1; 1.1; ,则数组则数组f f有三个数组元素,且有三个数组元素,且f0=3.3;f0=3.3;, f1=2.2;f1=2.2;,f2=1.

9、1f2=1.1。新编C语言程序设计教程数组注意:数组初始化时,常见的错误是用一个初值给全部的数组数组初始化时,常见的错误是用一个初值给全部的数组元素赋值。数组元素赋值。数组b b的的3 3个数组元素初值都为个数组元素初值都为1 1时,不能用时,不能用int int b3=1b3=1;语句初始化,;语句初始化,这条语句的赋值结果为这条语句的赋值结果为b0=1;b0=1;,b1=0;b1=0;,b2=0b2=0。当然,数组元素的初值均为当然,数组元素的初值均为0 0时,时,则可以用则可以用int b3=0;int b3=0;语句初始化。语句初始化。新编C语言程序设计教程数组例6-2数组数组a a中

10、是中是2020个学生的数学成绩,请统计优(个学生的数学成绩,请统计优(5 5),良),良(4 4),中(),中(3 3),差(),差(2 2)的学生人数。)的学生人数。新编C语言程序设计教程数组6.1.3一维数组的应用例例6-36-3一维数组元素的倒置。如数组元素的值分别为一维数组元素的倒置。如数组元素的值分别为1 1,2 2,3 3,倒置后则变为倒置后则变为3 3,2 2,1 1。分析:如果数组分析:如果数组a a有有n n个元素,则倒置时可以让个元素,则倒置时可以让a0a0与与an-1an-1互换值,互换值,a1a1与与an-2an-2互换值互换值,这个过程是循环。循环,这个过程是循环。循

11、环(互换)多少次呢?(互换)多少次呢?n n为奇数如为奇数如7 7时互换时互换3 3次,次,n n为偶数如为偶数如6 6时互换时互换3 3次,而次,而c c语言中语言中7/2 7/2 和和6/2 6/2 的值都是的值都是3 3,可见不管,可见不管n n为何值,均互换为何值,均互换n/2 n/2 次。次。在第在第i i次循环中,次循环中,aiai与哪个元素互换值呢?与哪个元素互换值呢?a0a0与与an-1an-1,a1a1与与an-2an-2,a2a2与与an-3an-3,可见,可见aiai与与an-1-ian-1-i互换。互换。新编C语言程序设计教程数组例6-3一维数组元素的倒置#define

12、命令是c语言中的宏定义命令,用来将一个标识符定义为一个值。#define命令的格式: #define 标识符 值其中,标识符称为宏名,且宏名通常使用大写字母。在源代码被编译前,程序中出现的宏名都将被相应的值代替。 使用宏的程序容易修改。当查看例6-3中数组元素个数为偶数时程序的运行情况时,只需把宏定义中的7改为6即可,程序中的其它代码无需修改。新编C语言程序设计教程数组例6-4 将十进制整数转换成n进制数。分析:十进制整数转换成分析:十进制整数转换成n n进制数时常用进制数时常用“除以除以n n取余取余法法”。以。以2 2进制为例:进制为例:252511001B11001B。222221263

13、101001125从计算过程可知,转换时需重复地除以n并记下余数。重复即循环,到什么时候为止呢?商为0时止。余数可以用数组保存。新编C语言程序设计教程数组例6-4输出十进制正整数的n进制形式。 新编C语言程序设计教程数组例6-5 输入5个整数,按升序输出。本题同练习本题同练习4 4中的中的4.214.21(如(如25,22,21,29,2325,22,21,29,23)分析:考虑例分析:考虑例4-174-17的排序思路。的排序思路。从第从第2 2个数起至第个数起至第5 5个数止依次将数插入到前面有序的子个数止依次将数插入到前面有序的子序列中构成新的有序子序列,这个过程是循环。在第序列中构成新的

14、有序子序列,这个过程是循环。在第i i次次循环中将第循环中将第i i个数插入到前面有序的子序列中。个数插入到前面有序的子序列中。考虑第考虑第i i个数的插入过程,这个过程显然也是循环,请个数的插入过程,这个过程显然也是循环,请结合代码分析程序给出的处理过程。结合代码分析程序给出的处理过程。新编C语言程序设计教程数组例6-5 输入5个整数,按升序输出。新编C语言程序设计教程数组例6-6 将有12个元素的数组按3行4列的格式输出。分析:循环变量分析:循环变量i i从从0 0到到2 2,每次输出一行,对于第,每次输出一行,对于第i i行,行,循环变量循环变量j j从从0 0到到3 3,每次输出一列。

15、,每次输出一列。新编C语言程序设计教程数组6.2.1 二维数组的定义及初始化一维数组的元素类型可以仍是一维数组,此时的数组什一维数组的元素类型可以仍是一维数组,此时的数组什么样子呢?么样子呢?数组数组a a有有3 3个元素,如果每个元素为有个元素,如果每个元素为有4 4个元素的一维整个元素的一维整型数组,则型数组,则a0a0、a1a1和和a2a2就不再是一些普通的变量,就不再是一些普通的变量,而是一维数组,此时有而是一维数组,此时有3 3个元素的二维数组个元素的二维数组a a的形态如图的形态如图6-6-1 1所示。所示。新编C语言程序设计教程数组二维数组a的定义一维数组一维数组a0a0、a1a

16、1和和a2a2分别有分别有4 4个整型变量,其中个整型变量,其中数组数组a0a0的元素可以用的元素可以用a00a00、 a01a01、a02a02和和a03a03访问。访问。类似数组类似数组a a的数组称为二维数组。二维数组的数组称为二维数组。二维数组a a的定义不用的定义不用int4 a3;int4 a3;,而用而用int a34;int a34;。新编C语言程序设计教程数组二维数组a的定义二维数组可用于存储矩阵,因此常说几行几列的二维数二维数组可用于存储矩阵,因此常说几行几列的二维数组。数组组。数组a a可以称作可以称作3 3行行4 4列的二维数组,其直观理解如图列的二维数组,其直观理解如

17、图6-26-2所示。所示。新编C语言程序设计教程数组二维数组的初始化由图由图6-26-2可知,二维数组的初始化形式为可知,二维数组的初始化形式为,.。如。如float f23 = 1.0, 2.0, 3.0, 4.0, float f23 = 1.0, 2.0, 3.0, 4.0, 5.0, 6.0;5.0, 6.0;当然也可对部分元素赋值。如当然也可对部分元素赋值。如int a32 = 1, int a32 = 1, 0, 0, 3;0, 0, 3;语句可将二维数组语句可将二维数组a a的各元素初始化为的各元素初始化为 新编C语言程序设计教程数组二维数组的初始化由图由图6-16-1可知,二维

18、数组的元素亦如一维数组的元素,依次可知,二维数组的元素亦如一维数组的元素,依次排成一行,它们的初始化也可如一维数组的形式,将所有初排成一行,它们的初始化也可如一维数组的形式,将所有初值放在一对花括号内。值放在一对花括号内。如有如有float p23 = 1.0, 2.0, 3.0, 4.0, 5.0;float p23 = 1.0, 2.0, 3.0, 4.0, 5.0;,则,则p00=1.0,p01=2.0,p02=3.0,p10=4.0,p00=1.0,p01=2.0,p02=3.0,p10=4.0,p11=5.0,p12=0p11=5.0,p12=0。新编C语言程序设计教程数组6.2.2

19、 二维数组的应用例例6-7 6-7 把二维数组把二维数组b23=1, 2, 3, 4, 5, 6b23=1, 2, 3, 4, 5, 6的的数组元素分别按行、按列输出。数组元素分别按行、按列输出。分析:按行输出时,先循环输出每行,对于第分析:按行输出时,先循环输出每行,对于第i i行再循行再循环输出每列。输出结果为环输出每列。输出结果为 按列输出时,先循环输出每列,对于第按列输出时,先循环输出每列,对于第i i列,再循环输列,再循环输出该列上的每行。输出结果为出该列上的每行。输出结果为 新编C语言程序设计教程数组b23=1,2, 3, 4, 5, 6新编C语言程序设计教程数组例6-8 找出一个矩阵的鞍点一个矩阵的鞍点是指该位置上的元素在该行上值最大,一个矩阵的鞍点是指该位置上的元素在该行上值最大,在该列上值最小。在该列上值最小。分析:需要循环处理每行,查找每行中可能的鞍点。分析:需要循环处理每行,查找每行中可能的鞍点。对于第对于第i i行,首先找到此行的最大值行,首先找到此行的最大值aijaij,然后判断,然后判断aijaij是否是第是否是第j j列的最小值。如果是则列的最小值。如果是则i i行行j j列就是一个列就是一个鞍点,否则在第鞍点,否则在第i i行没有鞍点。行没有鞍

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论