一维数组习题
- 格式:ppt
- 大小:109.50 KB
- 文档页数:12


一、填空题
1.通常采用___________存储结构来存放数组 。对二维数组可有两种存储方法:一种是以___________为主序的存储方式,另一种是以___________为主序的存储方式。
2. 用一维数组B与列优先存放带状矩阵A中的非零元素A[i,j] (1≤i≤n,i-2≤j≤i+2),B中的第8个元素是A 中的第_ _行,第_ _列的元素。
3.设n行n列的下三角矩阵A已压缩到一维数组B[1..n*(n+1)/2]中,若按行为主序存储,则A[i,j]对应的B中存储位置为_______。
4. 所谓稀疏矩阵指的是_ 。
5. 广义表简称表,是由零个或多个原子或子表组成的有限序列,原子与表的差别仅在于____ 。为了区分原子和表,一般用 ____表示表,用 _____表示原子。一个表的长度是指 __,而表的深度是指__ __
6、设数组a[1..50,1..80]的基地址为2000,每个元素占2个存储单元,若一行序为主序顺序存储,则元素a[45,68]的存储地址为 ;若以列序为主序存储,则元素a[45,68]的存储地址为 。
7、有一个8ⅹ8的下三角矩阵A,若采用行序为主序顺序存储于一维数组a[1..n],则n的值为 。
8、三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素
的 、 和 。
9、已知广义表A=(((a))),则A的表头为: ,A的表尾为: 。
1.以下对一维整型数组a的定义,正确的是_。(2分)
A.int a(10) ;
B.int n = 10 , a[n] ;
C.int n ;
scanf( "%d" , &n ) ;
int a[n] ;
D.int a[10] ;
2.若有定义:int a[10] ;,则对a数组元素的正确引用是_。(2分)
A.a[10]
B.a[3.5]
C.a(5)
D.a[10-10]
3.对定义 int a[10] = {6 , 7 , 8 , 9 , 10} ; 的正确理解是_。(2分)
A.将5个初值依次赋给a[1]--a[5]
B.将5个初值依次赋给a[0]--a[4]
C.将5个初值依次赋给a[6]--a[10]
D.因为数组长度与初值个数不相同,所以此语句不正确
4..若有定义:int a[3][4]; , 则对a数组元素的正确引用是_。(2分)
A.a[3][4]
B.a[1,3]
C.a[1+1][0]
D.a(2)(1)
5.以下对二维数组a初始化正确的语句是_。(2分)
A.int a[2][ ]={{0 , 1 , 2}, {3 , 4 , 5}};
B.int a[ ][3]={{0, 1, 2}, {3, 4, 5}};
C.int a[2][4]={{0, 1 , 2}, {3 , 4}, {5}};
D.int a[ ][3]={{0, 1, 2}, { }, {3, 4}};
6.对二维数组a进行如下初始化:
int a[ ][3]={0 , 1 , 2 , 3 , 4 , 5};
则a[1][1]的值是_。(2分)
A.0
B.3
C.4
D.1
7.下面程序段的运行结果是_。(2分)
#include
int main( ){
int i , x[3][3] = {1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9} ; for( i = 0 ; i < 3 ; i++ )
一、选择题
1. 以下对一维整型数组a的正确说明是 。
A.int a(10); B.int n=10, a[n];
C.int n;
scanf(“%d”,&n);
int a[n]; D.#define SIZE 10
int a[SIZE]
2. 若有说明:int a[10]; ,则对a数组元素的正确引用是 。
A.a[10] B.a[3.5] C.a(5) D.a[10-10]
4. 以下对二维数组a的正确说明是 。
A.int a[3][ ]; B.float a(3,4);
C.double a[ ][4]; D.float a(3)(4);
5. 若有说明:int a[3][4]; 则对a数组元素的正确引用是 。
A.a[3][4] B.a[1, 3] C.a[1+1][0] D.a(2)(1)
6. 以下能对二维数组a进行正确初始化的语句是 。
A.int a[2][ ]={{1, 0, 1}, {5, 2, 3}};
B.int a[ ][3]={{1,2,3},{4,5,6}};
C.int a[2][4]={{1,2,3},{4,5},{6}};
D.int a[ ][3]={{1,0,1,0},{ },{1,1}};
7. 下面程序段 (每行代码前面的数字表示行号)。
1 int a[3]={3*0};
2 int i
3 for(i=0; i<3; i++) scanf(“%d”,&a[i]); 4 for(i=1; i<3; i++) a[0]=a[0]+a[i];
一维数组
【例1】输入50个数,要求程序按输入时的逆序把这50个数打印出来;也就是说,请你按输入相反顺序打印这50个数
分析:我们可定义一个数组a用以存放输入的50个数,然后将数组a内容逆序输出,源程序如下
program ex5_1;
type
arr=array[1..50]of integer; {说明一数组类型arr}
var
a:arr;
i:integer;
begin
writeln('Enter 50 integer:');
for i:=1 to 50 do read(a[i]);{从键盘上输入50个整数}
readln;
for i:=50 downto 1 do {逆序输出这50个数}
write(a[i]:10);
end.
【例2】输入十个正整数,把这十个数按由大到小的顺序排列(将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序中的―简单选择排序‖是一种较简单的方法)
分析: 要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,……;因此,我们第一步可将第一个数与其后的各个数依次比较,若发现,比它大的, 则与之交换,比较结束后,则第一个数已是最大的数。同理,第二步,将第二个数与其后各个数再依次比较,又可得出次大的数。如此方法进行比较,最后一次,将 第九个数与第十个数比较,以决定次小的数。于是十个数的顺序排列结束。
例如下面对5个进行排序,这个五个数分别为8 2 9 10 5。按选择排序方法,过程如下:
初始数据 :8 2 9 10 5
第一轮排序:8 2 9 10 5
9 2 8 10 5
10 2 8 9 5
10 2 8 9 5
第二轮排序:10 8 2 9 5
10 9 2 8 5
10 9 2 8 5
第三轮排序:10 9 8 2 5
10 9 8 2 5
第四轮排序:10 9 8 5 2