【C Primer Plus第六版中文】 課后習(xí)題 第三章 3.10復(fù)習(xí)題(個人總結(jié)版)

(前言:本文章由個人收集相關(guān)資料且撰寫而成,初心是在學(xué)習(xí)中做筆記,供個人學(xué)習(xí)使用)

1. 指出下面各種數(shù)據(jù)使用的合適數(shù)據(jù)類型(有些可使用多種數(shù)據(jù)類型)
a. East Simpleton的人口
b. DVD影碟的價格
c. 本章出現(xiàn)次數(shù)最多的字母
d. 本章出現(xiàn)次數(shù)最多的字母次數(shù)
解答:
a. East Simpleton的人口:使用整數(shù)型數(shù)據(jù)類型(int),因為人口通常是一個整數(shù)值,不需要小數(shù)部分;也可以用short或unsigned short類型。
b. DVD影碟的價格:使用浮點型數(shù)據(jù)類型(float或double),因為價格通常是一個帶有小數(shù)的實數(shù)值;通常用float,實際上不需要double那么高的精度。
c. 本章出現(xiàn)次數(shù)最多的字母:使用字符型數(shù)據(jù)類型(char),因為字母是單個字符。
d. 本章出現(xiàn)次數(shù)最多的字母次數(shù):使用整數(shù)型數(shù)據(jù)類型(int),因為次數(shù)是一個整數(shù)值,不需要小數(shù)部分,也可以是unsigned類型。
2. 在什么情況下要用long類型的變量代替int類型的變量呢?
a. 在系統(tǒng)中要表示的數(shù)超過了int可表示的范圍,這時要使用long類型,防止數(shù)據(jù)溢出
b. 如果要處理更大的值,那么使用 一種在所有系統(tǒng)上都保證至少是32位的類型,可提高程序的可移植性。
3. 使用哪些可移植的數(shù)據(jù)類型可以獲得32位有符號整數(shù)?選擇的理由是什么?
在C語言中,可以使用int32_t和int_least32_t這兩個可移植的數(shù)據(jù)類型來獲得32位有符號整數(shù)。
a. int32_t:這是一個固定大小的數(shù)據(jù)類型,保證其大小為32位。在大多數(shù)平臺上,`int32_t`被定義為`int`類型,大小為32位。如果存在的話,它是最直接的選擇,因為它確保了固定的大小。
b. int_least32_t:這是一個最小大小的數(shù)據(jù)類型,至少保證其大小為32位。如果平臺上沒有32位的整數(shù)類型,`int_least32_t`會選擇最小的可以容納32位整數(shù)的整數(shù)類型。這樣,即使平臺不支持32位的`int`類型,也可以保證至少有一個32位的整數(shù)類型。
c. 如果要為32位整數(shù)提供最快的計算速度,可以選擇int_fast32_t類型(假設(shè)你的系統(tǒng)已定義了上述類型)
選擇使用這三個可移植的數(shù)據(jù)類型的理由是,它們能夠確保在各種平臺上都能得到32位的有符號整數(shù),避免了平臺之間數(shù)據(jù)類型大小不一致的問題,增強了代碼的可移植性和可靠性。使用這些數(shù)據(jù)類型可以讓代碼在不同的編譯器和計算機上都能正常工作,而不需要關(guān)心平臺的底層實現(xiàn)細(xì)節(jié)。
4. 指出下列常量的類型和含義(如果有的話):
a. ‘\b’
b. 1066
c. 99.44
d. 0XAA
e. 2.0e30
解答:
a. ‘\b’:char類型常量(但是儲存為int類型)
b. 1066:這是一個整數(shù)常量,類型為`int`,表示十進(jìn)制數(shù)值1066。
c. 99.44:這是一個浮點數(shù)常量,類型為`double`,表示浮點數(shù)值99.44。
d. 0XAA:unsigned int 類型常量,十六進(jìn)制格式,
e. 2.0e30:這是一個浮點數(shù)常量,類型為`double`,表示科學(xué)計數(shù)法表示的浮點數(shù)值2.0乘以10的30次方。
5. Dottie Cawm編寫了一個程序,請找出程序中的錯誤。
……
第一行:改為 #include<stdio.h>
第二行:改為int main()
第三行:把(改為{
第四行:g和h之間的;改為,
第五、六行:沒問題
第七行:在e前面至少有個數(shù)字,例如1e21
第八行:沒問題
第九行:把(改為{
除此之外,還缺少一些內(nèi)容。首先,沒有給rate變量賦值;其次未使用h變量;而且程序不會報告計算結(jié)果。雖然這些錯誤不會影響程序的運行(編譯器可能給出未被使用的警告),但是它們確實與程序設(shè)計的初衷不符合。另外,在該程序的末尾應(yīng)該有一個return語句。
修正后:

6、7常量、類型及其轉(zhuǎn)換說明

8. 假設(shè)程序的開頭有下列聲明:int imate = 2……
%d?? %ld?? %f?? %c
其中第二個,為long類型而非long double 則用十進(jìn)制%d,中間再加上類型首字母long的“l(fā)”即%ld
9. 假設(shè)ch是char類型的變量。分別使用轉(zhuǎn)義序列、十進(jìn)制值、八進(jìn)制字符常量和十六進(jìn)制字符常量把回車字符賦給ch(假設(shè)使用ASCII碼)
首先:ASC碼是指ASCII碼(American Standard Code for Information Interchange),它是一種用于表示字符的編碼標(biāo)準(zhǔn)。
轉(zhuǎn)義序列:ch = ‘\n’;
十進(jìn)制值:ch = 10;
八進(jìn)制字符:ch = ‘\012’
十六進(jìn)制字符:ch = ‘\xOA’
或者
轉(zhuǎn)義序列:ch = ‘\r’;
十進(jìn)制值:ch = 13;
八進(jìn)制字符:ch = ‘\015’
十六進(jìn)制字符:ch = ‘\xd’
兩種寫法是由于:
在C語言中,`\n`和`\r`都是轉(zhuǎn)義字符,用于表示特殊的控制字符。
1. `\n`:代表換行符(Newline)
?? - 在輸出中,`\n`會使得光標(biāo)移到下一行的行首,相當(dāng)于按下回車鍵換行。
?? - 在字符串中,使用`\n`可以換行,使得文本更加清晰易讀。
2. `\r`:代表回車符(Carriage Return)
?? - 在輸出中,`\r`會使得光標(biāo)移到本行的行首,相當(dāng)于將光標(biāo)移至最左邊,但不會換行。
?? - 在字符串中,使用`\r`可以實現(xiàn)在當(dāng)前行內(nèi)的文本覆蓋,常用于文本動畫或覆蓋輸出。
在大多數(shù)情況下,使用`\n`來表示換行更為常見,而`\r`常用于特殊需求,如在Windows系統(tǒng)中,文本的換行通常是由兩個字符組成:`\r\n`,即先回車再換行。而在Unix/Linux系統(tǒng)中,則通常只使用`\n`來表示換行。
10. 修正下面的程序(在C中,/表示除以)
前面缺少一行#include<stdio.h>
第一行:使用/* 和 */將注釋括起來,或者在注釋前面用//
第三行:改為 int cows, legs;
第四行:在\n后加”
第五行:把%c改為%d,把legs改為&legs
第七行:把%f改為%d

11. 指出下列轉(zhuǎn)義序列的含義:
a. \n ?????b. \\ ?????c. \” ?????d. \t
解:a. 換行字符 ?????b. 反斜杠字符 ?????c. 雙引號字符 ??????d. 制表字符