第6章 同步练习数组(A)
一、单项选择题
1.数组下标只允许是( )。
A.整型 B.字符型 C.有序类型 D.枚举类型和子界类型; 2.在引用数组元素时,数组元素的下标只可以是( )。
A.常量 B.表达式 C.变量 D.常量、变量及表达式均可。 3.以下数组说明错误的是( )。
A.var a:array[boolean]of integer; B.var a:array[i..j]of integer;
C.var num:array[0..8] of array['a'..'f']of integer; D.var a:array['a'..'z']of Boolean;
4.有数组说明:var a:array[1..8]ofinteger;则下列数组元素的引用正确的是( )。 A.a[8] B.a[10] C.a[5.5] D.a(0)
5.设数组a和变量i,j,k,m,n,均已说明,且各自赋值如下: I:=1;j:=2;k:=3;m:=4; for n:=l to 9 do a[n]:=n; 下面数组元素的值等于3的是( )。
A.a[i*j] B.a[m div j] C.a[a[j+k-2]] D.a[a[k-i]+3] 6.设有说明var a:array['A'..'E',1..4,boolean]of real; 则a['A',3]是( )。
A.一个实型的数组元素
B.一个数组,该数组具有两个实型数组元素 C.一个数组,该数组具有4*2个实型数组元素 D.一个数组,该数组具有5*4*2个实型数组元素
7.下列语句定义了一个二维数组score,其中定义正确的是( )。 A.type sore=array[1..3,1..20]of real; B.var sore:array[1..3,1..20]of real;
C.type al=array[1..20]of real;score=array[1..3]of al; D.var score=array[1..3]ofarray[1..20]of real; 8.有数组说明:var a:array[1..3,1..50]of integer;,则下列对数组元素的引用非法的是( )。
A.a[2,5] B.a[1+2,20] C.a[50,1] D.a[3,20] 9.若有数组说明:
type a=array[0..3,O..4]of char; var pup:a;
则下列说法正确的是( )。 A.此说明语句不正确
B.这是一个二维数组pup,包含3行4列,共12个元素 c.这是一个字符型数组
D.可以这样引用数组元素a[2,4]
10.已知m,n为常量,若有二维数组a的说明: var a:array[0..m,0..n];
则在元素a[i][j]前的元素个数为( )。
A.i*(n+1)+j B.j*(n+1)+i C.i*(n+1)+j-l D.i*(n+1)+j+1 11.若有二维数组a的说明:
var a:array[0..m,0._n];
则计算数组a的任一元素a[i][j]在数组中位置的公式为( )。
A.i*(n+1)+j B.j*(n+1)+i C.i*(n+1)+j-1 D.i*(n+j)+j+l 12.设4个字节存放一个实型数,若有说明:
var a:array[1..10]of array[boolean]of real; 则数组a需占用的存储空间是( )。
A.10字节 B.20字节 C.80字节 D.40字节
13.要用一个数组存放某班30人3门课的考试成绩(考试成绩保留1位小数),下面哪 个说明中的数组可以存放这些数据?( )
A.var score:array[1..3,1..30]of integer;
B.var score:array['A'..'C' ,1..30]of integer; C.var score:array[1..30,boolean]of real; D.var score:array[1..30,'A'..'C']of real; 14.有如下程序: Var
num:array[1..3]of integer; i,j:integer; begin
for i:=1 to 3 do num[i]:=i; i:=1;j:=3 ; repeat
num[i]:= num[j]+1;i:=i+1;j:=j-1; until i>3 ;
for i:=1 to 3 do write(num[i]:5); end.
该程序的运行结果是( )。
A.4 3 2 B.2 3 4 C.4 5 3 D.4 3 5 15.有如下程序:
program writeA; var
n:integer;
a:array[1..100]of integer; begin a[1]:=1;
for n:=2 to 100 dO a[n]:=a[n-1]+n;
writeln(a[15],’,’a[20]) end.
该程序运行后,输出的结果是( )。
A.15,20 B.150,240 C.120,240 D.120,210 16.有数组说明如下:
type
a=array[1..100]of integer; b=a;
var x:a; y:b;
z:array[1..100]of integer; 则下列语句止确的是( )。
A.x:=y; B.y:=z; C.x:=z; D.z:=y; 17.请看下面的程序: program test; type
tchar=array[1..26] of char; var
mechar:tchar;
procedure readchar(var x:array[1..26]of char); var
i:integer; begin
for i:=1 to 26 do readln(x[i]); end;
procedure writechar(var x:array[1..26] of char); var
i:integer; begin
for i:=1 to 26 do write(x[i]); end; begin
readchar(mehar); writechar(mehar); end.
其中有( )行语句有错误。
A.O B.1 C.2 D.3
18.字符串可以像其他数据类型一样进行赋值操作,例如: var a:string[5]; begin
a:= ’abcdefgh’; end.
这里字符串abcdefgh超出了字符串变量a的最大长度,所以( ) A.程序出错,不运行
B.程序运行,但是跳过赋值语句
C.程序运行,但是超出的部分将被截掉 D.程序会自动突破限制
19.下面有关字符串的关系表达式值为true是( )。 A.’A’>’B’ B. ’B’>lb’ C. ’ab'>'ac’。 . ’aA’>’Aa’ D
20.有字符串说明:var a,b,c:string;下面( )不能实现将a,b两个字符串连接。 A.c:=a+b: B.c:=a-b; C.c:=concat(a,b); D.insert(a,b,0); 二、填空题
1.数组下标必须是 类型,比如说,可以是 类型、 类型、 类型和 类型。下标的下界和上界必须是 量。
2.一维数组的定义格式为:type数组类型名=array[常量l..常量2]of 。其中常量1叫做 ,用于规定下标的 值;常量2叫做 , 用于规定下标的 值。并且下界必须 (填“大于”或 “小于”或“不大于”或“不小于”)上界。
3.数组的基类型就是数组中 的数据类型,它可以是 数据类型。 4.数组变量名必须是一个 的标识符。
5.数组中的每个元素都相当于一个相应类型的 。但是,数组元素没有单独的变量名,必须通过 和 来确定。因此,数组元素也称为下标变量。数组元素的引用格式为:数组变量名[ ]。
6.数组定义:vat num:array[16..4]ofreal;是 的,因为 。数组定义: var edge:array[0.1..0.9]of real;是 的,因为 。
7.使用数组时,通常是把数组元素当作相应类型的变量来使用,其类型由 决定。比如数组说明:var score:array[1..50]of real;数组score中的元素都是 。
8.引用数组元素时,下标可以是 、 或 。 9.枚举类型的定义格式: type
枚举类型名=(枚举值1,枚举值2,枚举值3,?,枚举值n);其中枚举类型名和枚举值都应该是合法的 。 10.有变量说明:
Var
age:O..300;
age是一个 类型。其中0叫做这个变量类型的 ,300叫做这个变量类型的 。 三、判断题
1.可以将性别定义为枚举类型:var sex=(male,female);。( ) 2.可以将棋子的颜色定义为枚举类型:type colChess=(red,black);。( ) 3.其实枚举值就是字符串。( )
4.不同类型的枚举值不能相互赋值或进行运算。( ) 5.可以将人的年龄定义为子界类型:var age:O..200;。( ) 6.可以将月份定义为子界类型:type month:1..12;。( ) 7.数组下标可以是任意数据类型。( )
8.定义数组必须先定义数组类型标识符,再定义该类型的数组变量。( ) 9.定义了数组类型标识符score后,可以这样引用数组元素:score[n]。( ) 10.可以这样定义数组var a:array[200..150];。( ) 11.可以这样定义数组varb:array[1..n];。( ) 四、阅读程序 1.程序清单: program lx641 ; var
i,s:integer;
a:array[1..5]of integer; begin s:=0;
for i:=1 to 5 do begin
read(a[i]); s:=s+a[i]; end; writeln;
writeln(s/5:8:2); end.
运行程序,输入“ll,12,13,14,15”后,输出结果为 。 2.程序清单: program lx642; var
i:integer;
a:array[1..20]of integer; begin
a[1]:=1 ; a[2]:=1;
for i:=3 to 20 do a[i]:=a[i-2]+a[i-1]; write(a[5]); end.
运行程序,输出结果为 。 3.程序清单:
program lx643; Var
i,j,s,a:integer;
num:array[1..10]of integer; begin s:=0 ; a:=0; j:=0 ;
for i:=1 to 10 do begin
read(num[i]);
if odd(num[i]) then s:=s+num[i] else
begin a:=a+num[i]; j:=j+1
end end;
writein(S);
writeln(trunc(a/j)); pnd
运行程序,输入“17 20 -12 16 4 5 77 0 8 14”后,输出结果为 五、完善程序
1.问题描述:输入某个班50名学生的成绩,排出名次,并且给出每个学生原来的编号 (即输入的次序)。
算法分析:定义两个数组。一个为实型数组a,用来存放读入的分数。另一个为整型数组b,用来记录每个学生原来的名次。开始数组b的元素的值依次为l,2,3,4,5,?50。当排序时,如果数组a的元素发生了交换,也同时交换它们所对应的数组b的元素,使其读入的数据与其对应的输入次序保持同步交换。
程序清单:
program lx651 ; Var
a:array[1..50]of real; b:array[1..50]of integer; i,j,tem:integer; temp:real; Begin
for i:=1 to 50 do read(a[i]);