数据结构习题精编:串和数组_第1页
数据结构习题精编:串和数组_第2页
数据结构习题精编:串和数组_第3页
数据结构习题精编:串和数组_第4页
数据结构习题精编:串和数组_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、数据结构习题精编:串和数组20、选择题1下面关于串的的叙述中,不正确的是A 串是字符的有限序列B 空串是由空格构成的串C.模式匹配是串的一种重要运算D 串既可以采用顺序存储,也可以采用链式存储2下面关于串的的叙述中,正确的是A 空串就是空白串B 串相等指的是串的长度相等C.串的长度必须大于零D.串是一种特殊的线性表3字符串是一种特殊的线性表,它与一般线性表的区别是A 字符串是一种线性结构B 字符串可以进行复制操作C.字符串可以顺序存储也可以链式存储D 字符串由字符构成并且通常作为整体参与操作4串s="Data Structure "中长度为3 的子串的数目是A9B11C12

2、D145若串S="software" ,则 S 的子串的数目是A8B35C36D376已知串S= "string" , T="this" ,执行运算StrLength(StrCopy(S,T) 的结果是A2B4C6D107若串S="SCIENCESTUDY" ,则调用函数StrCopy(P,SubString(S,1,7) 后得到AP="STUDY"B P="SCIENCE" CS="STUDY"DS="SCIENCE"8若字符串采用链

3、式存储,每个字符占用一个字节,每个指针在占用四个字节,则该字符串的存储密度为9为查找某一特定单词在文本中出现的位置,可应用的串运算是A 20%B 25%C 50%D 75%A 串联接10当目标串的长度为的比较次数B 求子串n,模式串的长度为C.串比较D 子串定位m时,朴素的模式匹配算法最好情况下字符A m11当目标串的长度为的比较次数B nn,模式串的长度为C n-mD n+mm时,朴素的模式匹配算法最坏情况下字符A mB nC (n-m+1)*mD n*m12.已知串S="aaab",其Next数组的元素值依次为A 0、 1、 2、 3 B 1、 1、 2、 3C 1 、

4、 2、 1、 1D 1、 2、 3、 113串"ababaaababaa" 的 next 数组为A 011234223456 B 01212111121214字符串"ababaabab" 的 nextval 为C 0123012322345D 012345678999A (0,1,0,1,0,0,0,1,1)B (0,1,0,1,0,1,0,1,1)C (0,1,0,1,0,2,1,0,1)D(0,1,0,1,0,4,1,0,1)15二维数组A1020 采用按行为主序的存储方式,每个元素占若 A00 的存储地址为300,则A810 的地址为A 660B

5、732C 98016二维数组A56 采用按列为主序的存储方式,每个元素占4 个存储单元,D 11323 个存储单元,若A00 的存储地址是100,则A43 的存储地址是A 157B 166C 169D 18117二维数组A 按行优先顺序存储,其中每个元素占1 个存储单元。若A11 的存储地址为 420, A33 的存储地址为446,则A55 的存储地址为A 470B 471C 472D 47318假设以行优先顺序存储三维数组R696 ,其中元素R000 的地址为2100,每个元素占4 个存储单元,则存储地址为2836 的元素是A R333 B R334C R434D R43519设二维数组A1

6、. m1. n (即 m 行 n 列)按行存储在数组B1. m*n 中,则二维数组元素Aij 在一维数组B 中的下标为A(i-1 ) *n+j-1 B(i-1 ) *n+jC i*( j-1 )D j*m+i-120设有二维数组A810 , A00 的存储地址为LOC ,每个元素占2L 个存储单元,在以行序为主序的存储方式下,某数据元素的地址为LOC+50L ,则在以列序为主序的存储方式下,该元素的存储地址为ALOC+26LB LOC+42LCLOC+50LDLOC+84L21对矩阵压缩存储是为了A.方便运算B.方便存储C.提高运算速度D.减少存储空间22.设有一个10阶的对称矩阵A,采用行优

7、先压缩存储方式,ai,i为第一个元素,其存储地址为1,每个元素占一个字节空间,则 a8,5的地址为A i3B 32C 33D 7523设有一个对称矩阵ANN , A11 为首元素,将其下三角(包括对角线)元素以行优先顺序存储到一维数组元素T1 至 TN(N+1) 2中,则任一上三角元素A皿(i<j)存于Tk中,下标k为A i(i-1) 2+j B i(i+1) 2+j C j(j-1) 2+iD j(j+1) 2+i24设A 是 n*n 的对称矩阵,将A 的对角线及对角线上方的元素以列为主的次序存放在一维数组 B1.n(n+1)/2中,对上述任一元素aij (K j j 且i <)

8、j在B中的位置为A i(i-l)/2+j-1 B i(i-l)/2+jC j(j-l)/2+i-1Dj(j-l)/2+i25设有一5 阶上三角矩阵A55 ,现将其上三角中的元素按列优先顺序存放在一维数组 B15 中。已知A11 存放在 B1 中,其地址为100,每个元素占用2 个存储单元,则A34 的地址为A 116B 118C 120D 12226将一个三对角矩阵A100100 ,按行优先存入一维数组B298 中, A11 存放在 B1 中。 A 中元素 A6665 ,在 B 数组中的位置K 为A 194B 195C 197D 19827有一个100*90 的稀疏矩阵,非0 元素有 10 个

9、(均为整数)。设每个整型数占2个字节,则用三元组表示该矩阵时,所需的字节数是A 20B 60C 66D 1800028下面关于广义表的说法中,不正确的是下面关于广义表的说法中,不正确的是A 广义表的表头总是一个广义表C.广义表难以用顺序结构存储B 广义表的表尾总是一个广义表29已知广义表的表头为30广义表(已知广义表的表头为a,A (a,b,c)Ba,(b, c), d,表尾为(a,(b,c)b,c)D.广义表可以是,则此广义表为C (a),b,c)个多层次的结构D (a,b,c)e)的表头为A a31设广义表L=A 1 和 132设广义表L=A cBa, b,a,(B b,B(a)c)1和c

10、)b, c33.对于广义表 A,若A ( )C a,(b,c)的长度和深度分别为C1 和 3D (a,(b,c)D 2和 3GetTail (L)操作后的结果为C(b, c)GetHead(A) 等于 GetTail(A) ,则表 A 为B ( )C( ),( )D ( b, c)D ( ),( ),( )34.对广义表 L=(a, b), (c, d), (e, f)执行操作 GetTail(GetTail(L)的结果是A( )B(f)C(e,f)D(e,f)35对广义表L=(a, b), c, d) 执行操作GetTail(GetHead(L) 的结果是AbB(b)C(d)D( c,d)3

11、6 已知广义表A=(a,b) , B=(A,A) , C=(a,(b,A),B) , 执行操作GetTail(GetHead(GetTail(C)后的结果为A bB (b)C AD (A)37 .从广义表LS= (p, q), r, s)中分解出原子q的运算是A GetTail (GetHead (LS)B GetHead (GetTail (GetHead (LS)C GetHead (GetTail (LS)D GetTail (GetTail (GetHead (LS)38 .已知广义表LS=(a, b, c), (d, e, f),从LS中分离出原子 e的运算是A GetHead(Ge

12、tTail(LS)B GetTail(GetHead(LS)C GetHead(GetTail(GetHead(GetTail(LS)D GetHead(GetTail(GetTail(GetHead(LS)、填空题39 空格串是指,其长度等于。40 组成串的数据元素只能是。3 串是一种特殊的线性表,其特殊性表现在; 串的两种最基本的存储方式是 ;两个串相等的充分必要条件是。4若串S1="ABCDEFG", S2="9876" ,S3="#",S4="012345" ,执行Concat(Replace(S1,Sub

13、String(S1,StrLength(S2),StrLength(S3),S3),SubString(S4,Index(S2, "8"),StrLength(S2)4 设T 和 P 是两个给定的串,在T 中寻找等于P 的子串的过程称为,又称 P 为 。6 Index( "DATASTRUCTURE" , "STR" ) =。7 设正文串长度为n, 模式串长度为m, 则串匹配的KMP 算法的时间复杂度为。8 模式串P="abaabcac"的next函数值序列为。9 字符串"ababaaab"的n

14、extval函数值序列为 。10已知串U="xyxyxyxxyxy" , t=" xxy" ;依次执行StrAssign ( S, U );StrAssign( V, SubString( S, Index( S, t),StrLength ( t) +1 );StrAssign ( m, "ww" );Replace( S, V, m); 后, S= , V= 。11设串S="abcdefgh" , T="xyzw" 。依次执行SubString(X , S, 3, StrLength(T)

15、;SubString(Y , S, StrLength(T) , 2);Concat(Z, X, Y);后,串 Z 的值为 。12实现字符串拷贝的函数strcpy 可写为:void strcpy(char *s , char *t)/ copy t to swhile () ;13有一个二维数组A85 ,每个数组元素用相邻的4 个字节存储,存储器按字节编址,假设存储数组第1 个元素 A00 的第一个字节的地址是0,存储数组A 的最后一个元素的第一个字节的地址是。若按行序优先存储,则A34 和 A53 的第一个字节的地址是和 。若按列序优先存储,则A24 和 A71 的第一个字节的地址是和 。1

16、4 一个 10 阶对称矩阵A, 采用行优先顺序压缩存储上三角元素,设第 1 个元素 a11的存储地址为0,每个元素占有1 个字节的存储空间,则a45 的地址为。15设一个6 阶的下三角矩阵B 按行优先顺序压缩存储在一维数组A 中,其中A0 存储矩阵的第一个元素B11 ,则 A14 存储的元素是。 若将 B 按列序优先顺序压缩存储在一维数组A中,则A14存储的元素是 。16稀疏矩阵一般有两种压缩存储方法,即和 。17 一个广义表的长度是指 , 而表的深度是指。 广义表G=(a,b,(c,d,(e,f),G)的长度为 。广义表L=(a,(b,()的深度为 。18设广义表L=() , () ,则 G

17、etHead(L) 是 , GetTail(L) 是 , L 的长度是;深度是 。广义表(a, b) , c, d)的表头是 ,表尾是19用广义表的取表头GetHead 和取表尾GetTail 的运算,从广义表LS=(b,c,(f),(d)中分解出原子c 的操作为。20 . 设广义表A=(a, b, (c, d), (e, (f, g), 用广义表的取表头GetHead 和取表尾GetTail运算,从A 中分解出原子d 的操作为。三、解答题1设有对称矩阵Ann (行和列下标均从1 开始),将其上三角元素逐行存于数组Bn*(n+1)/2 中,使得Bk=aij ( 1<=i, j<=n

18、, 0<=k<=n*(n+1)/2-1 )。试推导出由i、 j 和 n计算 k 的一般公式。21 在nXn矩阵A中,所有下标值满足关系式 i+j v n+l的元素aij (1<=i, j<=n)的值 均为0,现将A中其它元素按行优先顺序依次存储到长度为n(n+1)/2的一维数组sa中,其中元素ai,n存储在sa中。(1)设n=10,元素a49存储在sap中,写出下标 p的值。(2)设元素aij (1<=i, j<=n,且i+j v n+l)存储在sak中,写出由i、j和n计算k 的一般公式。0%*0 %I 兄522 设有n阶三对角矩阵,将其三条对角线上的元素

19、逐行地存于数组B1.3n-2中,使得Bk=aij。(1)设n=100,将一个A100100的三对角矩阵,按行优先存入一维数组B1.m中,试确定m的值,并求 A中元素A7778在B数组中白位置 K。(2)求用i、j表示k的下标变换公式。(3)求用k表示i、j的下标变换公式。4 .设A和B均为n阶下三角矩阵,在下三角区域中各有 n (n+1) /2个元素。另设有 一个二维数组 C,它有n行n+1歹U。试设计一个方案,将两个矩阵A和B中的下三角区域元素存放于同一个C中,写出所给出方案的代码段。并给出计算A的矩阵元素aij和B的矩阵元素bij在C中的存放位置下标的公式。设 A、B、C三个矩阵的行、列下

20、标均从 1开始。5 .设有稀疏矩阵 A如下(矩阵元素的行列下标均从 1开始):(1)若矩阵A采用三元组顺序表存储,试给出其三元组表。 (2)若矩阵采用十字链表存储,试画出该矩阵的十字链表。6 .利用广义表的 GetHead和GetTail操作写出函数表达式,把以下各小题中的单元素 banana从广义表中分离出来:(1) L1= (apple, pear, banana, orange)(2) L2= ( (apple, pear) , ( banana, orange)(3) L3= ( ( ( ( apple) ) ) , ( ( pear) ) , ( banana) , orange)

21、(4) L4= a apple, (pear, (banana) , orange)7 .画出广义表(a), b), (), d), (e, f)的两种存储结构图示。8 .已知广义表如下:A= (B, V)B= (x, L)L= (a, b) (1)写出下列操作的结果GetTail (A) =。GetHead ( B) =。 (2)画出广义表 A所对应的图形(树形结构)。四、分析题1.阅读下列函数,并回答问题。void fun441(int A, int n)int i,j,m;for (i=1; i<n; i+)for (j=0; j<i; j+)m=Ai*n+j;Ai*n+j=

22、Aj*n+i;Aj*n+i=m;( 1)已知矩阵B=,将其按行优先存于一维数组A 中,写出执行函数调用Fun441(A, 3)后,矩阵B 的值。(2)简述函数 void fun441(intA口,int n)的功能。2阅读下列函数,并回答问题。void fun442(char str81)char temp, *begin, *end,*p1,*p2;if(str = NULL)return;begin=str;end=str+strlen(str)-1;while(begin < end)temp = *begin; *begin = *end; *end= temp; begin+;

23、 end-;begin = end = str;while(*begin != '0')if(*begin =' ')begin +; end +;continue;else if(*end = ' ' | *end = '0')for (p1=begin,p2=end-1; p1<p2; p1+,p2-)temp=*p1; *p1=*p2; *p2=temp;if (*end!='0') begin = +end;else begin=end;elseend +;( 1)设有 char str81= ”I

24、am a good worker! ”,执行函数fun442( str) 后,字符串str 的内容是什么?( 2)简述函数void fun442(char str81) 的功能。3.下面函数的功能是判断字符串s是否对称,若对称则返回 true,否则返回false。例如,fun443("abba")返回true, f("abab")返回false。请在划线处填上适当的一个表达式,将 程序补充完整。bool fun443(char s)int i=0,j=0;while (sj);/ ( 1 )for(j-; i<j && si=sj;

25、 ) ;/ ( 2)return ;/ ( 3)4设S 和 T 是用结点大小为1 的单链表存储的两个串。下面函数的功能是找出串S 中T 中出现的字符。请在划线处填上适当的内容,将程序补充完整。struct LNodechar data;struct LNode *next;typedef LNode *LinkStr;char SearchNo(LinkStr S, LinkStr T) / 查找不在T 中出现的字符LinkStr p,q;p=S;/ ( 1)/ (2)/ ( 3)/ 指针恢复串T 的开始结点/ ( 4)q=T;while () while()q=q->next;if (

26、)return p->data;q=T;return NULL;5下面程序的功能是生成从外到内是连续的自然数排列的回旋方阵。例如,当n=3 和n=4 时的回旋方阵如下图1 所示。N=3N418711211102962131693453141584567图 1 由外向内回旋方阵 请在划线处填上适当的内容,将程序补充完整。#include <iostream>#include <iomanip> using namespace std;#define N 10int main()int aNN=0;int n,row,col,num=0;" cin>&

27、gt;n;/ 第 0 行第 0 列输入起始1/ 数组中的数不超过n*ncout<<" 请输入方阵的行数n( n<=10):num=arow=0col=0=1;while(num<n*n) while()/ (1)a+rowcol=+num;/ 向下填充while()/(2)arow+col=+num;/ 向右填充while()/(3)a-rowcol=+num;/ 向上填充while()/(4)arow-col=+num;/ 向左填充for(row=0;row<n;row+)/打印全部数组元素for(col=0;col<n;col+)cout<

28、;<setw(4)<<arowcol;cout<<endl;return 0;五、设计题1 利用 C 的库函数strlen、 strcpy 和 strcat 编写一个函数void StrInsert(char *S , int pos,char *T),将串T插入到串S的第pos个字符之前。若pos大于S的长度,则插入不执行。利用函数strlen 和 strcpy 编写一个函数void StrDelete(char *S , int pos, int len) 删去串S 中从位置pos开始的连续len个字符。若posn strlen(S),则没有字符被删除;若 i

29、+m > strlen(S), 则将S中从位置pos开始直至末尾的字符均删去。2编写一个程序,将一个文本串用事先给定的字母映射表进行加密和解密。设字母映射表为:a b c d e f g h i j k l m n o p q r s t u v w x y zq w e r t y u I o p a s d f g h j k l z x c v b n m3 编写一个程序,将一个含有数字和非数字字符的字符串中连续的数字作为一个整体,依次存放到一维整型数组a中(设字符串中的数均不超过最大机器整数)。例如,有字符串“ak123xyz45678.90?+! 302gen4563”,将 1

30、23 存入 a 0, 456 存入 a 1, 78 存入 a2,90存入a3。(说明:为简单起见,不考虑 78.90是一个浮点数,而是分成78和90两个整数)4蛇形矩阵编写程序,将自然数 1、2、N2按蛇形方式逐个顺序存入N阶方阵。例如,当 N=3和 N=4 时的方阵如下图2 所示。N=3N = 413413410258259116796812157131416图 2 斜线蛇形阵5设稀疏矩阵用三元组的表示形式,且表中的元素已经按行优先的顺序排列好,编写一个函数void AddSMatrix(TSMatrix a, TSMatrix b,TSMatrix &c) 实现两个稀疏矩阵A 和

31、B相加,结果矩阵C 仍用三元组表示。参考答案 一、选择题1 B2 D3 D4C5 D6 B7 B8 A9 D10 A11C12 A13 A14 D15 C16 A17 C18B19 B20 D21 D22 C23 C24 D25A26 B27 C28 A29 A30 A31 C32D33 B34 D35 B36 D37 B38 C二、填空题1由空格字符(ASCII 值 32)所组成的字符串空格个数2字符3 其数据元素都是字符的字符也相等4 ABC#G12347 O(m+n)10 xyxyxywwy12 *s+=*t+ 或 (13 15676 112顺序存储和链式存储5模式匹配模式串8 0112

32、2312xxyx*s+=*t+ ) != 0136 6014 28串的长度相等且两串中对应位置6 59 0101042111 cdefde15. B6316.三元组十字链表17. 表中元素的个数表展开后所含括号的层数(或广义表中括弧的重数)4 318. ()( () )22(a, b)(c, d)19. GetHead(GetTail(LS)20. GetHead(GetTail(GetHead(GetTail(GetTail(A)三、解答题1 .当i<=j时,aij位于对称矩阵的上三角。上三角矩阵第一行有n个元素,第i-1行有n-(i-1 )+1个元素,第一行到第i-1行是等腰梯形,元

33、素数为(n+(n-(i-1)+1)(i-1)/2,而aij 是第i行上第j-i+1个元素,故元素aij在一维数组中的存储位置(下标 k)为:k=(n+(n-(i-1)+1)(i-1)/2+0-i+1)-1=(2n-i+2)(i-1)/2+j-i当i>=j时,aij位于对称矩阵的下三角,此时相当于按列序优先存储到B数组中。同理可以推知,k=(2n-j+2)(j-1)/2+i-j(验证程序请参阅随书光盘的程序文件xiti4_3_1.cpp )2 . (1) p=9。(2)当i+jvn+l时,aij位于矩阵的右下三角。下三角矩阵第一行有1个元素,第i-1行有i-1个元素,第一行到第i-1行的元

34、素数为i*(i-1)/2 ,而aij是第i行上第i+j-n个元 素,故元素aij在一维数组中的存储位置(下标 k)为:K=i*(i-1)/2+i+j-n-1(验证程序请参阅随书光盘的程序文件xiti4_3_2.cpp )3 .(1)三对角矩阵第一行和最后一行各有两个非零元素,其余每行均有三个非零元素,所以共有 3n-2个元素。即 m=3*100-2=298。A7778位于第77行的第3个位置,前76行有3*76-1个元素,所以k=3*76+2=230 。(2)主对角线左下对角线上的元素下标间有i=j+1关系,k与i和j的关系为k=3(i-1);主对角线上元素下标间有关系i=j , k与i和j的

35、关系为k=3(i-1)+1 ;主对角线右上那条对角线上元素下标间有关系i=j-1 , k与i和j的关系为k=3(i-1)+2。综合以上三等式,有 k=2(i-1)+j(1<=i , j<=n ,|i-j|<=1 )(3) i=k/3+1 ; (1WkW3-2)/ k/3 取小于 k/3 的最大整数j = k-2(i-1) = k-2(k/3) = k%3+k/3(验证程序请参阅随书光盘的程序文件xiti4_3_3.cpp )4. 方案为将A的下三角区域中的元素存放于C的下三角区域中,B的下三角区域中的元素转置后存放于C的上三角区域中。代码段为:for(i=1;i<=N;

36、i+)/ 将 A 和 B 存储到 C 中for(j=1;j<=i;j+)cij=aij;for(j=i+1;j<=N+1;j+)cij=bj-1i;A的矩阵元素aij和B的矩阵元素bij在C中的存放位置下标的公式为:Aij=Cij;(1<=i<=n, 1<=j<=i )Bij=Cji+1;(1<=i<=n, 1<=j<=i )(验证程序请参阅随书光盘的程序文件xiti4_3_4.cpp )5. (1)A.data1115A.data2144A.data3168A.data4233A.data5347A.data6516ie(2)该矩阵

37、的十字链表如图 3所示。图3 题3-5(2)答图6. (1) GetHead (GetTail (GetTail (L1)(2) GetHead (GetHead (GetTail (L2)(3) GetHead (GetHead (GetTail (GetTail (L3)(4) GetHead (GetHead (GetTail (GetHead (GetTail (L4)7 .所给广义表的两种存储结构如图4所示。图4 题3-7答图8 . (1) (y)x(2)广义表A所对应的图形如图 5所示。题3-8 (2)答图图5四、分析题1. (1)(2)实现按行优先存于一维数组A中的矩阵的转置。2

38、. ( 1) worker! good a am I(2)翻转句子中单词的顺序,但单词内字符的顺序不变。3. (1)j+(2) i+,j-4. ( 1) p (或 p!=NULL )(2)(3) q=NULL (或!q )(4)5. (1) row+1<n && !arow+1col (3) row-1>=0&&!arow-1col五、设计题1. void StrInsert(char *S, int pos,char *T)/在串S的第pos个字符之前插入串 T char *Temp;Temp=new char strlen(S)+1; / if

39、(pos<=strlen(S) strcpy(Temp,&Spos); / 将第(3) i>=jq&&p->data!=q->datap=p->next(2) col+1<n&&!arowcol+1(4) col-1>=0&&!arowcol-1设置一个临时串pos位起以后的字符拷贝到临时串中strcpy(&Spos, T);/ 将串 T 拷贝到串S 的第 i 个位置处,覆盖后面的字符strcat(S,Temp); / 把临时串中的字符联接到串S 后面delete Temp;void St

40、rDelete(char *S, int pos ,int len)/ 从串 S 中删除第pos 个字符起长度为len 的子串char *Temp;Temp=new char strlen(S)+1;/设置一个临时串if(pos+len<strlen(S)strcpy (Temp, &Spos+len); / 把删除的字符以后的字符保存到临时串中strcpy( &Spos,Temp);/ 用临时串中的字符覆盖位置i 之后的字符else if (pos+len>=strlen(S) && pos<strlen(S)strcpy(&Spos

41、,"0");/ 把位置 pos 的元素置为'0',表示串结束delete Temp;2 #include <iostream>#include <string.h>using namespace std;void EncryptAndDecipher(char Original27, char Cipher27, char *T);int StrMatch(char *s,char c);int main()char Original27="abcdefghijklmnopqrstuvwxyz" / 加密及解密映射

42、表char Cipher27 ="qwertyuiopasdfghjklzxcvbnm"char str81;cout<<" 请输入一个待加密字符串:"cin>>str;EncryptAndDecipher(Original, Cipher, str);cout<<" 加密后,字符串为:"<<str<<endl;EncryptAndDecipher(Cipher, Original, str);cout<<" 解密后,字符串为:"<<

43、;str<<endl;return 0;int StrMatch(char *s,char c)int i;for (i=0; i< strlen(s); i+)if (c=si) return i;/ 匹配成功,返回位置return -1;/ 映射表中没有相应字符void EncryptAndDecipher(char Original27, char Cipher27, char *T) / 加密和解密,加密是Original 作为明文,Cipher 作为密文,解密时相反。int i,m;for (i=0; i < strlen(T); i+)m=StrMatch(

44、 Original, Ti);if(m!=-1) Ti=Cipherm;3思路:从左到右扫描字符串,初次碰到数字字符时,作为一个整数的开始,然后进 行拼数(即将连续出现的数字字符拼成一个整数,直到碰到非数字字符为止),一个整数拼 完,存入数组,再准备拼下一整数,如此下去,直至整个字符串扫描结束。#include <iostream>#include <iomanip>using namespace std;int main()int cnt=0,a40,i,num;/ 整数存储到数组a, cnt 保存整数个数char str81;cout<<" 请

45、输入一个长度不超过80 的字符串:"<<endl;cin.getline(str,81,'n');i=0;while (stri!='0')if (stri>='0' && stri<='9')/ 是数字字符num=0;/ 整数初始化为0while (stri>='0' && stri<='9')/ 拼数num=num*10+stri-'0'i+;acnt+=num;if (stri='0'

46、) break; i+;if (cnt=0)cout<<" 字符串中不含有数字字符! "<<endl;else cout<<" 字符串中不含"<<cnt<<" 个数,依次为:"<<endl;for (i=0;i<cnt;i+) cout<<ai<<""cout<<endl;return 0;4思路1:“蛇形”方式是按“副对角线”平行的各对角线,从右上到左下,再从左下到右上,存放 n2个整数。对角线共 2

47、n-1条,用一个循环for (k=1;k<=2*n-1;k+) 来填写2*n-1条对角线。在副对角线上方,有 n-1条对角线,第k (1<=k<n)条对角线上有k个元 素,数组元素坐标(i, j)之和为k+1。副对角线下方,有 n-1条对角线,第k条对角线上 有 2*n-k 个元素。它与第2*n-k 条对角线对称,其元素的下标等于其对称元素的相应坐标各加(k-n)。#include <iostream>#include <iomanip> using namespace std;#define N 10int main()int i,j,n,k,p,q

48、,m;int a NN;cin>>n;m=1;for (k=1;k<=2*n-1;k+)/ 共填 2*n-1 条对角线if (k<n) q=k;else q=2*n-k;/ 副对角线以下的各条对角线上的元素数for (p=1; p<=q; p+)if (k%2=0) i=q-p+1; j=p; else i=p;j=q-p+1; if(k>=n) i=i+n-q; j=j+n-q;/ k 为偶数时从右上到左下,/ 否则从左下向右上填数/ 修改副对角线下方的下标i 和 jaij=m;m+;/ 为填下个数作准备,m 变化范围1.n*n。for(i=1;i<

49、=n;i+)for(j=1;j<=n;j+)cout<<setw(4)<<aij;cout<<endl;return 0;思路 2:仔细分析方阵中数的填法,是按“从右上到左下”的”蛇形”,沿平行于副对角线的各条对角线上,将自然数从小到大填写。当从右上到左下时,坐标i 增加,坐标j 减小, 当 j 减到小于0 时结束,然后 j 从 0 开始增加,而 i 从当前值开始减少,到 i<0 时结束。然后继续如此循环。当过副对角线后,在 i>n-1 时, j=j+2 , 开始从左下向右上填数;而当 j>n-1时, i=i+2 ,开始从右上向左下的

50、填数,直到n*n 个数填完为止。#include <iostream>#include <iomanip> using namespace std;#define N 10int main()int i,j,n,k;int a NN;cin>>n;i=0; j=0; k=1;/ i,j 是矩阵元素的下标,k 是要填入的自然数while (i<n && j<n)while(i<n && j>-1)/ 从右上向左下填数 aij=k+; i+ ;j-; if(j<0)&&(i<n)

51、 j=0;/ 副对角线及以上部分的新i,j 坐标else j=j+2; i=n-1;/ 副对角线以下的新的i,j 坐标while(i>-1 && j<n) / 从左下向右上 aij=k+; i-; j+; if (i<0 && j<n) i=0;else i=i+2; j=n-1;for(i=0;i<n;i+)for(j=0;j<n;j+)cout<<setw(4)<<aij;cout<<endl;return 0;5思路:首先判断三元组A、 B 表示的矩阵是否行列相同,若相同才能进行矩阵的加法运算。设置三个变量i、 j 和 p 分别指向矩阵A、 B 和 C 对应三元组中的当前元素。初始时, i=j=1 , p=0。若a、 b 表的指针均没有到表尾(while (i<=a.tu)&&(j<=b.tu) ),重复下列步骤:( 1)若 a 表元素的i 域值小于b 表元素的i 域值,将a 表当前元素插入到c 表表

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论