二维数组
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• • • • • • • • • • • • • • • • • • • •
2.打印杨辉三角形的前10行。杨辉三角形如图: program e2; var yh:array[1..10,1..10] of integer; i,j:integer begin yh[1,1]:=1; for i:=2 to 10 do begin yh[i,1]:=1;yh[i,i]:=1; for j:=2 to i-1 do yh[i,j]:=yh[i-1,j-1]+yh[i-1,j]; end; writeln(‘yang hui:’); for i:=1 to 10 do begin write(‘ ’:40-3*i); for j:=1 to i do write(yh[i,j]:6); writeln; end; end.
• 对二维数组的输入与输出也可用二重循环来实现 对二维数组的输入与输出也可用二重循环来实现: • 输入 输入: • for i:=1 to 5 do • for j:=1 to 4 do read(a[i,j]); • • • • • • • • • 输出: 输出 for i:=1 to 5 do begin for j:=1 to 4 do write(a[i,j]:5); writeln; end; 数组初始化为0; 数组初始化为 ; for I:=1 to n do for j:=1 to n do a[I,j]:=0;
二维数组 当一维数组元素的类型也是一维数组时, 当一维数组元素的类型也是一维数组时,便构成了二 维数组。 维数组。 二维数组定义的一般格式: 二维数组定义的一般格式: array[下界 上界 ,下界 上界 of 元素类型; 下界1..上界 上界2] 元素类型; 下界 上界1,下界2..上界 如:var a:array[1..5,1..4] of integer;
1 1 1 1 1 4 3 6 • • • • • 1.输出杨辉三角的前 行(N<=30)。 输出杨辉三角的前N行 输出杨辉三角的前 。 Yanghui.pas Yanghui.in Yanghui.out 样例: 样例: 输入: 输入:5 输出:n行 数字之间的间隔场宽为10。 输出 行,数字之间的间隔场宽为 。 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1
则表示a是二维数组,共有 个元素, 则表示 是二维数组,共有5*4=20个元素,它们是: 是二维数组 个元素 它们是: a[1,1]a[1,2]a[1,3]a[1,4] [ , ] [ , ] [ , ] [ , ] a[2,1]a[2,2]a[2,3]a[2,4] a[2,1]a[2,2]a[2,3]a[2,4] a[3,1]a[3,2]a[3,3]a[3,4] [ , ] [ , ] [ , ] [ , ] a[4,1]a[4,2]a[4,3]a[4,4] [ , ] [ , ] [ , ] [ , ] a[5,1]a[5,2]a[5,3]a[5,4] [ , ] [ , ] [ , ] [ , ]
• fillchar(a,sizeof(a),0);
• • • • • • • • • • • • • • • • • • • •
应用举例 1.输入10名学生5门功课的成绩,输出各人各科成绩及总分。 program e1; var score:array[1..10,1..6] of integer; i,j:integer; begin for i:=1 to 10 do score[i,6]:=0; for i:=1 to 10 do for j:=1 to 5 do begin read(score[i,j]); score[i,6]:=score[i,6]+score[i,j]; end; for i:=1 to 10 do begin for j:=1 to 6 do write(score[i,j]:6); writeln; end; end.
• 2.棋盘问题 棋盘问题 • qipan.pas/c/c++ • 输入三个自然数,n,i,j(1<=i<=n,1<=j<=n).n表示有一个 行n列的棋盘 表示有一个n行 列的棋盘 输入三个自然数, 表示有一个 格子,( 表示棋盘中格子的位置如: ,(i,j)表示棋盘中格子的位置如 格子,( 表示棋盘中格子的位置如:n=4,i=2,j=3表示了棋盘中的第 表示了棋盘中的第 二行第三列的格子,如下图: 二行第三列的格子,如下图: 第一列 第二列 第三列 第四列 • 第一行 • 2,3 第二行 • 第三行 • 第四行 • (2,3)表示该格为第 行第 列 表示该格为第2行第 表示该格为第 行第3列 • 要求编制一个程序,根据输入的 要求编制一个程序,根据输入的n,i,j的值,输出与格子 在同一行、同 的值, 在同一行、 的值 输出与格子(i,j)在同一行 一列、同一对角线上的所有格子位置,例如: 一列、同一对角线上的所有格子位置,例如:当n=4,i=2,j=3时,输出的 时 结果是: 结果是: (2,1)(2,2)(2,3)(2,4) {同一行格子的位置 同一行格子的位置} 同一行格子的位置 (1,3)(2,3)(3,3)(4,3) {同一列格子的位置 同一列格子的位置} 同一列格子的位置 (1,2)(2,3)(3,4) {左上到右下对角线上的格子位置 左上到右下对角线上的格子位置} 左上到右下对角线上的格子位置 (4,1)(3,2)(2,3)(1,4) {左下到右上对角线上的格子位置 左下到右上对角线上的格子位置} 左下到右上对角线上的格子位置
pascal按行优先的顺序存储数组元素,依次把各行的元素放入 一串连续的存储单元中,数组的存储如图所示:
• 【例】设数组a[10..100,20..100]以行优先 的方式顺序存储,每个元素占4个字节,且 已知a[10,20]的地址为1000,则a[50,90]的 地址是________。 解:思路:a[50,90]的地址由3部分相加而成, 分别为首元素地址、a[50,90]所在行至第一 a[50,90] 行的行数乘以每行元素数和每元素所占字节 之积、a[50,90]在本行中的位置与每元素所 占字节之积。 即:1000+(50-10)*81*4+(90-20) *4=14240
• 输入文件:qipan.in,一行,n、i、j,三个数分别用空格 输入文件: 一行, 、 、 , 一行 分隔。 分隔。 • 输出文件:qipan.out,四行,分别为同行、同列、左上 输出文件: ,四行,分别为同行、同列、 到右下、左下到右上的格子位置。 到右下、左下到右上的格子位置。 • 样例输入: 样例输入: • 423 • 样例输出: 样例输出: • (2,1)(2,2)(2,3)(2,4) • (1,3)(2,3)(3,3)(4,3) • (1,2)(2,3)(3,4) • (4,1)(3,2)(2,3)(1,4)