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'
};
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種建構函式的呼叫順序為:
先父母,再客人,後自己。