第4章 数组练习题答案

合集下载

华南理工大学网络教育学院 数据结构同步练习册答案

华南理工大学网络教育学院  数据结构同步练习册答案

6.3 分别写出题 6.1 所示二叉树的先根,中根和后根序列。 答:先根:ABCDEFGHIJ 二叉树。 答: 由后根遍历序列得到二叉树的根结点 A (后根序列中最后一个结点) ; 在中序序列中, A 的左力是 A 的左子树上的结点,A 的右边是 A 的右子树上的结点;再到后根序列中找左子 树和右子树的根结点,依次类推,直到画出该二叉树。 中根:DCBAFEHJIG 后根:DCBFJIHGEA 6.4 已知一棵二叉树的中根序列和后根序列分别为 BDCEAFHG 和 DECBHGFA,试画出这棵
(4) int x = 91, y = 100;
while (y > 0) { if (x > 100) else x++; } 答:100 解析: x=91; //1 y=100; //1
{
x = x -10; y--;
}
while(y>0) //1101 if(x>100) //1100 { x=x-10; //100 y--; //100 } else x++; //1000 以上程序段右侧列出了执行次数。该程序段的执行时间为: T(n)=O(1)
while ( i <= n ) { k = k+10*i; i++; } 答:n-1
解析: i=1; //1 k=0; //1 while(i<n) //n { k=k+10*i; //n-1 i++; //n-1 } 由以上列出的各语句的频度,可得该程序段的时间消耗: T(n)=1+1+n+(n-1)+(n-1)=3n 可表示为 T(n)=O(n)
x++; y++;

数据结构答案第4章

数据结构答案第4章

第 4 章广义线性表——多维数组和广义表2005-07-14第 4 章广义线性表——多维数组和广义表课后习题讲解1. 填空⑴数组通常只有两种运算:()和(),这决定了数组通常采用()结构来实现存储。

【解答】存取,修改,顺序存储【分析】数组是一个具有固定格式和数量的数据集合,在数组上一般不能做插入、删除元素的操作。

除了初始化和销毁之外,在数组中通常只有存取和修改两种操作。

⑵二维数组A中行下标从10到20,列下标从5到10,按行优先存储,每个元素占4个存储单元,A[10][5]的存储地址是1000,则元素A[15][10]的存储地址是()。

【解答】1140【分析】数组A中每行共有6个元素,元素A[15][10]的前面共存储了(15-10)×6+5个元素,每个元素占4个存储单元,所以,其存储地址是1000+140=1140。

⑶设有一个10阶的对称矩阵A采用压缩存储,A[0][0]为第一个元素,其存储地址为d,每个元素占1个存储单元,则元素A[8][5]的存储地址为()。

【解答】d+41【分析】元素A[8][5]的前面共存储了(1+2+…+8)+5=41个元素。

⑷稀疏矩阵一般压缩存储方法有两种,分别是()和()。

【解答】三元组顺序表,十字链表⑸广义表((a), (((b),c)),(d))的长度是(),深度是(),表头是(),表尾是()。

【解答】3,4,(a),((((b),c)),(d))⑹已知广义表LS=(a,(b,c,d),e),用Head和Tail函数取出LS中原子b的运算是()。

【解答】Head(Head(Tail(LS)))2. 选择题⑴二维数组A的每个元素是由6个字符组成的串,行下标的范围从0~8,列下标的范围是从0~9,则存放A至少需要()个字节,A的第8列和第5行共占()个字节,若A按行优先方式存储,元素A[8][5]的起始地址与当A按列优先方式存储时的()元素的起始地址一致。

第四、五章串、数组和广义表练习题答案

第四、五章串、数组和广义表练习题答案

第四、五章串、数组和广义表练习题答案一.填空题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语言程序设计-第4章 练习题

C语言程序设计-第4章  练习题

一、单项选择题题目1假定有一个元素类型为int的数组a[10],它所占用的存储空间的字节数为()。

a. 40b. 80c. 10d. 20题目2假定一维数组的定义为“char* a[8];”,则该数组所占用的存储空间的字节数为()。

a. 16b. 8c. 64d. 32题目3假定有一个定义语句为“int a[10]={3,4,2,8,6};”,则元素a[5]的值为()。

