第5章 数组习题
第5章《数组》复习题

第5章数组一、选择题1、下列关于数组的描述正确是:()A) 数组的长度是固定的,而其中元素的数据类型可以不同B) 数组的长度是固定的,而其中元素的数据类型必须相同C) 数组的长度是可变的,而其中元素的数据类型可以不同D) 数组的长度是可变的,而其中元素的数据类型必须相同2、在C++语言中引用数组元素时,下面关于数组下标数据类型的说法错误的是:()A) 整型常量 B) 整型表达式C) 整型常量或整型表达式 D) 任何类型的表达式3、要定义数组A,使得其中每个元素的数据分别依次为:3、9、4、8、0、0、0,错误的定义语句是:()A) int A[]={3,9,4,8,0,0,0}; B) int A[9]={3,9,4,8,0,0,0};C) int A[]={3,9,4,8}; D) int A[8]={3,9,4,8};4、有如下数组声明:int value[30];,下标值引用错误的是:()A) value[30] B) value[0] C) value[10] D) value[20]5、以下叙述中错误的是:()A)对于double类型数组,不可以直接用数组名对数组进行整体输入或输出B)数组名代表的是数组所占存储区的首地址,其值不可改变C)当程序执行中,数组元素的下标超出所定义的下标范围时,系统自动扩展数组长度D)可以通过赋初值的方式确定数组元素的个数6、在C++语言中,一维数组的定义方法为:()。
类型说明符数组名A)[常量表达式] B)[整型常量] C)[整型变量] D)[整型常量]或[整型表达式]7、对以下说明语句的正确理解是()。
int a[10]={6,7,8,9,10};A)将5个初值依次赋给a[1]至a[5] B)将5个初值依次赋给a[0]至a[4]C)将5个初值依次赋给a[6]至a[10]D)因为数组长度与初值的个数不相同,所以此语句不正确8、假定short类型变量占用两个字节,其有定义:short x[10]={0,2,4};,则数组x在内存中所占字节数是()。
第五章,,华工数据结构试卷资料,电信学院,

第五章,,华⼯数据结构试卷资料,电信学院,习题5.1 选择题1、⼀维数组和线性表的区别是( A )。
A、前者长度固定,后者长度可变B、后者长度固定,前者长度可变C、两者长度均固定D、两者长度均可变2、设W为⼀个⼆维数组,其每个数据元素W ij占⽤6个字节,⾏下标i从0到8,列下标j从2到5,则⼆维数组W的数据元素共占⽤(C)个字节。
A、480 B、192 C、216 D、1443、在稀疏矩阵的⾏逻辑链式存储中,每个⾏单链表中的结点都具有相同的( A )。
A、⾏号B、列号C、元素值D、地址4、⼆维数组M的元素是4个字符(每个字符占⼀个存储单元)组成的串,⾏下标i的范围从0到4,列下标j的范围从0到5,M按⾏序存储时元素M[3][5]的起始地址与M按列序存储时的元素()的起始地址相同。
A 、M[2][4] B、M[3][4] C、M[3][5] D、M[4][4]5、稀疏矩阵⼀般的压缩存储⽅法有两种,即(C)。
A、⼆维数组和三维数组B、三元组和散列C、三元组和⼗字链表D、散列和⼗字链表5.2 填空题1、⼀维数组的逻辑结构是(线性表),存储结构是(顺序存储);对于⼆维或多维数组,分为按(⾏序)和(列序)两种不同的⽅式存储。
2、对于⼀个⼆维数组A[m][n],若按⾏序为主序存储,则任⼀元素A[i][j]相对于A[0][0]的地址为(A+(i*m+j)*每个元素所占字节数)。
3、已知⼴义表A=((a,b,c),(d,e,f)),则运算head(tail(tail(A)))=(e)。
4、三维数组R[c1‥d1,c2‥d2,c3‥d3]共含有((d1-c1+1)*(d2-c2+1)*(d3-c3+1))个元素。
(c1≤d1,c2≤d2,c3≤d3)5、⼆维数组A[10‥20][5‥10]以⾏序为主序存储,每个元素占4个存储单元,且A[10][5]的存储地址是1000,则A[18][9]的地址是(1368)。
5.3 应⽤题1、按⾏优先存储⽅式,写出三维数组A[3][2][4]在内存中的排列顺序及地址计算公式(假设每个数组元素占⽤L个字节的内存单元,a[0][0][0]的内存地址为Loc(a[0][0][0]))。
C语言第五章习题带答案

