1、习题 31. 设 s=I AM A STUDENT,t=GOOD,q=WORKER.求:StrLength(s),StrLength(t),SubString(s,8,7),SubString(t,2,1),Index(s,A),Index(s,t),Replace(s,STUDENT,q),Concat(SubString(s,6,2),Concat(t,SubString(s,7,8).2. 已知下列字符串a=THIS,f=A SAMPLE,c=GOOD,d=NE,b=,s=Concat(a,Concat(SubString(f,2,7),Concat(b,SubString(a,3,2)
2、,t=Replace(f,SubString(f,3,6),c),u=Concat(SubString(c,3,1),d),g=ISv=Concat(s,Concat(b,Concat(t,Concat(b,u),试问:s,t,v,StrLength(s),Index(v,g),Index(u,g)各是什么?3. 试问执行以下函数会产生怎样的输出结果?void demonstrate( )StrAssign(s,THIS IS A BOOK);Replace(s,SubString(s,3,7),)ESE ARE);StrAssign(t,Concat(s,S);StrAssign(u,XYX
3、YXYXYXYXY);StrAssign(v,SubSting(u,6,3);StrAssign(w,W);printf(t=,t,v=,v,u=,Replace(u,v,w);/demonstrate4. 假设有二维数组 A68,每个元素用相邻的 6 个字节存储,存储器按字节编址.已知 A 的起始存储位置(基地址)为 1000,计算:(1)数组 A 的体积(即存储量);(2)数组 A 的最后一个元素 a5,7 的第一个字节的地址;(3)按行存储时,元素 a14 的第一个字节的地址;(4)按列存储时,元素 a47 的第一个字节的地址;5. 假设按低下标优先存储整数数组 A9358 时,第一个元
4、素的字节地址是 100,每个整数占四个字节.问下列元素的存储地址是什么.(1) a0000 (2) a1111 (3) a3125 (4) a82476. 按高下标优先存储方式(以最右的下标为主序),顺序列出数组A2233 中所有元素 aijkl,为了简化表达,可以只例出(i,j,k,l)的序列.7. 设有上三角矩阵(a ij)nn ,将其上三角元素逐行存于数组 Bm中(m充分大),使得 Bk=aij 且 k=fl (i)+f2 (j)+c .试推导出函数 fl, f2 和常数 c (要求 fl 和 f2 中不含常数项).8. 设有三对角矩阵(a ij)nn ,将其三条对角线上的元素逐行存于数
5、组B3n中,使的元素 Buv= aij,试推导出从(i,j)到(u,v)的下标变换公式.9. 求下列广义表操作的结果:(1)GetHead【(p,h,w)】;(2)GetTail【 (b,k,p,h)】;(3)GetHead【(a,b),(c,d)】;(4)GetTail【 (a,b),(c,d)】;(5)GetHead【GetTail【(a,b),(c,d)】 】;(6)GetTail【 GetHead【(a,b),(c,d)】 】;(7)GetHead【GetTail【GetHead【(a,b),(c,d)】 】 】;(8)GetTail【 GetHead【GetTail 【(a,b),(
6、c,d)】 】 】;注意:【】 是函数的符号.10. 利用广义表的 GetHead 和 GetTail 操作写出如上题的函数表达式,把原子 banana 分别从下列广义表中分离出来.(1)L1=(apple,pear,banana,orange);(2)L2=(apple,pear),(banana,orange);(3)L3=(apple),(pear),(banana),(orange);(4)L4=(apple,(pear),(banana),(orange);(5)L5=(apple),(pear),(banana),orange);(6)L6=(apple),pear),banana),orange);(7)L7=(apple,(pear,(banana),orange);11. 按教科书 5.5 节中图 5.8 所示结点结构,画出下列广义表的存储结构图,并求它的深度.(1) ( ),a,(b,c),( ),d),(e)(2) (a),b),( ),d),(e,f)