a. 0b. 6c. 2d. 8题目4在下面的一维数组定义语句中,有语法错误的是()。

a. int a[];b. int a[5];c. int a[10]={0};d. int a[]={1,2,3};题目5假定二维数组的定义语句为“int a[3][5];”,则该数组所含元素的个数为()。

a. 10b. 12c. 15d. 8题目6假定有一个定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[1][2]的值为()。

a. 6b. 8c. 4d. 2题目7对于一个长度为n的字符串,保存它至少需要占用的存储字节数为()。

a. n-1b. n+1c. nd. n+2题目8对于一个二维字符数组a[M][N],存储每个字符串的长度至多为()。

a. N-1b. Nc. Md. M-1题目9若需要比较两个字符串的大小,则选用的函数是()。

a. strlenb. strcmpc. strcpyd. strcat二、判断题题目10一维数组元素带有两个下标。

对错题目11对于二维数组元素,数组名后使用两对中括号。

对错题目12在一维数组的定义语句中,给数组赋初值的部分是用一对花括号括起来的数据表。

对错题目13在一维数组的定义语句中,数组名前为元素类型关键字。

对错题目14在二维数组的定义语句中,数组名后带有两对圆括号。

对错题目15假定二维数组的定义语句为“double a[M][N];”,则每个数组元素的列下标取值范围在1~N 之间。

数据结构教程李春葆课后答案第4章串

数据结构教程李春葆课后答案第4章串