练习5-1答案一、选择题1.合法的数组说明语句是( B )。
A.int a[]="string"; B.int a[]={0,1,2,3,4,5};C.char a="string"; D.char a[5]={'0', '1', '2', '3', '4', '5'};2.以下对一维整型数组a的说明正确的选项是( D )。
A.int a(10); B.int n=10, a[n]; C.int n; D.#define SIZE 10scanf("%d", &n); int a[SIZE];int a[n];3.:int a[10];,那么对a数组元素的正确引用是( D )。
A.a[10] B.a[3.5] C.a(5) D.a[10-10] 4.以下对一维数组a进行正确初始化的语句是( C )。
A.int a[10]=(0, 0, 0, 0, 0); B.int a[10]={};C.int a[]={0}; D.int a[2]={10, 9, 8};5.对以下说明语句的正确理解是( B )。
int a[10]={6, 7, 8, 9, 10};A.将5个初值依次赋给a[1]至a[5]B.将5个初值依次赋给a[0]至a[4]C.将5个初值依次赋给a[6]至a[10]D.因为数组长度与初值的个数不相同,所以此语句不正确二、填空题6.求所有不超过200的N值,N的平方是具有对称性质的回文数。
所谓回文数就是将一个数从左到右与从右到左读都是一样的,例如:34543和1234321都是回文数。
例如:满足题意要求的数有:N=1,11*11=121;N=111,111*111=12321。
#include <stdio.h>main(){int m[16], n, i, t, count=0;long a, k;printf("Result is:\n");for (n=10; n<200; n++){ k=0;t=1;a=n*n;for (i=1; a!=0; i++){ ①;a/=10;}for (; i>1; i--){ k+=m[i-1]*t;②;}if ( ③ ) printf("%2d:%10d %10d\n", ++count, n, n*n);}}那么①为( m[i]=a%10; )、②为( t*=10; )、③为( k==n*n )。
第四、五章串、数组和广义表练习题答案

第四、五章串、数组和广义表练习题答案一.填空题1. 不包含任何字符(长度为0)的串称为空串;由一个或多个空格(仅由空格符)组成的串称为空白串。
2. 设S=“A;/document/Mary.doc”,则strlen(s)= 20 , “/”的字符定位的位置为3。
3. 子串的定位运算称为串的模式匹配;被匹配的主串称为目标串,子串称为模式。
4. 设目标T=”abccdcdccbaa”,模式P=“cdcc”,则第 6 次匹配成功。
5. 若n为主串长,m为子串长,则串的古典(朴素)匹配算法最坏的情况下需要比较字符的总次数为(n-m+1)*m。
6. 假设有二维数组A6×8,每个元素用相邻的6个字节存储,存储器按字节编址。
已知A的起始存储位置(基地址)为1000,则数组A的体积(存储量)为288 B ;末尾元素A57的第一个字节地址为1282 ;若按行存储时,元素A14的第一个字节地址为(8+4)×6+1000=1072 ;若按列存储时,元素A47的第一个字节地址为(6×7+4)×6+1000)=1276 。
(注:数组是从0行0列还是从1行1列计算起呢?由末单元为A57可知,是从0行0列开始!)7. 〖00年计算机系考研题〗设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为8950 。
答:不考虑0行0列,利用列优先公式:LOC(a ij)=LOC(a c1,c2)+[(j-c2)*(d1-c1+1)+i-c1)]*L 得:LOC(a32,58)=2048+[(58-1)*(60-1+1)+32-1]]*2=89508. 三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的行下标、列下标和元素值。
9.求下列广义表操作的结果:(1)GetHead【((a,b),(c,d))】=== (a, b) ; //头元素不必加括号(2)GetHead【GetTail【((a,b),(c,d))】】=== (c,d) ;(3)GetHead【GetTail【GetHead【((a,b),(c,d))】】】=== b ;(4)GetTail【GetHead【GetTail【((a,b),(c,d))】】】=== (d);10.C语言规定,字符串常量按_字符数组_____处理,它的值在程序的执行过程中是不能改变的。
C语言程序设计(第3版)第5章习题参考答案

