C语言程序设计-第七章数组.ppt
《C语言程序设计-第七章数组.ppt》由会员分享,可在线阅读,更多相关《C语言程序设计-第七章数组.ppt(65页珍藏版)》请在三一办公上搜索。
1、2023/11/7,信管教研室,1,第七章 数组,2023/11/7,信管教研室,2,什么构造类型?所谓构造类型是指由基本类型数据按一定的规则组成的,是用户自己按规则定义的。数组是构造类型之一。什么是数组?在数学中我们学过数列、矩阵的概念,数列通常表示为:a1、a2、a3、.、an,矩阵通常表示为:,2023/11/7,信管教研室,3,在C语言中表示数组的方法是:a0、a1、a2、a3、a4、a5;其中a:称为数组名。方括号中的数:称为下标。下标是一个数时,也就是数列,称为一维数组。下标是两个数时,也就是矩阵,称为二维数组。还有三维数组、四维数组等。,2023/11/7,信管教研室,4,例如:
2、有五名学生的一组学号:2004035012、2004035013、2004035014、2004035015、2004035016。如果用数组来表示的话可以用统一的数组名,比如 num,用下标区别每个变量。即 num0、num1、num2、num3、num4 表示一个学号数组。,2023/11/7,信管教研室,5,7.1 一维数组的定义和引用1、一维数组的定义定义方式:类型说明符 数组名常量表达式;,例 long num4;表示num数组包含五个元素,分别是:num0、num1、num2、num3、num4。注意:下标从 0 开始,数组元素取值类型是长整型。,定义数组中元素的取值类型,定义数组
3、中元素的个数,即数组长度。,数组名的命名规则和变量名相同,遵循标识符命名规则。常量表达式中可以包括常量和符号常量,不能包括变量。,2023/11/7,信管教研室,6,一维数组在内存的存储形式:num 就是数组存储区域的首地址,即 num=200。,一组变量,2023/11/7,信管教研室,7,2、一维数组的引用数组必须先定义,后使用;只能逐个引用数组元素,不能一次引用整个数组;数组元素表示形式:数组名下标。其中:下标可以是整型常量、变量或表达式。,例 int a10;scanf(“%d”,a);(),必须 int a10;for(j=0;j10;j+)scanf(“%d”,例如:int k=5
4、;a1、ak、a10-k 都是合法的。,2023/11/7,信管教研室,8,3、一维数组元素值的输入与输出例如:main()int i,a10;for(i=0;i10;i+)scanf(“%d”,一维数组元素的输出。,一维数组元素的输入。,2023/11/7,信管教研室,9,使用数组定义和数组元素时的几点注意:1、把数组定义时方括号中的数和元素下标值区别开。方括号中的数表示数组含有的元素个数;元素下标值是标识具体的数组元素的;方括号中的数不能是变量,只能是常量。2、数组元素的下标可以是常量,也可以是变量,其值必须是非负数,如果是小数,系统自动取整。3、数组必须先定义后使用。4、系统不检查数组元
5、素下标的越界问题。5、一维数组元素的输入、输出使用单层循环语句。,2023/11/7,信管教研室,10,4、一维数组的初始化,在定义数组时,为数组元素赋初值。(在编译阶段使之得到初值),当全部数组元素赋初值时,可不指定数组长度。,如 int a5=6,2,3;等价于:a0=6;a1=2;a2=3;a3=0;a4=0;如 int a3=6,2,3,5,1;(),只给部分数组元素赋初值。,int a=1,2,3,4,5,6;编译系统根据初值个数确定数组维数值。,int a5=1,2,3,4,5;等价于:a0=1;a1=2;a2=3;a3=4;a4=5;,初始化方式:,在定义数组时对数组元素赋予初值
6、。,2023/11/7,信管教研室,11,5、程序举例,例1 读10个整数存入数组,找出其中最大值和最小值。,步骤:1.输入:for循环输入10个整数;2.处理:(a)先令max=min=x0(b)依次用xi和max,min比较(循环)若maxxi,令min=xi3.输出:max和min。,#include#define SIZE 10void main()int xSIZE,i,max,min;printf(Enter 10 integers:n);for(i=0;ixi)min=xi;printf(Maximum value is%dn,max);printf(Minimum value
7、is%dn,min);,2023/11/7,信管教研室,12,例2 用数组求Fibonacci数列前20个数。,#include void main()int i;int f20=1,1;for(i=2;i20;i+)fi=fi-2+fi-1;for(i=0;i20;i+)if(i%5=0)printf(n);printf(%12d,fi);,分析:定义一个含有20个元素的数组f,即int f20;其中f0=1,f1=1,fn=fn-1+fn-2(n2)用一个循环结构,让循环变量n从2到19,循环体为 fn=fn-1+fn-2 程序如右面所示:,2023/11/7,信管教研室,13,2023/
8、11/7,信管教研室,14,例3 用冒泡法对8个数排序(输入时数据无次序,输出按升序)。,排序过程:首先把八个数放到数组a9 中。a1=38、a2=49、a3=65、a4=76、a5=13、a6=27、a7=30、a8=97。(1)比较第一个数与第二个数,若为逆序a1a2,则交换值;然后比较第二个数与第三个数,若为逆序a2a3,则交换值;依次类推,直至第7个数和第8个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上,即在a8中。(2)对前7个数进行第二趟冒泡排序,结果使次大的数被安置在第7个元素位置,即在a7中。(3)重复上述过程,共经过7趟冒泡排序后,排序结束。,2023/1
9、1/7,信管教研室,15,例,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,2023/11/7,信管教研室,16,#include void main()int a11,i,j,t;printf(Input 10 numbers:n);for(i=1;iai+1)t=ai;ai=ai+1;ai+1=t;printf(The sorted numbers:n);for(i=1;i11;i+)printf(%d,ai);,若有n个数,则要进行
10、n-1趟比较;在第1趟比较中要进行n-1次两两比较,在第j趟比较中要进行n-j趟两两比较。,2023/11/7,信管教研室,17,7.2 二维数组及多维数组 一维数组通常是用来处理数列问题的。例如:a1、a2、a3、.、an、.可以用一维来表示。二维数组通常是用来处理矩阵问题的,例如下面的数表(矩阵):,2023/11/7,信管教研室,18,1、二维数组的定义定义方式:类型说明符数组名常量表达式常量表达式;,数组元素的存放顺序在内存中按行顺序存放。即先存第一行,接着存第二行,以此类推。例如:,例 int a34;float b25;int a3,4;(),行数,列数,元素个数=行数*列数,20
11、23/11/7,信管教研室,19,2、二维数组理解,由按上述定义的二维数组的方式(比如:int a34),我们可以把二维数组看成是一种特殊的一维数组,它的元素又是一维数组。例如,把a看成是一维数组,它有3个元素,分别是a0、a1、a2,每个元素又是一个包含4个元素的一维数组。如下表:,其中 a 是数组 a0、a1、a2 的数组名,而 a0是数组 a00、a01、a02、a03 的数组名 a1是数组 a10、a11、a12、a13的数组名 a2是数组 a20、a21、a22、a23的数组名,2023/11/7,信管教研室,20,3、二维数组元素的引用 形式:数组名下标下标4、二维数组的输入输出。
12、使用双层循环,例如:main()int a45,i,j;for(i=0;i=3;i+)for(j=0;j=4;j+)scanf(“%d”,输入,数据用空格或回车隔开。,输出,2023/11/7,信管教研室,21,5、二维数组元素的初始化分行初始化:,2023/11/7,信管教研室,22,5、二维数组元素的初始化分行初始化:,2023/11/7,信管教研室,23,5、二维数组元素的初始化分行初始化:,2023/11/7,信管教研室,24,5、二维数组元素的初始化按元素排列顺序初始化,2023/11/7,信管教研室,25,5、二维数组元素的初始化按元素排列顺序初始化,2023/11/7,信管教研室
13、,26,5、二维数组元素的初始化按元素排列顺序初始化,2023/11/7,信管教研室,27,程序举例,例 将二维数组行列元素互换,存到另一个数组中。,#include void main()int a23=1,2,3,4,5,6;int b32,i,j;printf(array a:n);for(i=0;i=1;i+)for(j=0;j=2;j+)printf(%5d,aij);bji=aij;printf(n);,printf(array b:n);for(i=0;i=2;i+)for(j=0;j=1;j+)printf(%5d,bij);printf(n);,2023/11/7,信管教研室
14、,28,例 求二维数组中最大元素值及其行列号。,#include void main()int a34=1,2,3,4,9,8,7,6,-10,10,-5,2;int i,j,row=0,colum=0,max;max=a00;for(i=0;imax)max=aij;row=i;colum=j;printf(max=%d,row=%d,colum=%dn,max,row,colum);,2023/11/7,信管教研室,29,例 读入下表中值到数组,分别求各行、各列及表中所有数之和。,#include main()int x54,i,j;for(i=0;i4;i+)for(j=0;j3;j+)
15、scanf(%d,for(i=0;i5;i+)for(j=0;j4;j+)printf(%5dt,xij);printf(n);,2023/11/7,信管教研室,30,思考题:1、float a10;是一个定义一维数组的例子:理解 float、a、10 各部分的含义。2、下面定义哪一个是错的?为什么?1)#define N 10 2)int an;int aN;3、下面对数组元素的引用是否正确?为什么?a3.5、a3+5、a-5、int n=3;an+1。4、下面对一维数组的初始化是否正确?为什么?int a3=1,2,3、int a=1,2,3、int a3=1、int a3=1,2,3,4
16、5、为什么对一维数组赋值使用单层循环?6、下面对二维数组初始化是否正确?为什么?int a23=1,2、int a2=1,2,3,4,5,6、int a34=1,0,6,0,0,1,2023/11/7,信管教研室,31,参考程序:main()int a6,i,j,k;a1=1;printf(%3dn,a1);for(i=2;i=2;j-)aj=aj+aj-1;for(k=1;k=i;k+)printf(%3d,ak);printf(n);,11 11 2 11 3 3 11 4 6 4 1,功能:编程实现用一维数组实现杨辉三角形的打印。,2023/11/7,信管教研室,32,用筛选法求100之
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言程序设计 第七 数组

链接地址:https://www.31ppt.com/p-6504009.html