第1讲_二维数组_第1页
第1讲_二维数组_第2页
第1讲_二维数组_第3页
第1讲_二维数组_第4页
第1讲_二维数组_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计基础程序设计基础( 下下 )主讲:袁宁主讲:袁宁计算机软件教研室计算机软件教研室邮箱地址邮箱地址: ise_第1讲 二维数组二维数组复习:一维数组复习:一维数组(1) (1) 一维数组的定义一维数组的定义(2) (2) 一维数组的应用一维数组的应用新内容:新内容:(1) (1) 二维数组的定义二维数组的定义(2) (2) 二维数组的引用二维数组的引用(3) (3) 二维数组的初始化二维数组的初始化(4) (4) 二维数组的程序举例二维数组的程序举例二、数组的概念二、数组的概念1. 数组数组: :由具有相同类型的固定数量的元素组成的集合由具有相同类型的固定数量的元素组成的集合2. 数组元

2、素数组元素: 每一个数组元素都是一个变量每一个数组元素都是一个变量, 为了与为了与 一般的变量相区别一般的变量相区别,我们称数组元素为我们称数组元素为下标变量下标变量3.下标变量在数组中的位置序号称下标变量在数组中的位置序号称下标下标 下标变量的数据类型称为下标变量的数据类型称为下标类型下标类型(或元素类型或元素类型)7.1 一维数组的引出及使用一维数组的引出及使用三、一维数组的定义三、一维数组的定义 1. 格式格式 : 类型标识符类型标识符 数组名数组名 常量表达式常量表达式 ; 例例: int a10 ; 2. 说明说明 (1) 数组的类型实际上是指数组元素的数组的类型实际上是指数组元素的

3、 取值类型。取值类型。对于同一个数组,所有对于同一个数组,所有 元素的数据类型都是相同的。元素的数据类型都是相同的。 84 : 66 80 95101010121014 :1028a0a1a2 :a9(2) 数组名是用户定义的标识符数组名是用户定义的标识符, 数组名表示了一个存储区的首地址数组名表示了一个存储区的首地址 (即第一个数组元素的地址即第一个数组元素的地址) 例例: 一个变量一个变量x的地址可以用的地址可以用&x来表示来表示 一个数组一个数组a的地址就用数组名的地址就用数组名a来表示来表示, a等价于等价于&a07.1 一维数组的引出及使用一维数组的引出及使用2. 说

4、明说明(3) 数组长度数组长度 : 指数组中元素的个数指数组中元素的个数(4) 数组元素的数组元素的下标由零开始下标由零开始 例例: int a10 中中 a 有有10个元素个元素, 所以数组长度为所以数组长度为10, 数组元素分别是数组元素分别是: a0 , a1 a8, a9(5) 常量表达式中不能包含变量常量表达式中不能包含变量, 其值也不能是实数其值也不能是实数int n;scanf(%d,&n);int an; int n=6;int an; int b8.5; #define SIZE 8int a2+3;float bSIZE;对对错错7.1 一维数组的引出及使用一维数组

5、的引出及使用四、数组元素的引用四、数组元素的引用1. 引用形式引用形式 : 数组名数组名 下标下标 注意注意: 如果出现如果出现 a5 = 72 ; 编译时不会编译时不会指出错误指出错误, 系统会将系统会将a4后下一个后下一个存储单元存储单元 赋值为赋值为72, 但这样可能但这样可能会破坏数组以外其他变量的值会破坏数组以外其他变量的值 84 75 66 80 9510101012101410161018a0a1a2a3a472a51020假设这个存储空间是变量假设这个存储空间是变量x的的, 实际上实际上a5是不存在的是不存在的, 如果执行了如果执行了a5=72, 会将会将x原有的正确数据覆盖掉

6、原有的正确数据覆盖掉2. 说明说明(1) 下标可以是整型常量或整型表达式下标可以是整型常量或整型表达式 如如: a1 , a2*3(2) 数组定义为数组定义为 int a5 , 数组长度为数组长度为5 而下标在而下标在0 - 4之内之内, 即即a0 - a47.1 一维数组的引出及使用一维数组的引出及使用五、五、 一维数组的初始化一维数组的初始化1. 概念概念 : 在定义一维数组时对各元素指定初始值称为在定义一维数组时对各元素指定初始值称为 数组的初始化数组的初始化int a5 = 1 , 3 , 5 , 7 , 9 ;2. 说明说明 (1) 对数组的全体元素指定初值对数组的全体元素指定初值,

7、 初值用初值用 括起来括起来, 数据之间用数据之间用 逗号分开。这种情况下逗号分开。这种情况下, 可以不指明数组的长度可以不指明数组的长度, 系统会根据系统会根据 内数据的个数确定数组的长度内数据的个数确定数组的长度 int a = 1 , 3 , 5 , 7 , 9 ;(2) 对数组中部分元素指定初值对数组中部分元素指定初值 ( 这时不能省略数组长度这时不能省略数组长度 ) int a5 = 1 , 3 , 5 ; (3) 使数组中的全部元素初始值都为使数组中的全部元素初始值都为 0 int a5 = 0, 0, 0, 0, 0 ; 简单的写法简单的写法: int a5= 0 ;7.1 一维

