当前位置:首页 >> 学科竞赛 >>

19-二维数组


二维数组应用(矩阵、方阵)
矩阵:将二维数组表示很多数这种形式称为矩阵。 方阵:行列数相同的二维数组,称为方阵。一般表示为 A N×N 方阵中的一些重要概念: 对角线:A [ I,J ] ,在( I = J )OR ( I + J = N + 1 )的情况下; 主对角线:………….,在 I = J 的情况下; 上三角:………….,在 I < J 的情况下; 下三角

:………….,在 I > J 的情况下; 例一:输入 4×4 方阵,分别求两条对角线上元素之和。
S1:= 0 ; S2:= 0 ; FOR I := 1 TO 4 DO S1 := S1 + A[ I,I ] ; FOR I := 1 TO 4 DO S2 := S2 + A[ I,5 - I ] ;

例二:矩阵的转置: A: 1 2 3 4 5 6 7 8 9 10 11 12

转置为

1 2 3

B: 4 7 5 8 6 9
N行M列 A[J,I]

10 11 12

M 行 N 列 ……………………………………………….. A [ I , J ] ………………………………………………..

程序: CONST M=4;N=3; VAR A:ARRAY [ 1..M,1..N ] OF INTEGER ; B:ARRAY [ 1..N,1..M] OF INTEGER ; I, J:INTEGER ; BEGIN WRITELN(‘INPUT ’,M,‘ × ’,N,‘ ARRAY :’); FOR I := 1 TO M DO { 输入 } BEGIN FOR J := 1 TO N DO READ(A[ I,J]); READLN END; FOR I := 1 TO N DO { 转置 } FOR J := 1 TO M DO B[ I,J ] := A[ J , I ]; FOR I := 1 TO N DO { 输出 } BEGIN

FOR J := 1 TO M DO WRITELN END; END.

WRITE(A[ I,J]:4);

引申 1、将 A 数组逆时针转 90°形成 B 数组。分析找规律:B[ I ,J ] := A[ J , M + 1 – I ] 2、………….顺时针转 90°…………..。 分析找规律:B[ I ,J ] := A[ M – J+1 , I ] 3、………….顺时针转 180°………….。分析找规律:B[ I ,J ] := A[M + 1 - I , M – J+1 ]

例三:给一维数组输入 M 个整数,假设 M=6,数组元素分别为 7 4 8 9 1 5 , 要求建立一个如下数组(矩阵): 7 4 8 9 1 5 4 8 9 1 5 7 8 9 1 5 7 4 9 1 5 7 4 8 1 5 7 4 8 9 5 7 4 8 9 1 程序:
CONST M=6 ; VAR A:ARRAY[ 1..M ] OF INTEGER ; B:ARRAY[ 1..M,1..M ] OF INTEGER ; I ,J :INTEGER ; BEGIN WRITELN(‘INPUT A ARRAY : ’); FOR I := 1 TO M DO READ(A[ I ]); READLN; FOR I:= 1 TO M DO B[1,I ] := A[ I ] ; FOR I:= 2 TO M DO BEGIN FOR J := 1 TO M-1 DO B[ I , J ] :=B[ I-1 ,J+1 ] ; B[ I , 6 ] := B[ I-1 ,1 ] ; END ; 输出 B 数组; END.

例四:建立如下矩阵:2 3 4 5

3 4 5 6

4 5 6 7

5 6 7 8

注意:一般情况下,给二维数组赋初值,都是找 A [ I ,J ] 与 I 和 J 的函数关系。 FOR I := 1 TO N DO FOR J:= 1 TO N DO A [ I, J ] := F( I,J ); 本例,对于任意的 A [ I ,J ] = I + J ; 所以,一定要强调分析能力,让学生学会分析变量的关系。

学生练习:1 2 3 4 5

1 1 2 3 4

1 1 1 2 3

1 1 1 1 2

1 1 1 1 1 I–J=1 I–J=2 I–J=3

I–J=4 再分析一下 CASE 语句,得出: IF I > J THEN A [ I,J ]:= I – J + 1 ELSE A [ I,J ]:= 1; 引申: 1 2 3 4 5 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 5 4 3 2 1

FOR I:= 1 TO 5 DO FOR J:= 1 TO 5 DO CASE I – J OF 1:A[I,J]:=2; 2:A[I,J]:=3; 3:A[I,J]:=4; 4:A[I,J]:=5; ELSE A[I,J]:=1 END;

对称矩阵:

│I-J│=3

可以先给上三角赋值, 然后利用对称性, A [ J,I ] := A[ I,J ];

│I-J│=1 │I-J│=4 再如:1 0 0 0 1 1 0 0 1 1 1 0 1 1 1 1 │I-J│=2 I-J│=0

