第5章数组测试题

合集下载

第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在内存中所占字节数是()。

C语言第五章习题带答案

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.在二维数组A 中引用A[i,j]的时间_________。

A.与i、j的大小有关B.与i、j的大小无关C.与i的大小有关,与j的大小无关D.与i的大小无关,与j的大小有关2.在稀疏矩阵的带行指针向量的链接存储中,每一行单链表中的结点都具有相同的________。

A.行号 B.列号 C.元素值 D.地址3.二维数组A 按行顺序存储,其中每个元素占1个存储单元。

若 A[1][1]的存储地址为420, A[3][3]的存储地址为446,则A[5][5]的存储地址为_______。

A.470 B.471 C.472 D. 4734.在稀疏矩阵的十字链接存储中,每个列单链表中的结点都具有相同的_____。

A.行号 B.列号 C.元素值 D.地址5.下面的说法中,不正确的是________。

A.对称矩阵中只须存放包括主对角线元素在内的下(或上)三角部分的元素即可B.对角矩阵中只须存放的非零元素即可C.稀疏矩阵中值为零的元素较多,因此可以采用三元组表方法存储D.稀疏矩阵中大量值为零的元素分布有规律,因此可以采用三元组表方法存储6.对一些特殊矩阵采用压缩存储的目的主要是为了________。

A.表达变得简单 B.对矩阵元素的存取变得简单C.去掉矩阵中的多余元素 D.减少不必要的存储空间的开销7.若将n 阶对称矩阵 A 按照行序为主序方式将包括主对角线元素在内的下三角形的所有元素依次存放在一个一维数组 B 中,则该对称矩阵在 B 中占用了________个数组元素。

A.n2 B.n*(n-1) C.n*(n+1)/2 D.n*(n-1)8. 稀疏矩阵的三元组顺序表表示的一个三元组中不包括________。

A. 行号B.列号C.元素值D.元素总数9.稀疏矩阵一般的压缩存储方法有两种,即________。

A.二维数组和三维数组 B.三元组和散列C. 三元组和十字链表 D.散列和十字链表10.有一个 10 阶对称矩阵 A,采用压缩存储方式(以行序为主存储,且A[0 Ⅱ0]=1),则A[8][5]的地址是________。

数据结构(c语言版)第五章答案

数据结构(c语言版)第五章答案

第五章1、设二维数组A【8】【10】是一个按行优先顺序存储在内存中的数组,已知A【0】【0】的起始存储位置为1000,每个数组元素占用4个存储单元,求:(1)A【4】【5】的起始存储位置。

A【4】【5】的起始存储位置为1000+(10*4+5)*4=1180;(2)起始存储位置为1184的数组元素的下标。

起始存储位置为1184的数组元素的下标为4(行下标)、6(列下标)。

2、画出下列广义表D=((c),(e),(a,(b,c,d)))的图形表示和它们的存储表示。

略,参考第5·2节应用题第5题分析与解答。

3、已知A为稀疏矩阵,试从时间和空间角度比较采用两种不同的存储结构(二维数组和三元组表)实现求∑a(i,j)运算的优缺点。

稀疏矩阵A采用二维数组存储时,需要n*n个存储单元,完成求∑ii a(1≤i≤n)时,由于a【i】【i】随机存取,速度快。

但采用三元组表时,若非零元素个数为t,需3t+3个存储单元(t个分量存各非零元素的行值、列值、元素值),同时还需要三个存储单元存储存稀疏矩阵A的行数、列数和非零元素个数,比二维数组节省存储单元;但在求∑ii a(1≤i≤n)时,要扫描整个三元组表,以便找到行列值相等的非零元素求和,其时间性能比采用二维数组时差。

4、利用三元组存储任意稀疏数组时,在什么条件下才能节省存储空间?当m行n列稀疏矩阵中非零元素个数为t,当满足关系3*t<m*n时,利用三元组存储稀疏数组时,才能节省存储空间。

5、求下列各广义表的操作结果。

