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

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。


相关文章:
19-二维数组
19-二维数组_学科竞赛_高中教育_教育专区。二维数组应用(矩阵、方阵)矩阵:将二维数组表示很多数这种形式称为矩阵。 方阵:行列数相同的二维数组,称为方阵。一般表示...
二维数组
二维数组_天文/地理_自然科学_专业资料。访问所有元素 请编写函数 fun,函数的...(19) int fun ( int array[3] [3]) { int i,j,t; for(i=0;i<3...
已知二维数组,实现按行输出
二维数组按行输出 程序主要功能:将二维数组用各种方法进行按行输出。 程序调试...{1,3,5,7,9,11,13,15,17,19,21,23,25,27,29}; xiabiao(a[i],15...
实验五 二维数值数组
此部分完成在实验报告上) (1) 设计程序 sy4-1.c,功能是如下所示规律构造二维数组下三角的前 m 行; 1 5 7 9 11 13 13 15 17 19 17 19 21 23 25 ...
二维数组
二维数组 12 个 1:将 M 行 N 列的二维数组中的字符数据,按列的顺序依次...{19,33,45,38},{20,22,66,40}}; int p[N],i,j,k; printf("The ...
二维数组元素及地址的输出
二维数组元素及地址的输 出 #include<stdio.h> void main( {int i,j,a[3][4]={{1,3,5,7},{9,11,13,1 5},{17,19,21,23}}; ) printf("%x...
二维数组1
二维数组 一维数组在编程中多用于描述线性的关系:如一组数; 一组成绩;一组...数组的值从键盘输 入,如: 19 61 67 39 23 25 32 98 21 34 39 27 13...
Java 数组练习题目
18) 对象类型的数组虽然被默认初始化,但是并没有构造函数。 19) 二维数组的行的长度不同。 20) 数组创建后其大小改变。 二选择题 1. 下面错误的初始化语句是...
实验6 一维数组和二维数组
? } 4 .已知一个二维数组:{{14,26,18,17},{24,37,21,8},{19,31,22,16},{7,19,14,26}},编程,输出该二维数组最小元素的行下标与列下标;计算并...
C语言 静态二维数组、动态二维数组、二重指针
/* * 2014-10-14 19:52:51 * * 关于 C 语言的二维数组与指针的关系的问题,是一个很复杂并且深刻的问题。在这里 * 总结一下 静态二维数组、动态二维数组...
更多相关标签:
二维数组 | c 二维数组 | js 二维数组 | 二维数组初始化 | java 二维数组 | python 二维数组 | php 二维数组排序 | php 二维数组 |