8、数组的引出及使用一维数组的引出及使用1357913500 逆序逆序#include#define N 10void main( ) int i, t; int aN=5,8,0,1,9,2,6,3,7,4 for(i=0; iN/2; i+) t=ai; ai=aN-1-i; aN-1-i=t; for( i=0; i=9; i+) printf(%3d , ai);例例: 使数组元素使数组元素a0a9的值逆序再输出的值逆序再输出7.1 一维数组的引出及使用一维数组的引出及使用 5 8 0 1 9 2 6 3 7 4a0a1a2a3a4a5a6a7a8a9a0a9457830a1a8a2a7

9、7.2.1 二维数组的定义二维数组的定义 1、概念、概念: 可以将二维数组看成一种特殊的一维数组可以将二维数组看成一种特殊的一维数组, 它它 的每一个元素都是类型相同的一维数组的每一个元素都是类型相同的一维数组, 这样这样 就形成一个二维数组就形成一个二维数组 。2、定义形式、定义形式 : 类型标识符类型标识符 数组名数组名 常量表达式常量表达式1 常量表达式常量表达式2 如如: int a34 ; a0a1a2a00a01a02 a037.2 二维数组的定义和引用二维数组的定义和引用3、存储形式、存储形式 : 数组的元素在内存中是连续存放的数组的元素在内存中是连续存放的 int a33 ;

10、数组数组a的存放形式如下的存放形式如下 : a10a11a12a20a21a22a00a01a02a00a01a02a10a11a12a20a21a22101010121014101610181020102210241026 7.2.2 二维数组的引用二维数组的引用 数组元素的表示形式数组元素的表示形式 : 数组名数组名 下标下标1 下标下标2 注意注意 : (1) 每个下标都要用每个下标都要用 括起来括起来 如如 a 2 1 不能写成不能写成 a 2,1 (2) 下标不要超过定义的范围下标不要超过定义的范围7.2 二维数组的引出及使用二维数组的引出及使用 1 2 3 4 5 6 7 8 9

11、10 11 127.2.3 二维数组的初始化二维数组的初始化 1、分行初始化、分行初始化 int a34= 1, 2, 3, 4 , 5, 6, 7, 8 , 9, 10, 11, 12 ; 第第1对对 内的数据赋给第内的数据赋给第1行数组元素行数组元素, 以此类推,以此类推,此方法较直观此方法较直观2、按数据的排列顺序对数组元素赋初值、按数据的排列顺序对数组元素赋初值 int a34=1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12; 将数据依次赋给元素将数据依次赋给元素 a00 , a01 a23 注意注意: 此方法数据没有明显的界限此方法数据没有明显的界限, 当

12、数据较多时容易出错当数据较多时容易出错7.2 二维数组的引出及使用二维数组的引出及使用3、对数组的部分元素赋初值、对数组的部分元素赋初值 int a34=1, 2,3,0, 4; int a34=1,2,3,4,5,6;120030000400123456000000注意注意: 此方法对非此方法对非0元素较少时比较方便,不必将所有的元素较少时比较方便,不必将所有的0都都写出来,只需输入少量数据。写出来,只需输入少量数据。也可以只对某几行元素赋也可以只对某几行元素赋初初值值:int a34=1,5,6; int a34=1, ,9;1000560000001000000090004、对数组的全部

13、元素赋初值时、对数组的全部元素赋初值时可以省略第一维的长度可以省略第一维的长度 系统会根据数据的个数和第二维的长度自动求出系统会根据数据的个数和第二维的长度自动求出 第一维的长度第一维的长度数组数组a第一维长度为第一维长度为 3 数组数组b第一维长度为第一维长度为 4 int b 2= 1, 2, 3, 4, 5, 6, 7, 8 ;定义时也可以只对部分元素赋初值,而省略第一维定义时也可以只对部分元素赋初值,而省略第一维的长度,但应分行赋初值。的长度,但应分行赋初值。int a 4= 1, 2, 0, 3, 4 , 5 ;数组数组 int b42= 1, 2, 3, 4, 5, 6, 7, 8

14、 ; 等价于等价于120003405000#include void main( ) int i , j, row=0, col=0, max ; int a34=5,2,0,9,3,7,12,6,10,4,1,8; max=a00; for ( i=0; i3; i+ ) for ( j=0; jmax ) max=aij ; row=i ; col=j ; printf(“max=%dn”, max); printf(“max=a%d%dn”, row , col);例例: 找出矩阵中最大的数找出矩阵中最大的数,并输出其行号和列号并输出其行号和列号max0row0col59301212输出