(1)GetHead((a,(b,c),d))GetHead((a,(b,c),d))=a(2)GetTail((a,(b,c),d))GetTail((a,(b,c),d))=((b,c),d)(3)GetHead(GetTail((a,(b,c),d)))GetHead(GetTail((a,(b,c),d)))=(b,c)(4)GetTail(GetHead((a,(b,c),d)))GetTail(GetHead((a,(b,c),d)))=()第六章1、已知一棵树边的集合为{(i,m),(i,n),(e,i),(b,e),(b,d),(a,b),(g,j),(g,k),(c,g),(c,f),(h,l),(c,h),(a,c)}用树形表示法画出此树,并回答下列问题:(1)哪个是根结点?(2)哪些是叶结点?(3)哪个是g的双亲?(4)哪些是g的祖先?(5)哪些是g的孩子?(6)哪些是e的子孙?(7)哪些是e的兄弟?哪些是f的兄弟?(8)结点b和n的层次号分别是什么?(9)树的深度是多少?(10)以结点c为根的子树的深度是多少?(11)树的度数是多少?略。

C语言题库第5章 数组√

C语言题库第5章 数组√

第五章数组一、单项选择1.若要定义一个具有5个元素的整型数组,以下错误的定义语句是( C)2.下列选项中,能正确定义数组的语句是( D)3.下面是有关C语言字符数组的描述,其中错误的是( D)4.有以下程序,程序运行时若输入:how are you? I am fine<回车>则输出结果是( C)#include<stdio.h>int main(){ char a[30],b[30];scanf("%s",a);gets(b);printf("%s\n %s\n",a,b);return 0;}5.以下选项中正确的语句组是( D)6.若有定义语句:int m[]={5,4,3,2,1},i=4;则下面对m数组元素的引用中错误的是( A )7.以下数组定义中错误的是( A)8.下列选项中,能够满足"若字符串s1等于字符串s2,则执行ST"要求的是 ( A )9.有以下程序,程序运行后的输出结果是( C)#include <stdio.h>#include <string.h>int main(){char x[]="STRING";x[0]='0';x[1]='\0';x[2]=0;printf("%d %d\n",sizeof(x),strlen(x));return 0;10.有以下程序,程序运行后的输出结果是( B )#include <stdio.h>#include <string.h>int main(){char a[20]=”ABCD\0EFG\0”,b[]=”IJK”;strcat(a,b); printf(“%s\n”,a);return 0;二、程序设计1./* 编写程序,实现矩阵(3行3列)的转置(即行列互换)。

数据结构第五章习题答案

数据结构第五章习题答案

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.特殊矩阵和压缩矩阵哪一种压缩存储后会失去随机存取的功能?为什么?答:稀疏矩阵在进行压缩存储后会失去随机存取的功能,因为非零元素的位置没有办法确定。

数据库系统l试题库及答案 第5章数组和广义表

数据库系统l试题库及答案 第5章数组和广义表

第5章 数组和广义表5.1数组一、填空题1. 假设有二维数组A 6×8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A 的起始存储位置(基地址)为1000,则数组A 的体积(存储量)为 ;末尾元素A 57的第一个字节地址为 。

2. 三元组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 、 和 。

3. 设数组a[1…60, 1…70]的基地址为2048,每个元素占2个存储单元,若以列序为主序顺序存储,则元素a[32,58]的存储地址为 。

4. 设n 行n 列的下三角矩阵A 已压缩到一维数组B[1..n*(n+1)/2]中,若按行为主序存储,则A[i,j]对应的B 中存储位置为 。

5. 设有一个10阶对称矩阵A 采用压缩存储方式(以行为主序存储:a 11=1),则a 85 的地址为 。

6. 设下三角矩阵A 如果按行序为主序将下三角元素A i j (i ≤j)存储在一个一维数组B[1..n(n+1)/2]中,对任一个三角矩阵元素A ij ,它在数组B 中的下标为 。

二、选择题1. ( )假设有60行70列的二维数组a[1…60, 1…70]以列序为主序顺序存储,其基地址为10000,每个元素占2个存储单元,那么第32行第58列的元素a[32,58]的存储地址为 。

A .16902B .16904C .14454D .答案A, B, C 均不对 2. ( )对特殊矩阵采用压缩存储的目的主要是为了 。

A .表达变得简单B .对矩阵元素的存取变得简单C .去掉矩阵中多余元素D .减少不必要的存储空间3. ( )对于n 阶对称矩阵,如果以行序或列序放入内存中,则需要 个存储单元。

