数组练习


一、选择题
1.下面对数组类型定义描述正确的是(  )
A)数组的下标类型是有序类型
B)一个数组中的各元素类型可以不一样
C)数组的下标类型若为整型,则其上界一定要大于下界
D)PASCAL语言数组下标的下界要大于等于零

2.设有说明var a:array['a'..'z'] of real;
则a数组是(  )
A)一个存放字符数据的数组 B)一个存放实型元素的数组
C)一个具有20个数据的数组 D)能够存放26个元素的数组

3.设有如下说明:
const a=1;b=2;c=3;
var x:array[1..5] of integer;
且已知x[1]:=1;x[2]:=7;x[3]:=9;x[4]:=1;x[5]:=6;
则表达式:
(x[b]-1>x[5])and(x[c]>0)or not(x[a+b]>(a+b))的值是:
A)true B)false C)0 D)1
4.已有数组说明:var a:array[1..10] of integer;
a[1] a[2] .................................a[10]7 6 4 3 5 2 14 11 9 1 

执行语句writlen(a[a[7] div a[3]])后的输出结果是:
A)4 B)6 C)3 D)14

5.已知有说明:VAR a:array[1..10]of integer;
k,i:Integer;
下面程序段:
For i:=1 T0 10 DO
IF a[i]>a[k] then k:=i;
writeln(a[k]);
输出的是
A)数组中数的平均值 C)数组中数的最小值
B)数组中数的总和  D)数组中数的最大值

6.如果计算机中4个字节存放一个实型数,若有说明:
VAR A:ARRAY[1..10] OF Real;
则数组A需占用的存储区域是
A)10字节 B)20字节 C)80字节 D)40字节

二、看程序写结果

1.

var a:array[-3..3] of integer;
  i,k:integer;
begin
 k:=0;
 for i:=-3 to 3 do
  if  i<0  then  a[i]:=k+1
   else  a[i]:=k+2;
 writeln(a[3]-a[-3])
end.
output:

 

2.var a:array[1..30] of longint;
 n,i:integer;
begin
 readln(n);
 a[1]:=0;a[2]:=1;
 for i:=3 to n do a[i]:=a[i-1]+a[i-2];
 for i:=1 to n do write(a[i]:8);
 writeln
end.
输入:10

输出:

 

3.

var i,s,max:integer;a:array[1..10] of integer;
begin
 for i:=1 to 10 do read(a[i]);
 max:=a[1];s:=a[1];
 for i:=2 to 10 do
  begin
   if s<0 then s:=0;
   s:=s+a[i];
   if s>max then max:=s
  end;
 writeln(‘max=’,max)
end.
输入:-2 13 –1 4 7 8 –1 –18 24 6  

输出:max=

 
 

4.

var a:array['a'..'z'] of integer;
  b:char;
begin
 repeat
  read(b);
  if (b>='a')and(b<='z') then
   a[b]:=a[b]+1;
 until b='?';
 for b:='a' to 'z' do
  if a[b]<>0 then write(b,':',a[b],' ')
end.
输入:how many apples are there on the table?
输出:

 

5.

var a:array[1..10] of integer;
 i,j,temp:integer;
begin
 for i:=1 to 10 do read(a[i]);
 for i:=1 to 9 do
  for j:=i+1 to 10 do
   if a[i]<a[j] then
    begin
     temp:=a[i];a[i]:=a[j];a[j]:=temp
    end;
 for i:=1 to 10 do write(a[i]:8); writeln
end.
输入:87 65 35 156 5 54 7 68 9 81

输出:

 

6.

var a:array[0..1000] of integer;
 k,i,n,j:integer;
begin
 readln(n,k); j:=0;
 while n>=k do
 begin
  a[j]:=n mod k;  n:=n div k;  j:=j+1
 end;
 a[j]:=n;
 write(n,',',k,':');
 for i:=j downto 0 do write(a[i]:2); writeln
end.
输入:1288 3  输出:

三、填空题:请将每空的正确答案写在横线上

下面的程序从键盘接收任意6个数放入数组A中,假设这6个数为:8 1 4 2 5 6 ,则要输出一个具有如下内容的方阵。
8 1 4 2 5 6
6 8 1 4 2 5 
5 6 8 1 4 2 
2 5 6 8 1 4
4 2 5 6 8 1
1 4 2 5 6 8
var a:array[1..6] of integer;
 i,j,k:integer;
begin
 for i:=1 to 6 do read(__________);
 for i:=1 to 6 do
 begin
  if i=1 then k:=1
   else k:=____________;
  for j:=1 to_________do
  begin
   write(a[k]:2);
   if k=6 then k:=1
    else k:=______________
  end;
  writeln
 end
end.

 

下面的程序将n个学生的英文成绩从键盘输入,按0—59分、60—69分、70—79分、80—89分和90—100分分组统计人数。
const n=20;
var i,k:integer;

s:array[1..5]of integer;

a:array[l..n]of integer;

begin

for i:=1 to _____ do 

  s[i]:=0;

for i:=1 to _____ do

begin

_______________;

if a[i]>=90 then k:=1

else if a[i]>=80 then k:=2

 else if a[i]>=70 then k:=3

else if a[i]>=60 then k:=4

else k:=5;

s[k]:=_______

end;

for i:=1 to 5 do
write(a[i]:4);

writeln

end.

 

四、编写程序
1.随机产生20个100以内的数,输出;按从小到大的顺序排序,输出。

2.判断一字符串是否是回文数,如121、12321、ABA等(字符串输入时以‘.’结束)。
如输入:12321.
输出:yes

3.围绕着山顶有10个洞,一只兔子和一只狐狸住在各自的洞里,狐狸总想吃掉兔子,一天兔子对狐狸说,你想吃我有一个条件,你先把洞编号1到10,你从第10洞出发,先到第1号洞找我,第二次隔一个洞找我,第三次隔两个洞找我,以后依次类推,次数不限,若能找到我你就可以饱餐一顿,在没找到我之前不能停止,狐狸一想只有10个洞,寻找的次数又不限,哪有找不到的道理,就答应了条件,结果狐狸跑得昏了过去也没找到兔子,请问兔子躲在哪个洞里。程序中可假定狐狸找了1000次。 

4.求一个5 X 5数阵中的马鞍数,输出它的位置。所谓马鞍数,是指在行上最小而在列上最大的数。如下:
5 6 7 8 9
4 5 6 7 8
3 4 5 2 1
2 3 4 9 0
1 2 5 4 8
则1行1列上的数就是马鞍数。

5、验证数学黑洞:所有四位数,除了数字全相同的外,其它的,经过不多于七次的下列操作,一定可以得到6174;并且,一旦得到6174之后,就掉进黑洞,再也得不到其它的数(6174:7641-1467 = 6174):
将这个四位数的数字按从大到小和从小到大重组成两个数,大数减去小数。
例:输入3214
(1)4321 - 1234 = 3087
(2)8730 - 378 = 8352
(3)8532 - 2358 = 6174