数组

来源:互联网 发布:原生js创建节点对象 编辑:程序博客网 时间:2024/05/29 09:17

引入:为什么要使用数组 

例:输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩 。

一维数组类型的定义 

一般格式: type 数组类型名=array[下标1..下标2] of <基类型>; 

说明:其中array和of是pascal保留字。下标1和下标2 是同一顺序类型,且下标2的序号大于下标1的序号。它给出了数组中每个元素(下标变量) 允许使用的下标类型,也决定了数组中元素的个数。基类型是指数组元素的类型,它可以是任何类型,同一个数组中的元素具有相同类型。因此我们可以说,数组是由固定数量的相同类型的元素组成的。 

实例

一般在定义数组类型标识符后定义相应的数组变量,如:    type             arraytype=array[1..8] of integer;    var             a1,a2:arraytype;   
其中arraytype为一个类型标识符,表示一个下标值可以是1到 8,数组元素类型为整型的一维数组;而a1,a2则是这种类型的数组变量。
也可以将其全并起来:
              var a1,a2:array[1..8]of integer;  

一维数组的引用 

当定义了一个数组,则数组中的各个元素就共用一个数组名( 即该数组变量名),它们之间是通过下标不同以示区别的。对数组的操作归根到底就是对数组元素的操作。一维数组元素的引用格式为:   数组名[下标表达式]

说明:①下标表达式值的类型,必须与数组类型定义中下标类型完全一致,并且不允许超越所定义的下标下界和上界    ②数组是一个整体,数组名是一个整体的标识,要对数组进行操作,必须对其元素操作。数组元素可以像同类型的普通变量那样作用。如:a[3]:=34;是对数组a中第三个下标变量赋以34的值。read(a[4]);是从键盘读入一个数到数组a第4个元素中去。   特殊地,如果两个数组类型一致,它们之间可以整个数组元素进行传送。 
对于一维数组的输入与输出,都只能对其中的元素逐个的输入与输出。通常用循环结构来完成这一功能 。

一维数组的初始化

下面是几个常用输入数组元素的例子:
for i:=1 to 10 do read(a[i]); {——从键盘读入数组元素的值;最常用的方法} 
for i:=1 to 10 do a[i]:=i; {——数组元素a[1]到a[10]的值分别为1到10;数据赋初值} 
for i:=1 to 10 do a[i]:=0; {——数组元素清0;最常用的数据初始化的方法}
for i:=1 to 10 do a[i]:=random(100); {——随机产生10个100以内的数,赋给各数组元素} 

例:输入50个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩 。


type
  arr=array[1..50] of integer;
var
  a:arr;
  i:integer;
  sum:real;
begin
  sum:=0;
  for i:=1 to 50 do
    begin
      read(a[i]);
      sum:=sum+a[i];
    end;
  sum:=sum/50;
  for i:=1 to 50 do
    begin
      if a[i]<sum then
        writeln(i,' ',a[i]);
    end;
end.

练习

从键盘输入10个数,将这10个数逆序输出,并求这10个数的和,输出这个和。 

program p1;

var

 a:array [1..10] of integer;

 i,s:integer;

begin

 for i:=1 to 10 do read(a[i]);

 for i:=10 downto 1 do write(a[i],' ');

 s:=0; 

 for i:=1 to 10 do s:=s+a[i];

 writeln('s=',s)

; end. 

思考:我们可以边读入或边输出时求和,减少一次循环。请改写程序

例题

1、在长度为n的数组里,删除第K个数,输出删除后的数组。
    输入:第一行包含两个数n(0<n<=100),表示数组的长度,k(K<=n),表示要删除的数。第二行包含n个数。
    输出:删除后的数组。
2、在长度为n的数组里,在第K个位置插入值M,输出插入后的数组。
输入:第一行包含三个数:n(0<n<=100),k(0<k<=n),m(整型范围)。第二行包含n个数。
输出:插入后的数组。
3、将一个数组中的所有元素对调存放,如:

4、查找数组A 中是否有等于NUM 这个数,有则返回这个数在数组中的位置;没有,则返回0。(假设A 中有N个互异的整数)

二维数组

当一维数组元素的类型也是一维数组时,便构成了二维数组。二维数组定义的一般格式:  array[下标类型1] of array[下标类型2] of 元素类型;
但我们一般这样定义二维数组:  array[下标类型1,下标类型2] of 元素类型

说明:其中两个下标类型与一维数组定义一样,可以看成"下界1..上界1"和"下界2..上界2",给出二维数组中每个元素( 双下标变量)可以使用下标值的范围。of后面的元素类型就是基类型。 
二维数组在编程中多数用于描述二维的关系:如地图、棋盘、城市街道、迷宫等等。而二维数组元素有两个下标:第一个下标表示该元素在第几行,第二个下标表示在第几列。二维数组的定义格式如下

var  a:array[1..10,1..5] of integer; 

二维数组的输入输出

for i:=1 to 10 do{————控制行数}  

begin  

 for j:=1 to 5 do read(a[i,j]);{————第一行读入5个元素}  

 readln;{————读入一个换行符}  

end; {——最常用的方法:从键盘读入数据初始化二维数组}


for i:=1 to 10 do  

for j:=1 to 5 do a[i,j]:=0; {——最常用的方法:将二维数组清0}


for i:=1 to 10 do

  begin  

 for j:=1 to 5 do write(a[i,j],’ ‘);  

 writeln;

 end; {——最常用的输出方法:按矩阵形式输出二维数组的值}

例题

竞赛小组共有N位同学,这学期每位同学共参与了三项比赛,请统计每位同学的平均分。
输入格式:有N行,对于第i行,每行三个整数xi,Yi,Zi(0<=Xi<=Yi<=Zi<=10),表示第i个同学三项比赛的得分
输出格式:输出共一行,包含N个数字,数字之间用空格隔开。
分析:定义一个20行3列的二维数组来存放这些成绩。定义一个20个元素的一维数组来存放平均分。  

program p1;

var

   a:array [1..20,1..3] of integer;

 b:array [1..20] of real;

 i,j:integer;

begin

 for i:=1 to 20 do 

  begin  

   for j:=1 to 3 do 
        read(a[i,j]);

   readln;  

 end;  

for i:=1 to 20 do b[i]:=0;

 for i:=1 to 20 do

  begin  

  for j:=1 to 3 do 
        b[i]:=b[i]+a[i,j];  

  b[i]:=b[i]/3;

  end;

for i:=1 to 20 do 
    writeln(b[i]:0:2);  

writeln;

end. 

练习

1、定义一个10×10的二维数组,将每个元素的值设为其行列值之和,并将结果输出到屏幕上(10行10列,尽量工整)。 


2、输入一个二维数组,找出其中最小的数,输出它的值以及所在行号和列号。


3、找出一个二维数组的鞍点,即该位置上的元素在该行上最大、该列上最小,也可能没有鞍点。数组的值从键盘输入,如:     19  23  21  13    61  25  34  45    67  32  39  29    39  98  27  56 如果没有鞍点则显示NO!,有则显示每个鞍点的位置和值,一个占一行。


4、矩阵转置:输入一个矩阵,将其右旋90度,输出。如
1 2 3             3 6 9
4 5 6     →      2 5 8
7 8 9             1 4 7

0 0
原创粉丝点击