15、输出:max=12max=a1252093712610418a00 a01 a02 a03a0a1a27.2.4 二维数组的应用二维数组的应用#includevoid main( ) int a34, b43 , i , j ; for ( i=0 ; i3 ; i+ ) for ( j=0 ; j4 ; j+ ) scanf(“%d”, &aij ) ;37126104185209例例: 将一个矩阵进行转置将一个矩阵进行转置(即原来的行变为列即原来的行变为列)52093712610418输入数组输入数组a进行矩阵转置进行矩阵转置a02b20a21b12输出数组输出数组bfor ( i

16、=0 ; i3 ; i+ ) for (j=0 ; j4 ; j+) bji=aij;for ( i=0 ; i4 ; i+ ) for ( j=0 ; j3 ; j+ ) printf(“%5d”, bij) ; printf(“n”); 7.2.4 二维数组的应用二维数组的应用例例: 一个学习小组有一个学习小组有5个人个人, 每个人有三门课的考试成绩每个人有三门课的考试成绩, 求每个人的总分和该学习小组各门课的平均成绩。求每个人的总分和该学习小组各门课的平均成绩。姓名姓名高数高数英语英语C语言语言总分总分Mary857888?John908091?Mike799284?Alex838680

17、?Karry877595?用一个二维数组用一个二维数组来存放成绩来存放成绩 int s54;用一个一维数组用一个一维数组来存放来存放各门课各门课的平均的平均成绩成绩float a3;每个人三门课的成绩是输入的每个人三门课的成绩是输入的总分和各门课的平均成绩是计算出来的总分和各门课的平均成绩是计算出来的7.2.4 二维数组的应用二维数组的应用#includevoid main( ) int i, j, s54, sum; float a3; for(i=0; i5; i+) for(j=0; j3; j+) scanf(% %d, &sij); sij=si0+si1+si2; for(

18、j=0; j3; j+) sum=0; /注意赋初值的位置注意赋初值的位置 for(i=0; i5; i+) sum=sum+sij; aj=sum/5.0; (见下页见下页)输入一个学生输入一个学生3门课的成绩门课的成绩计算总分计算总分对每一门课对每一门课(即每一列即每一列)进行处理进行处理: 先将每列的先将每列的5个成绩累加求和个成绩累加求和; 再再将总和除将总和除5, 得到每门得到每门课的平均分课的平均分数组数组a保存每门保存每门课的平均分课的平均分二维数组二维数组s存放每个学生的成绩存放每个学生的成绩#includevoid main( ) for(i=0; i5; i+) for(j

19、=0; j4; j+) printf(%4d, sij); printf( n ); for(i=0; i3; i+) printf( %6.2f , ai); printf( n );控制输出控制输出5行行控制每行输控制每行输出出4个成绩个成绩输出一行的输出一行的4个个成绩后再换行成绩后再换行输出结果输出结果:_ _85_ _78_ _88_ 251_ _90_ _80_ _91_ 261_ _79_ _92_ _84_ 255_ _83_ _86_ _80_ 249_ _87_ _75_ _95_ 257_84.80_82.20_87.60思考题 假设两维数假设两维数组组a和和b表示两个表

20、示两个44矩阵,要矩阵,要求编写程序将两矩阵的乘积存入另一个两求编写程序将两矩阵的乘积存入另一个两维数组中并输出。维数组中并输出。 题目分析:题目分析:对于乘积矩阵的元素,有公对于乘积矩阵的元素,有公式式 ,其中的,其中的aik和和bkj分别是两个分别是两个被乘矩阵的元素。求出一个元素需要用一被乘矩阵的元素。求出一个元素需要用一个循环,因此完成矩阵乘法需要用一个三个循环,因此完成矩阵乘法需要用一个三重循环。重循环。nkkjikijbac1#include void main ( ) int a44=1,2,3,4, 5,6,7,8, 9,10,11,12,13,14,15,16; int b4

21、4=1,3,5,7, 5,8,7,1, 6,2,4,8,7,2,9,11; int c44; int i, j, k; double x; for(i=0; i4; i+) for(j=0; j4; j+) for(cij=0.0, k=0; k4; k+) cij= cij+aik*bkj; for(i=0; i4; i+) for(j=0; j4; j+) printf(”%f%c”, cij , j= =3 ? n : );课后作业(课本P153) 课后习题课后习题7.3: 求求3*3整型矩阵对角线元素之和。整型矩阵对角线元素之和。 课后习题课后习题7.6 : 输出杨辉三角形输出杨辉三角形 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 杨辉三角:杨辉三角: 简单的说一下就是两个未知数和的幂次方运算后的系数问题,比如(简单的说一下就是两个未知数和的幂次方运算后的系数问题,比如(x+yx+y)的平方的平方=x=x

温馨提示

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

评论

0/150

提交评论