IF I < = J THEN A[ I ,J ] := 1 ELSE A[ I ,J ] := 0; 1 0 0 1 0 1 1 0 0 1 1 0 1 0 0 1 IF ( I = J ) OR ( I + J = 5 ) THEN A[ I ,J ] := 1 ELSE A[ I ,J ] := 0; 例五:请编写一个程序,输入一个 n(小于 10 的奇数),输出他的奇数幻方。
说明:n 阶幻方表示一个 n 行、n 列的方阵,由 1 到 n*n,这 n*n 个数构成。 以下是一个 5 阶幻方:17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 条件:每一行、每一列和两个对角线上的每个元素之和都相等(为 n*(n
2

+1)/2

)。

怎么形成这个方阵呢?以 n=5 为例,算法如下: 一、确定幻方的阶数 N; 二、初始化:将 N*N 的方阵 A 全部设置成 0; 三、从第一个数开始填,即 T=1; 四、确定第一个数的位置,行下标 R=1 和列下标 C=N DIV 2 +1; 五、填入当前数 A[R,C]:=T,准备好下一个数 T:=T+1; 六、寻找下一个数的位置(最关键) 一般为:右上角,即 R:=R-1;C:=C+1; 但:1.如果已到了第一行上边,即 R=0,则应该把该数调整到本列的最后一行,R=N; 即 IF R=0 THEN R:=N; 2.如果已到了最后一列的右边,即 C=N,则应该把该数调整到本行的第一列,C=1; 即 IF C=N THEN C:=1; 3.如果上边两个条件都满足,即 R=0 且 C=N,则应该把该数调整到上一个数的正下方; 即 IF (R=0)AND (C=N) THEN BEGIN R:=R+2;C:=C-1 ; END; 4. 如果该位置已有数了,,即 A[R,C]<>0,则应该把该数也调整到上一个数的正下方; 即 IF A[R,C]<>0 THEN BEGIN R:=R+2;C:=C-1 ; END; 转到第五部继续。即循环。循环的条件是什么呢?T<=N*N,可以用 WHILE 或 FOR 循环。 如:WHILE T<=N*N DO BEGIN 五; 六; T:=T+1; END; 七、打印输出 A。


相关文章:
实验6 一维数组和二维数组
? } 4 .已知一个二维数组:{{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}},编程,输出该二维数组最小元素的行下标与列下标;计算并...
Java 数组练习题目
18) 对象类型的数组虽然被默认初始化,但是并没有构造函数。 19) 二维数组的行的长度不同。 20) 数组创建后其大小改变。 二选择题 1. 下面错误的初始化语句是...
c语言二维数组练习题
完成下列程序代码 1、 将二维数组(5 行 5 列)的右上半部分置零。 即: 1 6 11 16 21 2 7 12 17 22 3 8 13 18 23 4 9 14 19 24 5 10 15 ...
二维数组定义以及动态分配空间
二维数组定义以及动态分配空间 (转) 转下面三种定义形式怎么理解?怎么动态分配...这时可以使用下标用法 Ptr[ 0 ][ 0 ] 到 Ptr[ 0 ][ 19 ] 了。 如果...
java数组之二维数组
(int j = 0; j < matricesa.length; j++) //for 循环遍历二维数组的二维 //for 循环遍历二维数组的一维 12 13 14 15 16 17 18 19 20 21 22 23 ...
指向二维数组的指针
例1 int a[3] [4]={ {1,3,5,7}, {9,11,13,15}, {17,19,21,23} }; main() { int i,(*b)[4]; b=a+1; /* b 指向二维 数组的第 ...
C++二维数组习题汇总含详细程序解答
样例输入: 12 45 35 17 样例输出: 5 19 17 55 } 第 2 题: 编写程序,计算二维数组中各列 之和。输入分 m+1 行:第一行为 m 和 n 的值,以下 m 行...
串、数组习题
[例 9-7] 设二维数组 A[-20..30,-30..19],每个元素占用 4 个存储单元,存储起始地址 例 ;如按列优先顺序存 为 200。如按行优先顺序存储,则元素 A[25...
5.1C++数组的概念,一维数组,二维数组
5.1C++数组的概念,一维数组,二维数组_数学_自然科学_专业资料。概括地说:数组...{19,28,37,46},{-12,-34,6,8}}; max=a[0][0];//使 max 开始时...
二维数组与二级指针
指向二维数组的指针 2页 免费 10二维数组与指针 19页 1下载券 二维数组与指针...} 这是数组与指针的问题 首先要搞清楚数组和指针的概念, , 这是问题出现的根源...
更多相关标签:
二维数组 | c 二维数组 | java 二维数组 | js 二维数组 | 二维数组初始化 | c 二维数组初始化 | python 二维数组 | php 二维数组排序 |