8. 采用顺序结构存储串,设计一个实现串通配符匹配的算法 pattern_index(),其中的 通配符只有‘?’ ,它可以和任一个字符匹配成功。例如,pattern_index("?re","there are") 返回的结果是 2。 解:采用 BF 算法的穷举法的思路,只需要增加对‘?’字符的处理功能。对应的算法 如下:
void maxsubstr(SqString s,SqString &t) { int maxi=0,maxlen=0,len,i,j,k; i=0; while (i<s.length) //从下标为 i 的字符开始 { j=i+1; //从 i 的下一个位置开始找重复子串 while (j<s.length) { if (s.data[i]==s.data[j]) //找一个子串,其起始下标为 i,长度为 len { len=1; for(k=1;s.data[i+k]==s.data[j+k];k++) len++; if (len>maxlen) //将较大长度者赋给 maxi 与 maxlen { maxi=i; maxlen=len; } j+=len; } else j++; } i++; //继续扫描第 i 字符之后的字符 } t.length=maxlen; //将最长重复子串赋给 t for (i=0;i<maxlen;i++) t.data[i]=s.data[maxi+i]; }
SqString CommChar(SqString s1,SqString s2) { SqString s3; int i,j,k=0; for (i=0;i<s1.length;i++) { for (j=0;j<s2.length;j++) if (s2.data[j]==s1.data[i]) break; if (j<s2.length) //s1.data[i]是公共字符 { s3.data[k]=s1.data[i]; k++; } } s3.length=k; return s3; }

数据库 练习题(答案)

数据库  练习题(答案)

第四章练习题一、选择题1、设有两个关系R(A,B)与S(B,C),与下列SELECT语句SELECT A,B FROM RWHERE B NOT IN(SELECT B FROM S WHERE C='C56');等价的关系代数表达式就是 [ C]A.πA,B(σC≠'C56'(R⋈S))B.πA,B(R ⋈ S)C≠'C56'C.R-πA,B(σC= 'C56'(R⋈S))D.R-πA,B(σC≠'C56'(R⋈S))2、嵌入式SQL的预处理方式,就是指[ B]A.识别出SQL语句,加上前缀标识与结束标志B.把嵌入的SQL语句处理成函数调用形式C.对源程序进行格式化处理D.把嵌入的SQL语句编译成目标程序3、SQL中,“DELETE FROM 表名”表示 [ A]A.从基本表中删除所有元组B.从基本表中删除所有属性C.从数据库中撤消这个基本表D.从基本表中删除重复元组4、SQL中,聚合函数COUNT(列名)用于[ C]A.计算元组个数B.计算属性的个数C.对一列中的非空值计算个数D.对一列中的非空值与空值计算个数5、在传统SQL技术中,使用“ORDER BY”子句的SELECT语句查询的结果,实际上为 [B]A.数组B.列表C.包D.集合6、在数据库中,能提高查询速度的就是(C )A、数据依赖B、视图C、索引D、数据压缩7、语句 delete from sc 表明( A )A、删除sc中的全部记录B、删除基本表scC、删除基本表sc中的列数据D、删除基本表sc中的部分行8、在DB应用中,一般一条SQL 语句可产生或处理一组记录,而DB主语言语句一般一次只能处理一条记录,其协调可通过( B )实现。

A、指针B、游标C、数组D、栈9、在下列基本表的定义中,数值5表示( C )CREATE TABLE student (Sno char(5) not null unique,Sname char(2));A、表中有5条记录B、表中有5列C、表中字符串Sno 的长度D、表格的大小10、在视图上不能完成的操作就是( C )A、更新视图B、查询C、在视图上定义新的基本表D、在视图上定义新视图11、下列聚合函数中不忽略空值 (null) 的就是 (C)A、SUM (列名)B、MAX (列名)C、COUNT ( * )D、AVG (列名)12、SQL的查询语句的where子句中,对空值的操作,不正确的就是 ( C )A、where AGE IS NULLB、where AGE IS NOT NULLC、where AGE = NULLD、where NOT (AGE IS NULL)13、Transact-SQL对标准SQL的扩展主要表现为( A )。

c程序设计第3-4章练习题有答案

c程序设计第3-4章练习题有答案

第3-4章练习题一、选择题1. 以下错误的字符串赋值或赋初值方式是:(A)char str1[]=”string”, str2[]=”12345678”;st r cpy(str2,str1);(B)char str[7]={’s’,’t’,’r’,’i’,’n’,’g’};(C)char str[10] ;str =”string”;(D)char *str; str=”string”;2. 数组定义中不正确的是:(A)int a[2][3]; (B)int b[][3]={0,1,2,3};(C)int c[100][100]={0}; (D)int d[3][]={{1,2},{1,2,3},{1,2,3,4}};3. 以下对一维数组a正确初始化的是:(A)int a[10]=(0,0,0,0,); (B)int a[10]={};(C)int a[10]={0}; (D)int a[10]=(10*2);4.以下选项中,不能正确赋值的是:(A)char s1[10];s1="Ctest"; (B)char s2[]={'C', 't', 'e', 's', 't'};(C)char s3[20]="Ctest"; (D)char *s4="Ctest\n"5.若有说明:int i, j=2,*p=&i;,则能完成i=j赋值功能的语句是:(A)i=*p; (B)*p=*&j; (C)i=&j; (D)i=**p;6. 下面各语句行中,不能正确进行字符串操作的语句行是:(A) char st[10]={"abcde"}; (B) char s[5]={'a','b','c','d','e'};(C) char *s; s="abcde"; (D) char *s; scanf("%s",s);7.设有如下的程序段,执行上面的程序段后,*(ptr+5)的值为:char str[ ]="Hello"; char *ptr; ptr=str;(A) 'o' (B) '\0' (C)不确定的值(D) 'o'的地址8. 请选出以下语句的输出结果printf("%d\n",strlen("\t\"\065\xff\n"));(A)5 (B)14 (C)8 (D)输出项不合法,无正常输出9.以下程序段给数组所有的元素输入数据,请选择正确答案填入。

数据库 练习题(答案)

数据库  练习题(答案)

第四章练习题一、选择题1、设有两个关系R(A,B)和S(B,C),与下列SELECT语句SELECT A,B FROM RWHERE B NOT IN(SELECT B FROM S WHERE C='C56');等价的关系代数表达式是[ C]A.πA,B(σC≠'C56'(R⋈S))B.πA,B(R ⋈S)C≠'C56' C.R-πA,B(σC= 'C56'(R⋈S))D.R-πA,B(σC≠'C56'(R⋈S))2、嵌入式SQL的预处理方式,是指[ B]?A.识别出SQL语句,加上前缀标识和结束标志B.把嵌入的SQL语句处理成函数调用形式C.对源程序进行格式化处理D.把嵌入的SQL语句编译成目标程序3、SQL中,“DELETE FROM 表名”表示[ A]A.从基本表中删除所有元组B.从基本表中删除所有属性C.从数据库中撤消这个基本表D.从基本表中删除重复元组4、SQL中,聚合函数COUNT(列名)用于[ C]A.计算元组个数B.计算属性的个数C.对一列中的非空值计算个数D.对一列中的非空值和空值计算个数'5、在传统SQL技术中,使用“ORDER BY”子句的SELECT语句查询的结果,实际上为[B]A.数组B.列表C.包D.集合6、在数据库中,能提高查询速度的是(C )A. 数据依赖B. 视图C. 索引D. 数据压缩7、语句delete from sc 表明( A )A. 删除sc中的全部记录B. 删除基本表scC. 删除基本表sc中的列数据D. 删除基本表sc中的部分行8、在DB应用中,一般一条SQL 语句可产生或处理一组记录,而DB主语言语句一般一次只能处理一条记录,其协调可通过( B )实现。

A. 指针B. 游标C. 数组D. 栈9、在下列基本表的定义中,数值5表示( C ))CREATE TABLE student (Sno char(5) not null unique,Sname char(2));A. 表中有5条记录B. 表中有5列C. 表中字符串Sno的长度D. 表格的大小10、在视图上不能完成的操作是( C )A. 更新视图B. 查询C. 在视图上定义新的基本表D. 在视图上定义新视图11、下列聚合函数中不忽略空值(null) 的是(C)A、SUM (列名)B、MAX (列名)C、COUNT ( * )D、AVG (列名)12、SQL的查询语句的where子句中,对空值的操作,不正确的是(C)A、where AGE IS NULLB、where AGE IS NOT NULL#C、where AGE = NULLD、where NOT (AGE IS NULL)13、Transact-SQL对标准SQL的扩展主要表现为( A )。

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

第4章数组练习题一、选择题1.在c语言中,引用数组元素时,其数组下标的数据类型允许是()。

A)整型常量 B)整型表达式C)整型常量或整型表达式 D)任何类型的表达式2.要说明一个有10个int元素的数组,应当选择语句()。