printf(" 4: insert 5:delete 6:exit \n");
while(1)
{ printf("\nplease input a menu option:");
scanf("%d",&iMenu);
switch(iMenu)
break;
case 4: printf("\nplease input the data to be inserted:");
scanf("%d",&iInsert);
for(i=0;i<10;i++)
{
if(iInsert>iScore[i])
{
iFlag=i;
break;
}
}
for(i=10;i>iFlag;i--)
{
if(iScore[j]<iScore[j+1])
{
iTemp = iScore[j];
iScore[j] = iScore[j+1];
iScore[j+1] = iTemp;
}
}
}
printf("\nthe sorted datas :");
for(i=0;i<10;i++)
printf("%d ",iScore[i]);
printf("%d\t",s[i][0]);
for(j=1;j<=i;j++)
数据结构第五章习题答案

1.二维数组A行下标i的范围从1到12,列下标j的范围从3到10,采用行序为主序存储,每个数据存储元素占用4个存储单元,该数组的首地址(既A[1][3]的地址)为1200,则A[6][5]的地址为(D)A.1400B.1404C.1372D.13682.有一个M*N的矩阵A,若采用行序为主序进行顺序存储,每个元素占用8个字节,则A ij (1≤i≤M,1≤i≤N)元素的相对字节地址(相对首元素地址而言)为(B)A.((i-1)*N+j)*8B.((i-1)*N+j-1)*8C.(i*N+j-1)*8D.((i-1)*N+j+1)*83.稀疏矩阵一般的压缩存储方法有两种,即(D)A.二维数组和三维数组B.三元组和散列C.散列和十字链表D.三元组和十字链表4.若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种观点(B)A.正确B.错误5.广义表((a,b),c,d)的表头是(C),表尾是(D)。
A.aB.bC.(a,b)D.(c,d)6.一个广义表的表头总是广义表,这个断言是(B)A.正确B.错误7.二维数组A[10][20]采用列序为主方式存储,每个元素占一个存储单元,并且A[0][0]的存储地址是200,则A[6][12]的地址是(326)8.有一个10阶对称矩阵A,采用压缩存储方式(以行序为主存储,且A[0][0]=1),则A[4][3]的地址是(14)9.一个广义表为(a,(a,b),d,e,((i,j),k)),则该广义表的长度为(5),深度为(3)10.广义表((a),((b),c),(((d))))的表头是((a)),表尾是((((b),c),(((d)))))11.已知广义表A=((a,b,c),(d,e,f)),则广义表运算head(tail(tail(A)))=(e)12.已知广义表GL=(a,(b,c,d),e),运用head和tail函数取出GL中的原子b的运算是(head(head(tail(GL))))13.特殊矩阵和压缩矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:稀疏矩阵在进行压缩存储后会失去随机存取的功能,因为非零元素的位置没有办法确定。
数据结构第五章数组习题

