1. 程式人生 > >C/C++練習題-2018/12/19

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("%d\n" ,strlen(strcpy(s1,s2)));

strcpy(s1,s2)這個函式是把s2字串拷貝到s1這個字串,同時也把s2的 '\0' 拷過去,所以覆蓋了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 > b\n");

else

    printf("a <= b\n");

    則程式輸出:

char a[] = "xyz", b[] = {'x''y''z'};

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

b是陣列,元素在記憶體中是連續儲存的,而strlen函式求字串長度是要以'\0'結尾,但是b沒有'\0',

strlen的內部函式指標會一直向後搜尋,直至找到'\0',記憶體中的其他區域也是有資料的,只是沒有意義,

所以,strlen的指標最後指到哪裡無法確定,但是結果肯定大於等於3.

8.利用fseek函式可以實現的操作是:

1.改變檔案的位置 2.指標檔案的順序讀寫 3.檔案的隨機讀寫

 9.     7&3+12的值是15。請問這句話的說法是正確的嗎?

+優先於&

10. 建立派生類物件時,3種建構函式分別是a(基類的建構函式)、b(成員物件的建構函式)、c(派生類的建構函式)這3種建構函式的呼叫順序為: 

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