A) int a[10]; B) int a(10); C) int a[9] D) int a[11]3.对以下说明语句的正确理解是()。

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)因为数组长度与初值的个数不相同,所以此语句不正确4.已知:int a[10];则对a数组元素的正确引用是()。

A) a[10] B) a[3.5] C) a(5) D) a[10-10]5.以下对一维整型数组a的正确说明是()。

A) int a(10); B)int n=10,a[n];C) int n; D)#define SIZE 10;scanf("%",&n); int a[SIZE];int a[n];6.要定义一个int型一维数组art,并使其各元素具有初值89,-23,0,0,0,不正确的定义语句是()。

A) int art[5]={89,-23};B) int art[ ]={89,-23};C) int art[5]={89,-23,0,0,0};D) int art[ ]={89,-23,0,0,0};7.在C语言中,二维数组元素在内存中的存放顺序是()。

A)按行存放 B)按列存放 C)由用户自己定义 D)由编译器决定8.以下对二维数组a的正确说明是()。

A)int a[3][] B) float a(3,4) C) double a[1][4] D) float a(3)(4) 9.已知:int a[3][4];则对数组元素引用正确的是()。

A)a[2][4] B)a[1,3] C) a[2][0] D) a(2)(1) 10.已知:int a[3][4]={0};则下面正确的叙述是()。

A)只有元素a[0][0]可得到初值0B)此说明语句是错误的C)数组a中的每个元素都可得到初值,但其值不一定为0D)数组a中的每个元素均可得到初值011.以下各组选项中,均能正确说明二维实型数组a的是()。

A) float a[3][4]; B) float a(3,4);float a[][4]; float a[3][4];float a[3][]={{1},{0}}; float a[][]={{0},{0}};C) f loat a[3][4]; D) float a[3][4];float a[][4]={{0},{0}}; float a[3][];float a[][4]={{0},{0},{0}}; float a[][4];12.已知:int a[][3]={1,2,3,4,5,6,7};则数组a的第一维的大小是()。

A)2 B)3 C)4 D)无确定值13.若二维数组a有m列,则在a[i][j]之前的元素个数为()。

A) j*m+i B) i*m+j C) i*m+j-1 D) i*m+j+114.要使字符数组str存放一个字符串"ABCDEFGH",正确的定义语句是()。