第五章数组习题1、假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。
A、808B、818C、1010D、10202、数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。
A、1175B、1180C、1205D、12103、若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定a ij(i<j)的位置k的关系为( )。
A、i*(i-1)/2+jB、j*(j-1)/2+iC、i*(i+1)/2+jD、j*(j+1)/2+i4、对稀疏矩阵进行压缩存储目的是()。
A、便于进行矩阵运算B、便于输入和输出C、节省存储空间D、降低运算的时间复杂度5、已知广义表L=((x,y,z), a, (u,t,w)),从L表中取出原子项t的运算是()。
A、head(tail(tail(L)))B、tail(head(head(tail(L))))C、head(tail(head(tail(L))))D、head(tail(head(tail(tail(L)))))6、已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是( )。
A、head(tail(LS))B、tail(head(LS))C、head(tail(head(tail(LS)))D、head(tail(tail(head(LS))))7、多维数组之所以有行优先顺序和列优先顺序两种存储方式是因为()。
A、数组的元素处在行和列两个关系中B、数组的元素必须从左到右顺序排列C、数组的元素之间存在次序关系D、数组是多维结构,内存是一维结构8、二维数组M[0..7,0..9]的元素是由4个字符组成的串(每个字符占用1个存储单元),存放M需要存储单元数为()。
C语言程序设计教程第五章练习题题目

单选题1、关于数组的定义与初始化,下列哪一项是错误的()A.int arr[5] = {1,2,3,4,5};B.int arr[] = {1,2,3,4,5};C.int arr[5] = {1,2,3};D.int arr[5] = {1,2,3,4,5,6};2、在定义数组int arr[10]后,下列选项中对arr的引用正确的是()A.arr[10]B.arr[6.3]C.arr(6)D.arr[0]3、在C语言中,引用数组元素时,其数组下标的数据类型允许是()4、若int arr[5] = {1,2,3}; 则arr[2]的值为()5、在执行int arr[][3] = {1,2,3,4,5,6}:语句后,arr[1][0]的值为()6、关于二维数组,下列选项能正确定义并赋初值的是()A.int n = 5,b[n][n];B.int a[1][2] = {{1},{3}};C.int c[2][] = {{1,2},{3,4}};D.int a[3][2] = {{1,2},{3,4}};7、阅读下列程序段:char s[18] = "a book!";printf("%.4s\n", s);其输出结果为()A.a book!B.a bookC.a bo8、阅读下列程序:int a[4][4] = { { 1, 3, 5, }, { 2, 4, 6 }, { 3, 5, 7 } };printf("%d%d%d%d\n", a[0][0], a[1][1], a[2][2], a[3][3]);正确的输出结果为()9、阅读下面程序:int i;int x[4][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };for (i = 0; i<4; i++)printf("%3d", x[i][3 - i]);下列选项中哪一项是正确的输出结果()A.1 5 9 13B.1 6 11 16C.4 7 10 13D.4 8 12 1610、下列描述中不正确的是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第 5 章数组和广义表
一、选择题
2. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址,
那么这个数组的体积是(①)个字节。
假设存储数组元素A[1,0]的第一个字节的地址是0,
则存储数组A的最后一个元素的第一个字节的地址是(②)。
若按行存储,则A[2,4]的第
一个字节的地址是(③)。
若按列存储,则A[5,7]的第一个字节的地址是(④)。
就一般情
况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。
供选择的
答案:
①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120
G. 156 H. 234 I. 276 J. 282 K. 283 L. 288
⑤: A.行与列的上界相同 B. 行与列的下界相同
C. 行与列的上、下界都相同
D. 行的元素个数与列的元素个数相同
3. 设有数组A[i,j],数组的每个元素长度为3字节,i的值为1 到8 ,j的值为1 到10,
数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为( )。
A. BA+141
B. BA+180
C. BA+222
D. BA+225
4. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存
储单元,基地址为10,则LOC[5,5]=()。
A. 808
B. 818
C. 1010
D. 1020
5. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000
的内存单元中,则元素A[5,5]的地址是( )。
A. 1175
B. 1180
C. 1205
D. 1210
6. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,
假设存储数组元素A[0,1]的第一个字节的地址是0,存储数组A的最后一个元素的第一个字
节的地址是(①)。
若按行存储,则A[3,5]和 A[5,3]的第一个字节的地址是(②)
和(③)。
若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是(④)和(⑤)。
①-⑤:A.28 B.44 C.76 D.92 E.108 F.116 G.132 H.176
I.184 J.188
13. 设二维数组A[1.. m,1.. n](即m行n列)按行存储在数组B[1.. m*n]中,则二维数
组元素A[i,j]在一维数组B中的下标为( )。
A.(i-1)*n+j
B.(i-1)*n+j-1
C. i*(j-1)
D. j*m+i-1
15. 数组A[0..4,-1..-3,5..7]中含有元素的个数()。
【中山大学 1998 二、5(2分)】
A. 55
B. 45
C. 36
D. 16
二、判断题
1.数组不适合作为任何二叉树的存储结构。
(×)
2. 从逻辑结构上看,n维数组的每个元素均属于n个向量。
(√)
4. 数组是同类型值的集合。
(×)
5. 数组可看成线性结构的一种推广,因此与线性表一样,可以对它进行插入,删除等操作。
(×)
三、填空题
1. 数组的存储结构采用_______存储方式。
2. 设二维数组A[-20..30,-30..20], 每个元素占有4 个存储单元, 存储起始地址为200.如按行优先顺序存储,则元素 A[25,18]的存储地址为__(1)_;如按列优先顺序存储,则元素A[-18,-25]的存储地址为__(2)_。
3. 设数组a[1..50,1..80]的基地址为2000,每个元素占2个存储单元,若以行序为主序顺序存储,则元素a[45,68]的存储地址为_(1)_;若以列序为主序顺序存储,则元素a[45,68]的存储地址为_(2)_。
4. 将整型数组A[1..8,1..8]按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[7,3]的地址是:_______。
5. 二维数组a[4][5][6](下标从0开始计,a有4*5*6个元素),每个元素的长度是2,则a[2][3][4]的地址是____。
(设a[0][0][0]的地址是1000,数据以行为主方式存储)
6. 设有二维数组A[0..9,0..19],其每个元素占两个字节,第一个元素的存储地址为100,若按列优先顺序存储,则元素A[6,6]存储地址为_______。
7. 已知数组A[0..9,0..9]的每个元素占5个存储单元,将其按行优先次序存储在起始地址为1000的连续的内存单元中,则元素A[6,8]的地址为_______。
8. 已知二维数组A[1..10,0..9]中每个元素占4个单元,在按行优先方式将其存储到起始地址为1000的连续存储区域时,A[5,9]的地址是:_______。
10. 设数组A[0..8,1..10],数组中任一元素A[i,j]均占内存48个二进制位,从首地址2000开始连续存放在主内存里,主内存字长为16位,那么
(l)存放该数组至少需要的单元数是_______;
(2)存放数组的第8列的所有元素至少需要的单元数是_______;
(3)数组按列存储时,元素A[5,8]的起始地址是_______。
38. 完善下列程序,每小题在PASCAL语言(a)和C语言(b)中任选一题。
下面的程序将数列1,2,3,…,n*n,依次按蛇型方式存放在二维数组A[1..n,1..n]中。
即 (示意圖编者略)。
(a)算法的PASCAL 语言程序描述(编者略):(b)算法的C语言程序描述:
#define NMAX 10
#include “stdio.h”
main()
{ int i,j,n,k,p,q,m;
int a [NMAX][NMAX];
scanf(“%d”,&n);
m=1;
for(k=1;(1) ;k++)
{if(k<n) q=k; else(2) __;
for(p=1;p<=q;p++)
{if(3) {i=q-p+1;j=p;}
else{i=p;j=q-p+1;}
if(4) {i=i+n-q;j=j+n-q;}
a[i][j]=m;(5) _;
}
for(i=1;i<=n;i++)
{ for(j=1;j<=n;j++)
printf(“%4d”,a[i][j]);printf(“\n”);
}
}
}
四应用题
1. 数组A[1..8,-
2..6,0..6]以行为主序存储,设第一个元素的首地址是78,每个元素的长度为4,试求元素A[4,2,3]的存储首地址。
2. 已知b对角矩阵(a ij)n*n,以行主序将b条对角线上的非零元存储在一维数组中,每个数据元素占L个存储单元,存储基地址为S,请用i,j 表示出 a ij的存储位置。
3. 数组A中,每个元素A[i,j]的长度均为32个二进位,行下标从-1到9,列下标从1到11,从首地址S开始连续存放主存储器中,主存储器字长为16位。
求:
(1)存放该数组所需多少单元?
(2)存放数组第4列所有元素至少需多少单元?
(3)数组按行存放时,元素A[7,4]的起始地址是多少?
(4)数组按列存放时,元素A[4,7]的起始地址是多少?
4.假设按低下标优先存储整型数组A(-3:8,3:5,-4:0,0:7)时,第一个元素的字节存储地址是100,每个整数占4个字节,问A(0,4,-2,5)的存储地址是什么?
5.设有三维数组A[-2:4,0:3,-5:1]按列序存放,数组的起始地址为1210,试求A(1,3,-2)所在的地址。
6. 三维数组A[1..10,-2..6,2..8]的每个元素的长度为4个字节,试问该数组要占多少个字节的存储空间?如果数组元素以行优先的顺序存贮,设第一个元素的首地址是100,试求元素A[5,0,7] 的存贮首地址。
8.数组A[0..8, 1..10] 的元素是6 个字符组成的串,则存放A至少需要多少个字节? A 的第8列和第5行共占多少个字节?若A 按行优先方式存储,元素A[8,5]的起始地址与当A 按列优先方式存储时的哪个元素的起始地址一致?
13. 有一个二维数组A[0:8,1:5],每个数组元素用相邻的4个字节存储,存储器按字节编址,假设存储数组元素A[0,1]的第一个字节的地址是0,那么存储数组的最后一个元素的第一个字节的地址是多少?若按行存储,则A[3,5]和A[5,3]的第一个字节的地址是多少?若按列存储,则A[7,1]和A[2,4]的第一个字节的地址是多少?
19. 给出数组 A∶ARRAY[3..8,2..6] OF INTEGER;当它在内存中按行存放和按列存放时,分别写出数组元素A[i,j]地址计算公式(设每个元素占两个存储单元)。
五算法设计题
9. 编写算法,将自然数1~n按“蛇形”填入n×n矩阵中。
例(1~4)如图所示:(用
13410
25911
681215
7131416。