C# · 12月 20, 2021

C/C++练习题-2018/12/19

1.若串S=′software′,其子串的数目是:

字串: n(n+1)/2 + 1

非空子串:n(n+1)/2

非空真子串:n(n+1)/2 – 1

2. 不能所字符串“Good!”存放到数组 s 中的代码是:

char s[8];

s = “Good!”;

s是个数组名,是常量,不可以被赋值,正确的写法应该是

char *s;s=”good!”;

3.char s1[]=”12345″,*s2=”1234″; printf(“%dn”,strlen(strcpy(s1,s2)));

strcpy(s1,s2)这个函数是把s2字符串拷贝到s1这个字符串,同时也把s2的 ” 拷过去,所以覆盖了s1的所有字符(在空间足够的情况下,当然遇到s1的空间不足以存放s2,另考虑),所以strcpy执行完后是“1234” strlen(“1234”)  就是4了

4.字符串通常采用的两种存储方式是? 

字符串的两种最基本的存储方式是顺序存储方式和链接存储方式

解释:顺序存储和链式存储时两种最基本的存储结构,字符串通常采用顺序存储,但是字符串较长而没有那么大的连续空间时,可以把一个字符串分成多个小串,串与串之间采用链式存储

5.某字符串满足:concat(head(s),head(tail(tail(s))))=”ac”,(head,tail的定义同广义表),则S=(accc)

广义标的head  tail 概念  :head是字符串中的第一个字符。tail是除了第一个字符串剩下的所有字符,如果字符串只有一个字符,那么tail为空

6.假设某段通信电文仅由 6 个字母 ABCDEF 组成,字母在电文中出现的频率分别为2,3,7,15,4,6。根据这些频率作为权值构造哈夫曼编码,最终构造出的哈夫曼树带权路径长度与字母 B 的哈夫曼编码分别为______。(这里假定左节点的值小于右节点的值)

2*4+3*4+4*3+6*3+7*3+15*1=86

1011.

 7.有如下程序段:

1

2

3

4

5

char a[] = “xyz”,b[] = {‘x’, ‘y’, ‘z’};

if (strlen(a) > strlen(b))

    printf(“a > bn”);

else

    printf(“a <= bn");

    则程序输出:

char a[] = “xyz”, ‘z’};

a容易理解,strlen(a)=3;

b是数组,元素在内存中是连续存储的,而strlen函数求字符串长度是要以”结尾,但是b没有”,

strlen的内部函数指针会一直向后搜索,直至找到”,内存中的其他区域也是有数据的,只是没有意义,

所以,strlen的指针最后指到哪里无法确定,但是结果肯定大于等于3.

8.利用fseek函数可以实现的操作是:

1.改变文件的位置 2.指针文件的顺序读写 3.文件的随机读写

 9.     7&3+12的值是15。请问这句话的说法是正确的吗?

+优先于&

10. 建立派生类对象时,3种构造函数分别是a(基类的构造函数)、b(成员对象的构造函数)、c(派生类的构造函数)这3种构造函数的调用顺序为: 

先父母,再客人,后自己。