A) char str[8]={'A','B','C','D','E','F','G','H'};B) char str[8]="ABCDEFGH";C) char str[ ]={'A','B','C','D','E','F','G','H'};D) char str[ ]="ABCDEFGH";15.下面是对数组s的初始化,其中错误的是()。

A) char s[5]={"abc"} B) char s[5]={'a','b','c'};C) char s[5]=""; D) char s[5]="abcde";16.对两个数组a和b进行如下初始化char a[]="ABCDEF";char b[]={'A','B','C','D','E','F'};则以下叙述正确的是()。

A) a与b数组完全相同 B) a与b长度相同C) a和b中都存放字符串 D) a数组比b数组长度长17.下面程序的运行结果是()。

char c[5]={'a','b','\0','c','\0'};printf("%s",c);A) 'a''b' B) ab C) ab c D) 以上三个答案均有错误18.下面程序段运行的结果是()。

char s[]="a book!";printf("%.4s",s);A) a book! B) a boC) a boo D) 格式描述不正确,没有确定的输出19.合法的数组定义是()。

A) int a[]="string"; B) int a[5]={0,1,2,3,4,5};C) char a="string"; D) char a[]={'0','1','2','3','4','5'};20.要使字符串数组STR含有"ABCD","EFG"和"xy"三个字符串,不正确的定义语句有()。

A)char STR[ ][4]={"ABCD","EFG","XY"};B)char STR[ ][5]= {"ABCD","EFG","XY"};C)char STR[ ][6]= {"ABCD","EFG","XY"};D)char STR[ ][7]={{'A','B','C','D','\0'},"EFG","XY"};21.有两个字符数组a、b,则以下正确的输入格式是()。

A) gets (a,b); B) scanf ("%s%s",a,b);C) scanf ("%s%s",&a,&b); D) gets ("a"), gets ("b");22.判断字符串a和b是否相等,应当使用()。

A) if (a==b) B) if (a=b)C) if (strcpy(a,b)) D) if (strcmp(a,b))23.下述对C语言字符数组的描述中错误的是()。

A)字符数组可以存放字符串B)字符数组的字符串可以整体输入、输出C)可以在赋值语句中通过赋值运算符"="对字符数组整体赋值D)不可以用关系运算符对字符数组中的字符串进行比较24.运行下面程序段的输出结果是()。

char s[12]="string";printf("%d",strlen(s));A) 12 B) 7 C) 6 D) 525.函数调用strcat ( strcpy ( str1,str2 ), str3 )的功能是()。

A)将字符串str1复制到字符串str2中,再连接到字符串str3之后B)将字符串str1连接到字符串str2之后,再复制到字符串str3之后C)将字符串str2复制到字符串str1中,再将字符串str3连接到字符串str1之后D)将字符串str2连接到字符串str1之后,再将字符串str1复制到字符串str3之中26.有下面的程序段char a[3],b[]="china";printf("%s",a);则()。

A)运行后将输出ch B)运行后将输出ChC)运行后将输出chi D)编译出错27.下面描述正确的是()。

A)两个字符串所包含的字符个数相同时,才能比较字符串B)字符个数多的字符串比字符个数少的字符串大C)字符串"STOP"与"STOP "相等D)字符串"hat"小于字符串"het"28.下面程序段的运行结果是()。

char c[]="\t\b\\\0will\n";printf ( "%d", strlen (c));A) 14 B) 3 C) 9 D) 字符串中有非法字符,输出值不确定29.下面程序段的运行结果是()。

(其中~表示空格)char a[7]="abcdef",b[4]="ABC";strcpy (a,b);printf ("%c",a[5]);A) ~ B) \0 C) e D) f30.以下函数的功能是:通过键盘输入数据,为数组中的所有元素赋值。

#define N 10void arrin(int x[N]){ int i=0;while(i<N)scanf("%d", );}在下划线处应填入的是( )。

A) x+i B)&x[i+1] C)x+(i++) D)&x[++i]二、填空题1.构成数组的各个元素必须具有相同的数据类型。

C语言中数组的下标必须是整正数、0或整型表达式。

如果一维数组的长度为n ,则数组下标的最小值为 0 ,最大值为n-1 。

2.在C语言中,一维数组的定义方式为:类型说说明符数组名 [常量表达式] 。

相关文档
最新文档