A .n(n+1)/2B .n(n-1)/2C . n 2D .n 2/24. 有一个100*90的稀疏矩阵,非0元素有10个,设每个整型数占2字节,则用三元组表示该矩阵时,所需的字节数是 。

数据结构第五章数组习题

数据结构第五章数组习题

第五章数组习题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需要存储单元数为()。

实用教程习题集 第5章

实用教程习题集 第5章

第5章数组、字符串和枚举5. 2例题【例5-1】编写一个程序实现如下方法:(1)求一个数组的最大元素值:public static int maxElement(int a[])。

(2)求一个数组的所有元素平均值:public static int average(int a[])。

(3)查找某个数在数组中的位置:public static int search(int a[],int b)。

利用随机数产生20个整数给一个数组赋值,分别验证以上方法。

【例5-2】字符串String对象的比较。

假设有以下代码:String s1=”hello;String s2="hello";String s3=new String("hello");那么,以下1~4个表达式语句的值分别是什么?1. s1==s2;2. s1==s3;3. s1.equals(s2);4. s1.equals(s3);【例5-3】枚举类型应用程序的示例:enum Season{春季,夏季,秋事,冬}public class EnumDemo{public static void main(String args[]){Season [] sa=Season.values();for(int i=0;i<sa.length;i++){switch(sa[i]){case: 春季System. out. println("春季花满天”);break;case: 夏季System. out. println(夏季热无边“);break;case: 秋季System. out. println(“秋季果累累");break ;case冬季System. Ou.tprintln("冬季雪皑皑”);break;} //switch结构结束} //for循环结束} //方法main结束} //类EnumDemo结束5. 3练习题5. 3. 1判断题1. 数组是Java基本类型的一种。

C语言程序设计教程第五章练习题题目

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、任何一颗二叉树的叶子节点在先序、中序和后序遍历序列中的相对次序不发生改变。

(√)4、哈夫曼树是带权路径最短的树,路径上权值较大的结点离根较近。

(√)5、用一维数组存储二叉树时,总是以前序遍历顺序存储结点。

( ×)6、完全二叉树中,若一个结点没有左孩子,则它必是叶子结点。

( √)7、一棵树中的叶子数一定等于与其对应的二叉树的叶子数。

(×)8、度为2的树就是二叉树。

(×)二、单项选择题1.具有10个叶结点的二叉树中有( B )个度为2的结点。

A.8 B.9 C.10 D.112.树的后根遍历序列等同于该树对应的二叉树的( B )。

A. 先序序列B. 中序序列C. 后序序列3、二叉树的先序遍历和中序遍历如下:先序遍历:EFHIGJK;中序遍历:HFIEJKG 。

该二叉树根的右子树的根是:( C )A. EB. FC. GD. H04、在下述结论中,正确的是( D )。

①具有n个结点的完全二叉树的深度k必为┌log2(n+1)┐;②二叉树的度为2;③二叉树的左右子树可任意交换;④一棵深度为k(k≥1)且有2k-1个结点的二叉树称为满二叉树。

A.①②③B.②③④C.①②④D.①④5、某二叉树的后序遍历序列与先序遍历序列正好相反,则该二叉树一定是( D )。

A.空或只有一个结点B.完全二叉树C.二叉排序树D.高度等于其结点数三、填空题1、对于一棵具有n个结点的二叉树,对应二叉链接表中指针总数为__2n____个,其中___n-1_____个用于指向孩子结点,___n+1___个指针空闲着。

2、一棵深度为k(k≥1)的满二叉树有_____2k-1______个叶子结点。

数据结构-第5章--数组练习题

数据结构-第5章--数组练习题

数据结构-第5章--数组练习题第5章数组一、选择题3.设有数组A[i,j],数组的每个元素长度为3字节,i的值为1到8,j的值为1到10,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素A[5,8]的存储首地址为(A)。

A.BA+141B.BA+180C.BA+222D.BA+2254.假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=(A)。

A.808B.818C.1010D.10205.数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是()。

1195A.1175B.1180C.1205D.12107.将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A6665(即该元素下标i=66,j=65),在B数组中的位置K为()。

供选择的答案:A.198B.195C.1972+64某3=19410.若对n阶对称矩阵A以行序为主序方式将其下三角形的元素(包括主对角线上所有元素)依次存放于一维数组B[1..(n(n+1))/2]中,则在B中确定aij(iA.i某(i-1)/2+jB.j某(j-1)/2+iC.i某(i+1)/2+jD.j某(j+1)/2+i11.设A是n某n的对称矩阵,将A的对角线及对角线上方的元素以列为主的次序存放在一维数组B[1..n(n+1)/2]中,对上述任一元素aij(1≤i,j≤n,且i≤j)在B中的位置为(C)。

A.i(i-l)/2+jB.j(j-l)/2+iC.j(j-l)/2+i-1D.i(i-l)/2+j-112.A[N,N]是对称矩阵,将下面三角(包括对角线)以行序存储到一维数组T[N(N+1)/2]中,则对任一上三角元素a[i][j]对应T[k]的下标k是(AB)。

《数据结构》第五章 数组 习题

《数据结构》第五章  数组  习题

《数据结构》第五章 数组 习题基本概念题:5-1 分别写出一维数组和二维数组的存储映象公式。

5-2 什么叫二维数组的行序优先存储?什么叫二维数组的列序优先存储?C 语言采用的是行序优先存储还是列序优先存储?5-3 什么叫随机存储结构?为什么说数组是一种随机存储结构?5-4 动态数组和静态数组在使用方法上有什么不同?5-5 什么样的矩阵叫特殊矩阵?特殊矩阵压缩存储的基本思想是什么?5-6 什么样的矩阵叫稀疏矩阵?稀疏矩阵压缩存储的基本思想是什么?5-7 什么叫稀疏矩阵的三元组?什么叫稀疏矩阵的三元组线性表?5-8 稀疏矩阵主要有哪些压缩存储结构?复杂概念题:5-9 设一个系统中二维数组采用以行序为主的存储方式存储,已知二维数组a[n][m]中每个数据元素占k 个存储单元,且第一个数据元素的存储地址是Loc(a[0][0]),求数据元素a[i][j](0≤i≤n -1, 0≤j≤m -1)的存储地址。

5-10 设一个系统中二维数组采用以行序为主的存储方式存储,已知二维数组a[10][8]中每个数据元素占4个存储单元,且第一个数据元素的存储地址是1000,求数据元素a[4][5]的存储地址。

5-11 画出一个3行3列二维动态数组存储结构示意图。

5-12 对于如下所示的稀疏矩阵A(1)写出该稀疏矩阵的三元组线性表;(2)画出稀疏矩阵A 的三元组顺序表结构;(3)画出稀疏矩阵A 的带头结点单链表结构;(4)画出稀疏矩阵A 的行指针数组链表结构;(5)画出稀疏矩阵A 的三元组十字链表结构。

算法设计题:5-13 为节省内存,n 阶对称矩阵采用压缩存储,要求:(1)编写实现C = A + B 操作的函数。

设矩阵A 、矩阵B 和矩阵C 均采用压缩存储方式存储,矩阵元素均为整数类型。

(2)编写一个采用压缩存储的n 阶对称矩阵的输出函数,要求输出显示成矩阵形式,设矩阵元素均为整数类型。

(3)设矩阵A 和矩阵B 为如下所示的矩阵,编写一个用矩阵A 和矩阵B 作为测试例子的测试上述函数的主程序。

数组练习题及答案

数组练习题及答案

数组练习题及答案第五章数组练习题及答案一、选择题1、判断字符串a和b是否相等,应当使用()A、if(a==b)B、if(a=b)C、if(strcpy(a,b))D、if(strcmp(a,b))2、以下正确的定义语句是()A、int a[1][4]={1,2,3,4,5};B、float x[3][]={{1},{2},{3}};C、long b[2][3]={{1},{1,2},{1,2,3}};D、double y[][3]={0};3、以下各组选项中,均能正确定义二维实型数组a的选项是()A、float a[3][4]; float a[ ][4]; float a[3][ ]={{1},{0}};B、float a(3,4); float a[3][4]; float a[ ][ ]={{0},{0}};C、float a[3][4]; static float a[ ][4]={{0},{0}}; auto float a[ ][4]={{0},{0},{0}};D、float a[3][4]; float a[3][ ]; float a[ ][4];4、下面程序的运行结果是()1—5 DDCBA 6—10 BDABB 11—15 CCCBC 16—20 DDCBB 21—25 BBAAA 26—30 DBDDB#include "stdio.h"main(){ char str[]="SSSWLIA",c;int k;for(k=2;((c=str[k])!='\0');k++){ switch(c){case 'I':++k;break;case 'L':continue;default:putchar(c);continue;}putchar('*');}}A、SSW*B、SW*C、SW*AD、SW5、下面程序段是输出两个字符串中对应相等的字符。

数据结构第五章数组和广义表

数据结构第五章数组和广义表

第五章数组和广义表:习题习题一、选择题1.假设以行序为主序存储二维数组A[1..100,1..100],设每个数据元素占两个存储单元,基地址为10,则LOC(A[5,5])=( )。

A. 808B. 818C. 1010D. 10202.同一数组中的元素( )。

A. 长度可以不同 B.不限 C.类型相同 D. 长度不限3.二维数组A的元素都是6个字符组成的串,行下标i的范围从0到8,列下标j的范圈从1到10。

从供选择的答案中选出应填入下列关于数组存储叙述中( )内的正确答案。

(1)存放A至少需要( )个字节。

(2)A的第8列和第5行共占( )个字节。

(3)若A按行存放,元素A[8]【5]的起始地址与A按列存放时的元素( )的起始地址一致。

供选择的答案:(1)A. 90 B. 180 C. 240 D. 270(2) A. 108 B. 114 C. 54 D. 60(3)[8][5] B. A[3][10] [5][8] [O][9]4.数组与一般线性表的区别主要是( )。

A.存储方面B.元素类型方面C.逻辑结构方面D.不能进行插入和删除运算5.设二维数组A[1..m,1..n]按行存储在数组B[1..m×n]中,则二维数组元素A[i,j]在一维数组B中的下标为( )。

A. (i-l)×n+jB. (i-l)×n+j-lC.i×(j-l) D. j×m+i-l6.所谓稀疏矩阵指的是( )。

A.零元素个数较多的矩阵B.零元素个数占矩阵元素中总个数一半的矩阵C.零元素个数远远多于非零元素个数且分布没有规律的矩阵D.包含有零元素的矩阵7.对稀疏矩阵进行压缩存储的目的是( )。

A.便于进行矩阵运算B.便于输入和输出C.节省存储空间D. 降低运算的时间复杂度8.稀疏矩阵一般的压缩存储方法有两种,即( )。

A.二维数组和三维数组B.三元组和散列C.三元组和十字链表D.散列和十字链表9.有一个100×90的稀疏矩阵,非0元素有10个,设每个整型数占两字节,则用三元组表示该矩阵时,所需的字节数是( )。

第五章 数组

第五章 数组

第 5 章数组一、选择题1.设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,a11为第一元素,其存储地址为1,每个元素占一个地址空间,则a85的地址为()。

【燕山大学 2001 一、2 (2分)】A. 13B. 33C. 18D. 402. 有一个二维数组A[1:6,0:7] 每个数组元素用相邻的6个字节存储,存储器按字节编址,那么这个数组的体积是(①)个字节。

假设存储数组元素A[1,0]的第一个字节的地址是0,则存储数组A的最后一个元素的第一个字节的地址是(②)。

若按行存储,则A[2,4]的第一个字节的地址是(③)。

若按列存储,则A[5,7]的第一个字节的地址是(④)。

就一般情况而言,当(⑤)时,按行存储的A[I,J]地址与按列存储的A[J,I]地址相等。

供选择的答案:【上海海运学院 1998 二、2 (5分)】①-④: A.12 B. 66 C. 72 D. 96 E. 114 F. 120G. 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+141B. BA+180C. BA+222D. BA+225【南京理工大学 1997 一、8 (2分)】4. 假设以行序为主序存储二维数组A=array[1..100,1..100],设每个数据元素占2个存储单元,基地址为10,则LOC[5,5]=()。

【福州大学 1998 一、10 (2分)】A. 808B. 818C. 1010D. 10205. 数组A[0..5,0..6]的每个元素占五个字节,将其按列优先次序存储在起始地址为1000的内存单元中,则元素A[5,5]的地址是( )。

数据结构课后习题答案第五章数组与广义表

数据结构课后习题答案第五章数组与广义表

第五章数组与广义表一、假设有二维数组A6*8,每个元素用相邻的6个字节存储,存储器按字节编址。

已知A的起始存储位置(基地址)为1000。

计算:1、数组A的体积(即存储量);2、数组A的最后一个元素a57的第一个字节的地址;3、按行存储时,元素a14的第一个字节的地址;4、按列存储时,元素a47的第一个字节的地址;答案:1、(6*8)*6=2882、loc(a57)=1000+(5*8+7)*6=1282或=1000+(288-6)=12823、loc(a14)=1000+(1*8+4)*6=10724、loc(a47)=1000+(7*6+4)*6=1276二、假设按低下标(行优先)优先存储整数数组A9*3*5*8时第一个元素的字节地址是100,每个整数占四个字节。

问下列元素的存储地址是什么?(1)a0000(2)a1111(3)a3125 (4)a8247答案:(1)100(2)loc(a1111)=100+(1*3*5*8+1*5*8+1*8+1)*4=776(3) loc(a3125)=100+(3*3*5*8+1*5*8+2*8+5)*4=1784(4) loc(a8247)=100+(8*3*5*8+2*5*8+4*8+7)*4=4416五、设有一个上三角矩阵(aij)n*n,将其上三角元素逐行存于数组B[m]中,(m 充分大),使得B[k]=aij且k=f1(i)+f2(j)+c。

试推导出函数f1,f2和常数C(要求f1和f2中不含常数项)。

答:K=n+(n-1)+(n-2)+…..+(n-(i-1)+1)+j-i=(i-1)(n+(n-i+2))/2+j-i所以f1(i)=(n+1/2)i-1/2i2f2(j)=jc=-(n+1)九、已知A为稀疏矩阵,试从空间和时间角度比较采用两种不同的存储结构(二维数组和三元组表)完成∑aii运算的优缺点。

(对角线求和)解:1、二维数组For(i=1;i<=n;i++)S=s+a[i][i];时间复杂度:O(n)2、for(i=1;i<=m.tu;i++)If(a.data[k].i==a.data[k].j) s=s+a.data[k].value;时间复杂度:O(n2)二十一、当稀疏矩阵A和B均以三元组表作为存储结构时,试写出矩阵相加的算法,其结果存放在三元组表C中。

第五章 判断题-数组

第五章 判断题-数组

第五章判断题1.下标用于指出数组中某个元素位置的数字。

()2.把数组中元素按某种顺序排列的过程叫做查找。

()3.确定数组中是否含有某个关键字的过程叫做排序。

()4.一个数组可以存放许多不同类型的数值。

()5.数组的下标通常是float型。

()6.数组的某个元素被传递给一个方法并被该方法修改,当被调用方法执行完毕时,这个元素中含有修改过的数值。

()7.数组可以声明为任何数据类型。

()8.数组由具有一名字和相同类型的一组连续内存单元构成。

()9.在数组声明中可以用等号及一个逗号分隔的初始值表初始化数组元素,该数组大小只能有用户来决定。

()10.将一个数组传递给一个方法,必须加在数组名后加方括号。

()第五章选择题1.线性表和表可以存储在▁▁中。

A.数组B.堆栈C.文件D.字符串2.数组元素之所以相关,是因为它们具有相同的▁▁。

A.名字B.类型C.下标D.地址3.二维数组使用几个下标。

A.1B.2C.3D.44.请看下面的程序段:public class Person{static int arr[] = new int[10];public static void main(String a[]) {System .out .println(arr[1]);}}下面说法正确的是:A.当编译时会发生错误B.编译不会发生错误但执行是会发生错误C.输出结果为0D.不会输出结果5.请看下面的程序段:public class Person{int arr[] = new int[10];public static void main(String a[]) {System .out .println(arr[1]);}}下面说法正确的是:A.当编译时会发生错误B.编译不会发生错误但执行是会发生错误C.输出结果为0D.不会输出结果6.下面哪个选项正确的声明一个字符型数组:A.char str[]B.char str[][]C.String str[]D.String str[10]7.下面那一个选项正确创建一个空的含有6个元素的字符数组:A.String s[6];B.String [6]s;C.String s[ ]={“”,””,””,””,””,””};D.String s[ ]=new String[6];For(int m=0;m<6;m++) { s[m]=””;}E. String s[ ]=new String[6];For(int m=0;m<6;m++) { s[m]=null;}8.请看下面的程序段:public class MyClass {public static void main(String arg[ ]) {int arr[ ]= new int[3];System .out .println(“it is “+ arr[1]);}}当编译和执行这段代码时会出现:A.有一个编译错误为“possible reference before assignment”B.有一个编译错误为“illegal array declaration syntax”C.有异常出现为“NullPointerException”D.正确执行并且输出09.请看下面的程序段public class Person{String name;int age;public Person(String n,int a){ name=n;age=a;}public static void main(String arg[ ]){//point x}}下面选项可以添加到//point x处:A.Person p[ ]=new Person[3];P[1]=new Person(“user1”;24);B.Person p[ ];P=new Person[3];P=new Person(“user2”;56);C.Person p[ ]={ new Person(“user1’,34),(“user2”,34)}D.Person p[ ]=new Person{(“user1’,34),(“user2”,34)}10.请看下面的程序段public class Test{String s;int m;public Test(String t ,int n){s=t;m=n;}public static void main(String arg[ ]){Test t[ ]={ new Test(“abc”,3);new Test(“ddf”,23) };//point x}}下面选项可以添加到//point x处:A.System .out .println(“the value is”+t[3].s);B.System .out .println(“the value is”+t[2].m);C.System .out .println(“the value is”+t[1].s);D.System .out .println(“the value is”+t[1].m);第五章程序设计题1.编写程序,接受用户输入的若干字符串,并按字典排序输出。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第5章数组测试题一、选择题1.如下数组声明语句,( )正确。

A .Dim a[3,4] As IntegerB .Dim a(3,4) As IntegetC .Dim a(n,n) As IntegerD .Dim a(3 4) As Integer2.要分配存放如下矩阵的数据,( )数组声明语句能实现(不能浪费空间)。

⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡9.98.87.76.65.54.43.32.21.1 A .Dim a(9) As Integer B .Dim a(3,3) As SingleC .Dim a(-1 to 1,-5 to -3) As SingleD .Dim a(-3 to -1,5 to 7) As Integer3.如下数组声明语句,则数组a 包含元素的个数有( )。

Dim a(3,-2 to 2,5)A .120B .75C .60D .134.以下程序的输出结果是( )。

Dim aa=Array(1,2,3,4,5,6,7)For i=Lbound(a) to Ubound(a)a(i)=a(i)*a(i)Next iPrint a(i)A .49B .0C .不确定D .程序出错5.下列语句中(假定变量n 有值),能正确声明可调数组的是( )。

A .Dim a( ) As IntegerB .Dim a( ) As Integer ReDim a(n) ReDim a(n) As IntegerC .Dim a( ) As IntergerD .Dim a(10) As Integer ReDim a(3,4) ReDim a(n+10)ReDim Preserve a(4,4)6.在窗体的通用声明段自定义了数据类型Students ,下列( )定义方式是正确的。

A .Private Type StudentsB .Type StudentsName As String*10 Name As String*10 Studno As Integer Studno As Integer End Type End StudentsC .Type StudentsD .Type StudentsName String*10 Name As String*10 Studno Integer Studno As Integer End Type End Type7.以下程序的输出结果是( )。

Option Base 1Private Sub Command1_Click()Dim a, b(3, 3)a = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)For i = 1 To 3For j = 1 To 3b(i, j) = a(i * j)If (j >= i) Then Print Tab(j * 3); Format(b(i, j), "###");Next jPrintNext iEnd SubA .1 2 3B .1C .1 4 7D .1 2 3 4 5 6 4 5 2 4 6 4 6 7 8 9 7 8 9 3 6 9 9二、填空题1.数组声明时下标下界默认为0,利用 (1) 语句可以使下标为1。

2.由Array 函数建立的数组,其变量必须是 (2) 类型。

3.要获得数组的上界通过 (3) 函数,要获得列表框List 数组的元素总个数通过 (4) 属性。

4.若定义一维数组为:Dim a(N to M),则该数组的元素个数为 (5) 个。

5.随机产生6位学生的分数(分数范围1-100),存放在数组a 中,以每2分一个“*”显示,如图1所示。

Private Sub Command1_Click()For i = 1 To 6a(i) = (6)Print (7)Next iEnd Sub6.在一维数组中利用移位的方法显示如图2所示结果。

Private Sub Form_Click()Dim a(1 To 7) For i = 1 To 7a(i) = i: Print a(i);Next iPrintFor i = 1 To 7t = (8) '最右1位暂存For j = 6 To 1 Step -1(9) '其余6个向右移一位Next j 图1 随机分数运行界面图2 第6题运行界面(10) '暂存的放入最左For j = 1 To 7Print a(j);Next jPrintNext iEnd Sub7.下面程序对已知数组a,删除数组元素中某个元素。

Private Sub Command1_Click()Dim a(), key%, i%, j%a = Array(1, 6, 8, 3, 5, 9, 10, 2, 7, 4)key = Val(InputBox("输入要删除的值"))For i = 0 To UBound(a)If (11) ThenFor j = i + 1 To UBound(a)(12)Next jReDim (13)MsgBox ("删除完成")Exit SubEnd IfNext iMsgBox ("找不到要删除的元素")End Sub8.下列程序表示将输入的一个数插入到按递减的有序数列中,插入后使该序列仍然有序。

Private Sub Form_Click()Dim a, i%, n%, m%a = Array(19, 17, 15, 13, 11, 9, 7, 5, 3, 1)n = UBound(a)ReDim (14)m = Val(InputBox("输入欲插入的数"))For i = UBound(a) - 1 To 0 Step -1If (m >= a(i)) Then(15)If i = 0 Then a(i) = mElse(16)Exit ForEnd IfNext iFor i = 0 To UBound(a)Print a(i);Next iEnd Sub9.下列程序在1000-9999之间查找满足如下条件的整数:该整数,逆向得到的另一个4位数是它自身的倍数(2倍以上)。

查找结果和逆向排列分别显示在对应的列表框,如图3所示。

Private Sub Command1_Click()Dim a As IntegerDim m As IntegerDim i As IntegerFor i = 1000 To 9999m = 0(17)Do While n > 0m = (18) + n Mod 10n = n \ 10LoopIf (19) And m \ i > 1 Then List1.AddItem iList2.AddItem (20)End IfNext iEnd Sub10.下列程序完成如下功能:随机产生n(10-30)个大写字母,并显示。

将这n 个字母按产生的顺序逆时针排列成一个圆环,按逆时针方向统计相邻两个字母满足升序的次数(如图4所示)。

并输出符合条件的每对字符和统计结果。

Private Sub Form_Click()Dim a() As String, count As Integer, i As Integer, n As IntegerRandomizeForm1.Clsn = Int(Rnd * 20) + 10(21)图3 第9题运行界面 图4 第10题的示意图和运行界面ClsPrint "产生的字符:"For i = 1 To ns = (22) '产生大写字母a(i) = sPrint s; " ";Next iPrintPrint "统计结果:"count = 0For i = 2 To nIf (23) Thencount = count + 1Print Space(3); a(i - 1); " "; a(i)End IfNext iIf (24) Thencount = count + 1Print Space(3); a(n); " "; a(1)End IfPrintPrint "符合条件的字符有:" ; (25)End Sub11.本程序随机产生n(15)个A~J的大写字母,按字母降序排序后,将连续出现的字母用压缩形式显示。

例如,连续5个H字母显示为5*H,如图5所示。

数组a( )用于存放随机产生的字母。

Private Sub Form_Click()Const N = 15 Array Dim a(1 To N) As String * 1, cDim count%, i%, j%, k%RandomizeFor i = 1 To Na(i) = Chr(Int( (26) ))Print a(i);Next iPrint图5 第11题的运行界面For i = 1 To N - 1 '选择法排序k = iFor j = (27)If a(j) > a(k) Then (28)Next jc = a(i): a(i) = a(k): a(k) = cNext iFor i = 1 To N '输出排序结果Print a(i); " ";Next iPrinti = 1Do While i <= Ncount = 1If i < N Then j = i + 1Do While a(i) = a(j)count = (29)If j < N Then j = j + 1 Else Exit DoLoopIf count = 1 Then Print a(i); " "; Else Print count; "*"; a(i); " ";i = (30)LoopEnd Sub。

相关文档
最新文档