言PTA判斷題錯(cuò)題本:高頻考點(diǎn)與三遍刷題法)
簡(jiǎn)介這份PTA理論考復(fù)習(xí)資料以Word文檔形式整理了HW02、HW03等章節(jié)的判斷題與參考答案覆蓋C語(yǔ)言基礎(chǔ)語(yǔ)法、編譯預(yù)處理命令、main函數(shù)作用、變量?jī)?nèi)存分配、單目/雙目運(yùn)算符、賦值與算術(shù)優(yōu)先級(jí)、scanf/printf格式控制以及for循環(huán)求和、階乘等高頻考點(diǎn)適合正在刷PTA平臺(tái)理論題、需要快速核對(duì)答案并理解易錯(cuò)知識(shí)點(diǎn)的初學(xué)者。資源包共包含1個(gè)docx文檔約345KB輕量便攜支持在Word中按關(guān)鍵詞定位查找題目與答案解析。目前已有1895人學(xué)習(xí)使用。文檔后半部分還附有詳細(xì)知識(shí)點(diǎn)講解針對(duì)整數(shù)除法、浮點(diǎn)數(shù)取模、scanf讀取格式、空語(yǔ)句與復(fù)合語(yǔ)句等常見(jiàn)陷阱逐條辨析可幫助讀者在刷題之外系統(tǒng)梳理C語(yǔ)言核心概念有效減少理論考失分點(diǎn)。1. 考前刷 PTA 理論題這份 docx 就是現(xiàn)成的 C 語(yǔ)言判斷題錯(cuò)題本期末前一周群里最熱鬧的永遠(yuǎn)是“PTA 上 1-14 這道題選 T 還是 F”“1-17 的代碼為什么運(yùn)行結(jié)果和我手算的不一樣”。判斷題看著只有兩個(gè)選項(xiàng)實(shí)際每一道都在摳語(yǔ)法細(xì)節(jié)先聲明后使用、整數(shù)除法截?cái)唷?f 與 %lf 的類(lèi)型匹配任何一個(gè)知識(shí)點(diǎn)沒(méi)記牢就是五五開(kāi)靠猜。這份“PTA理論考部分.docx”把高頻判斷題和選擇題按題號(hào)整理在一起題目、代碼片段、T/F 選項(xiàng)都在同一個(gè)文檔里適合兩類(lèi)人一類(lèi)是剛開(kāi)始刷 C 語(yǔ)言題、需要一份帶答案的題集逐題對(duì)照另一類(lèi)是考前突擊用題號(hào)快速鎖定自己沒(méi)掌握的知識(shí)點(diǎn)。它不是教材但比教材更接近考場(chǎng)的問(wèn)法。2. 考點(diǎn)地圖這份題集覆蓋的六類(lèi)高頻判斷題先把文檔里的題按考點(diǎn)歸類(lèi)你會(huì)發(fā)現(xiàn) PTA 理論考的出題套路非常固定翻來(lái)覆去就是程序結(jié)構(gòu)、變量與表達(dá)式、運(yùn)算符、格式化輸入輸出、循環(huán)、分支與字符這幾塊。下面這張表是我按題號(hào)整理出來(lái)的考點(diǎn)分布方便你拿到文檔后直接對(duì)號(hào)入座??键c(diǎn)類(lèi)別典型題號(hào)核心判斷依據(jù)預(yù)處理與程序結(jié)構(gòu)1-3、1-5、1-6、1-7include 不加分號(hào)程序從 main 開(kāi)始變量聲明與表達(dá)式1-10、1-11、1-12、1-13、1-14先聲明后使用% 只作用于整型運(yùn)算符與自增1-17、1-18、1-14(HW03)賦值優(yōu)先級(jí)低于算術(shù)i 會(huì)改變?cè)蹈袷交斎胼敵?-7、1-8、1-9、1-11格式串與變量類(lèi)型必須一一匹配for 循環(huán)1-15、1-16、1-21 至 1-24、4-2表達(dá)式 1 只執(zhí)行一次注意初始化字符與 ASCII1-10 至 1-24(HW04)ASCII 碼順序、大小寫(xiě)差 32switch 分支1-27 至 1-33、2-5 至 2-9case 必須常量無(wú) break 會(huì)穿透2.1 程序結(jié)構(gòu)三連問(wèn)預(yù)處理、main 函數(shù)、執(zhí)行起點(diǎn)第一類(lèi)題基本送分但錯(cuò)的人最多的是 1-3 這道#include stdio.h; // 這是編譯預(yù)處理命令題目問(wèn)這句話對(duì)不對(duì)答案是 F。#include是預(yù)處理指令不是普通 C 語(yǔ)句末尾不能加分號(hào)。實(shí)際寫(xiě)代碼時(shí)你在 VS Code 里按分號(hào)編譯器通常會(huì)警告甚至報(bào)錯(cuò)PTA 理論考就是把這些細(xì)節(jié)單獨(dú)拎出來(lái)問(wèn)你。類(lèi)似的還有 1-5“任何一個(gè)程序都必須有而且只能有一個(gè) main() 函數(shù)”這是對(duì)的1-6“C 語(yǔ)言程序是從源文件的第一條語(yǔ)句開(kāi)始執(zhí)行的”這是錯(cuò)的執(zhí)行永遠(yuǎn)從 main 函數(shù)的第一條語(yǔ)句開(kāi)始源文件里 main 之前的全局聲明和宏定義都不算執(zhí)行語(yǔ)句哪怕 main 寫(xiě)在文件最后也一樣。判斷這類(lèi)題有個(gè)通用技巧看到“第一條語(yǔ)句”“只能有一個(gè)”“必須”這類(lèi)絕對(duì)化表述先想有沒(méi)有例外。main 函數(shù)確實(shí)只能有一個(gè)這是標(biāo)準(zhǔn)規(guī)定的但“從第一條語(yǔ)句開(kāi)始執(zhí)行”這個(gè)說(shuō)法默認(rèn)了第一條語(yǔ)句在 main 里而源文件開(kāi)頭往往是#include和宏定義所以是錯(cuò)的。2.2 變量與表達(dá)式合法性先聲明再使用是底線1-10 這道題給了一個(gè)反直覺(jué)的片段很多人第一眼看覺(jué)得沒(méi)毛病k 1; int k;答案是 F不符合 C 語(yǔ)言語(yǔ)法。C 語(yǔ)言要求變量先聲明后使用這里先把 1 賦給一個(gè)不存在的變量聲明放在后面毫無(wú)意義編譯直接報(bào)“未聲明的標(biāo)識(shí)符”。這類(lèi)題在 PTA 里反復(fù)出現(xiàn)換了個(gè)馬甲而已有時(shí)候把int k;放到k 1;后面有時(shí)候用int x, y;然后寫(xiě)x y 22;。后者同樣是 F因?yàn)橘x值號(hào)左邊必須是一個(gè)左值表達(dá)式x y不是變量不能作為賦值目標(biāo)。1-12 說(shuō)“單目運(yùn)算符需要 2 個(gè)操作數(shù)”一眼假。單目就是你只有一個(gè)數(shù)比如i、-x、!flag雙目才是兩個(gè)比如a b。1-14 說(shuō)double x時(shí)x % 2符合語(yǔ)法這是經(jīng)典陷阱。%是取余運(yùn)算符C 語(yǔ)言明確規(guī)定只能用于整型操作數(shù)對(duì)double用%編譯直接報(bào)錯(cuò)。做題時(shí)看到浮點(diǎn)數(shù)和%同框不用猶豫直接選 F。2.3 運(yùn)算符優(yōu)先級(jí)賦值表達(dá)式本身有值這是最大的坑HW03 里的 1-4題干給了這么一段if (x 20) { y 1; } else { y 0; }問(wèn)執(zhí)行后 x 的值變不變。答案是 Fx 的值會(huì)變而且這個(gè) if 條件永遠(yuǎn)為真。原因在于x 20不是比較是賦值表達(dá)式這個(gè)表達(dá)式的值就是 20非零即為真else 分支永遠(yuǎn)不會(huì)執(zhí)行。你以為是在判斷 x 是否等于 20實(shí)際是在給 x 賦值的途中順手做了個(gè)條件判斷。原始題 1-18 還說(shuō)了一件事“假設(shè)賦值運(yùn)算符的優(yōu)先級(jí)比算術(shù)運(yùn)算符高執(zhí)行int n; n 10 2;后 n 的值為 10。”這句話也是 F。不是結(jié)果算不對(duì)而是“假設(shè)”本身就是錯(cuò)的C 語(yǔ)言里賦值優(yōu)先級(jí)低于算術(shù)所以n 10 2是先算10 2得到 12再賦給 n。PTA 經(jīng)常用這種錯(cuò)誤假設(shè)來(lái)釣魚(yú)看到“假設(shè)”兩個(gè)字就要警覺(jué)按真實(shí)標(biāo)準(zhǔn)判斷別順著它的假設(shè)往下想。2.4 printf/scanf 格式串類(lèi)型對(duì)不上輸出全亂格式化輸入輸出是這套題里翻車(chē)率最高的部分尤其 1-7、1-8、1-9 三道連在一起// 1-7double x; scanf(%d, x); 輸入 10輸出 10.00 double x; scanf(%d, x); printf(%.2f, x);答案是 F。%d期望一個(gè)int*你給了double*scanf 會(huì)按 int 的大小把數(shù)據(jù)寫(xiě)到 x 的前半段內(nèi)存里double 的高位字節(jié)是隨機(jī)值輸出大概率不是 10.00。1-8 把格式串換成%f同樣不對(duì)%f對(duì)應(yīng)的是float*類(lèi)型不匹配是未定義行為。1-9 更狠scanf(x%lf, x);如果輸入只是30沒(méi)有x前綴scanf 匹配失敗x 根本沒(méi)被賦值。要想成功必須輸入x30才行。格式串里的普通字符必須原樣匹配輸入這不是描述是匹配規(guī)則。1-11 給的是格式串順序和變量不對(duì)應(yīng)int money, year; double rate; scanf(%d %lf %d , money, year, rate);答案是 F。變量順序是 money、year、rate格式串順序卻是%d %lf %d第二個(gè)%lf會(huì)讀到 year 的地址上第三個(gè)%d讀到 rate 的地址上整型和浮點(diǎn)全亂套了。記憶方法很簡(jiǎn)單scanf 的參數(shù)從第二個(gè)開(kāi)始必須和格式串里的轉(zhuǎn)換說(shuō)明從左到右一一對(duì)應(yīng)類(lèi)型也要匹配差一個(gè)都不行。2.5 for 循環(huán)執(zhí)行次數(shù)邊界、初始化、類(lèi)型三個(gè)變量一起看1-21 到 1-24 是循環(huán)題的重災(zāi)區(qū)先看 1-21int i, sum; for (i 1; i 10; i) { sum sum i; }題目說(shuō) sum 的值是 55答案是 F。理由很直接sum 沒(méi)初始化初始值是不確定的通常默認(rèn) 0但標(biāo)準(zhǔn)不保證拿不確定的值去累加結(jié)果無(wú)法判斷。你可能會(huì)說(shuō)“運(yùn)行起來(lái)就是 55”但理論考考的是語(yǔ)言標(biāo)準(zhǔn)不是某臺(tái)機(jī)器的運(yùn)行結(jié)果。1-22 的階乘題同理int i; double product; product 0; for (i 1; i 20; i) { product product * i; }答案是 F。product 初始值為 00 乘任何數(shù)都等于 0算出來(lái)是 0 而不是 20 的階乘。這就是典型的“看著像階乘實(shí)際是零乘法”。4-2 是計(jì)算執(zhí)行次數(shù)的大題題干代碼很經(jīng)典int fahr; double celsius; for (fahr 91; fahr 100; fahr) celsius 5.0 * (fahr - 32) / 9.0; // 語(yǔ)句① printf(%4d%6.1f\n, fahr, celsius); // 語(yǔ)句②語(yǔ)句①執(zhí)行 10 次fahr 從 91 到 100語(yǔ)句②執(zhí)行 1 次循環(huán)體共執(zhí)行 10 次循環(huán)結(jié)束時(shí) fahr 的值是 101。最后一點(diǎn)是高頻考點(diǎn)for 循環(huán)結(jié)束后控制變量停在第一個(gè)不滿足條件的位置也就是 101。很多人填 100那是循環(huán)最后一次執(zhí)行時(shí)的值不是結(jié)束后的值。2.6 ASCII 碼順序與 switch 語(yǔ)法記憶要精確到差值字符類(lèi)的判斷題核心就兩個(gè)記憶錨點(diǎn)一是大小寫(xiě)字母 ASCII 差 32二是數(shù)字字符按升序連續(xù)排列。文檔里有道題問(wèn)“數(shù)字字符 1 的值就是數(shù)字 1”答案是 F1 的 ASCII 碼是 49和數(shù)字 1 差了十萬(wàn)八千里。還有“大寫(xiě)字母 M 的 ASCII 碼比小寫(xiě)字母 m 大”這也是 F大寫(xiě)字母統(tǒng)一比小寫(xiě)小 32M 是 77m 是 109。switch 的語(yǔ)法坑集中在 1-28 到 1-33。case 常量表達(dá)式的值不能相同1-28 說(shuō)“可以相同”選 Fdefault 必須使用1-29 選 Fdefault 是可選的不是必須的1-30 更典型switch(choice) { case choice 1: price 3.0; break; }答案是 F。case 后面必須是整型常量表達(dá)式像choice 1這種比較表達(dá)式是運(yùn)行期才能確定的值編譯器不認(rèn)。后面 1-32“case 語(yǔ)句后如沒(méi)有 break順序向下執(zhí)行”是對(duì)的這就是 switch 的穿透規(guī)則實(shí)際開(kāi)發(fā)里漏寫(xiě) break 導(dǎo)致的 bug在理論題里反而是考點(diǎn)。3. 把易錯(cuò)題拆開(kāi)看賦值、除法和格式串的四個(gè)雷區(qū)第 2 章把考點(diǎn)過(guò)了一遍這一章挑四個(gè)最容易被誤判的題目類(lèi)型深入拆解每一類(lèi)都配有反例和調(diào)試思路。你會(huì)發(fā)現(xiàn) PTA 判斷題的 T/F 背后考察的是 C 語(yǔ)言規(guī)范里幾個(gè)很具體的邊界條件。3.1 if(x 20)賦值表達(dá)式當(dāng)條件永遠(yuǎn)為真這道題值得反復(fù)說(shuō)因?yàn)檫x擇題里出現(xiàn)過(guò)判斷題里也出現(xiàn)過(guò)。if (x 20)在 C 語(yǔ)言里完全合法它做兩件事先把 20 賦給 x然后判斷這個(gè)賦值表達(dá)式的值也就是 20是否為真。非零即為真所以 if 分支必然執(zhí)行。#include stdio.h int main(void) { int x 5; if (x 20) { // 注意是單等號(hào)不是雙等號(hào) printf(always true\n); } else { printf(never here\n); } printf(x %d\n, x); // 輸出 x 20 return 0; }邏輯說(shuō)明第 4 行的x 20是賦值表達(dá)式不是比較所以 else 分支不可達(dá)x 從 5 被改成 20。PTA 原題說(shuō)“x 的值不變”顯然錯(cuò)誤。參數(shù)說(shuō)明如果你本來(lái)想比較必須寫(xiě)成if (x 20)。我一般建議在代碼里用“常量放左邊”的寫(xiě)法if (20 x)這樣萬(wàn)一少寫(xiě)一個(gè)等號(hào)變成20 x編譯器直接報(bào)錯(cuò)不會(huì)留到運(yùn)行期才暴露問(wèn)題。3.2 整數(shù)除法 1/n絕對(duì)值大于 1 時(shí)恒為 0前提是 int1-15 說(shuō)“若變量定義為 int n當(dāng) n 的絕對(duì)值大于 1 時(shí)表達(dá)式 1/n 的值恒為 0”這個(gè)說(shuō)法本身是對(duì)的。C 語(yǔ)言里兩個(gè)整數(shù)相除結(jié)果還是整數(shù)小數(shù)部分直接截?cái)?/2得 01/(-2)也等于 0向零取整。真正坑人的是 1-23 和 1-24 這類(lèi)把整型除法和浮點(diǎn)初始化混在一起的題// 1-24int i; double sum; sum 0; int i; double sum; sum 0; for (i 2; i 4; i i 2) { sum sum 1/i; }題目說(shuō) sum 的值是 0.75實(shí)際是 0。原因在1/ii 是 int1/i按整數(shù)除法計(jì)算i2 時(shí)結(jié)果是 0i4 時(shí)結(jié)果也是 0累加了兩次 0。想得到 0.75 必須寫(xiě)1.0/i把其中一個(gè)操作數(shù)變成 double才會(huì)觸發(fā)浮點(diǎn)除法。判斷這類(lèi)題時(shí)先問(wèn)自己一句除法兩邊是不是都是整型只要都是整型結(jié)果就不可能帶小數(shù)。3.3 scanf 格式串是精確匹配不是描述scanf(x%lf, x)這道題值得單獨(dú)拉出來(lái)講因?yàn)樗疾斓氖?scanf 的一個(gè)冷門(mén)行為格式串里的普通字符必須與輸入字符逐個(gè)精確匹配。double x; scanf(x%lf, x); printf(%.2f, x);如果運(yùn)行時(shí)光標(biāo)閃動(dòng)你直接輸入30回車(chē)scanf 發(fā)現(xiàn)第一個(gè)字符不是x立即停止匹配返回值是 0x 沒(méi)有被賦值。只有輸入x30這種帶前綴的形式x匹配成功%lf才能讀到 30。很多人寫(xiě)代碼時(shí)喜歡在格式串里加提示前綴比如scanf(請(qǐng)輸入%lf, x)這在實(shí)際程序里會(huì)造成輸入負(fù)擔(dān)PTA 理論題考的就是這個(gè)行為差異格式串里寫(xiě)了什么用戶就必須輸入什么。3.4 switch 無(wú) break穿透的執(zhí)行順序選擇題 2-9 是 switch 穿透的經(jīng)典題#include stdio.h int main(void) { int x 1, a 0, b 0; switch(x) { case 0: b; case 1: a; case 2: a; b; } printf(a%d,b%d\n, a, b); return 0; }邏輯說(shuō)明x 的值是 1程序從case 1進(jìn)入執(zhí)行a使 a 變成 1因?yàn)闆](méi)有 break繼續(xù)向下穿透到case 2執(zhí)行a; b;a 變 2b 變 1。最終輸出a2,b1對(duì)應(yīng)選項(xiàng) A。參數(shù)說(shuō)明每個(gè) case 后面如果沒(méi)有 break執(zhí)行流會(huì)一直往下走直到遇到 break 或者 switch 結(jié)束。判斷題 1-32 說(shuō)“case 語(yǔ)句后如沒(méi)有 break順序向下執(zhí)行”就是對(duì)的。實(shí)際開(kāi)發(fā)里忘記 break 產(chǎn)生的 bug在理論題里反而是需要你選 T 的正向考點(diǎn)。4. 把判斷題改造成選擇題三遍刷題法這一章講方法。文檔里的判斷題只有 T/F 兩個(gè)選項(xiàng)但你可以自己做二次加工把它們變成帶解析的選擇題這個(gè)過(guò)程本身就是高效的復(fù)習(xí)。4.1 找反例判斷題的 T 必須“無(wú)條件成立”判斷一個(gè)命題對(duì)不對(duì)最有效的方法是嘗試找反例反例找不到就先存疑。比如 1-13 說(shuō)若變量定義為 int fahr則 5(fahr-32)/9 是符合 C 語(yǔ)言語(yǔ)法的表達(dá)式這里的反例是語(yǔ)法層面的5(fahr-32)缺少乘號(hào)數(shù)字和括號(hào)之間必須有運(yùn)算符所以這個(gè)表達(dá)式連編譯都過(guò)不了直接選 F。再比如 1-14 的double x; x % 2反例就是 C 語(yǔ)言規(guī)范里 % 只接受整型。找反例的過(guò)程比題目本身有價(jià)值因?yàn)榭荚嚂r(shí)你記不住所有規(guī)范但能記住幾個(gè)典型反例。表格式地整理你的反例庫(kù)會(huì)更清晰題號(hào)命題內(nèi)容反例/理由結(jié)論1-3include 后帶分號(hào)預(yù)處理指令不是語(yǔ)句無(wú)分號(hào)F1-135(fahr-32)/9缺乘法運(yùn)算符F1-14double 用 %取余只用于整型F1-21sum 未初始化為 55未定義行為F4.2 三遍刷題法原卷、錯(cuò)題、復(fù)述我拿到這類(lèi)題集的標(biāo)準(zhǔn)做法是分三輪過(guò)不要第一遍直接對(duì)著答案看。第一輪先自測(cè)打開(kāi)文檔拿一張紙遮住右側(cè)答案列如果答案在題后就遮住那一行逐題給出 T/F 判斷做完再揭開(kāi)對(duì)照。這一輪的作用是暴露問(wèn)題不要在意正確率。第二輪只做錯(cuò)題把做錯(cuò)的題號(hào)單獨(dú)整理到一個(gè)新文檔里每題寫(xiě)下三句話——正確結(jié)論是什么、為什么這么判斷、我當(dāng)時(shí)錯(cuò)選了什么。這個(gè)復(fù)述過(guò)程比二刷錯(cuò)題本身有效因?yàn)槟阍趶?qiáng)迫自己把模糊記憶變成語(yǔ)言輸出。第三輪考前快速過(guò)只看錯(cuò)題整理不看原題。準(zhǔn)備一個(gè) python 腳本把 docx 里的題號(hào)提取出來(lái)按題號(hào)排序生成一個(gè)空表方便做標(biāo)記import re with open(PTA理論考部分.docx, r, encodingutf-8) as f: content f.read() # 提取 1-3 2-1 這類(lèi)題號(hào) issue_ids re.findall(r\b(\d-\d)\b, content) unique_ids sorted(set(issue_ids), keylambda x: int(x.split(-)[0])) for idx in unique_ids: print(f| {idx} | 對(duì)/錯(cuò) | 錯(cuò)因 |)邏輯說(shuō)明正則\d-\d匹配的是文檔里的題號(hào)模式比如 1-3、2-1。set去重后按專(zhuān)題序號(hào)排序輸出成一個(gè) Markdown 表格骨架你只需要在第二列填判斷結(jié)果、第三列填錯(cuò)因。參數(shù)說(shuō)明如果你的 docx 是二進(jìn)制格式普通open讀不了可以先另存為.txt再用上面的腳本也可以用更省事的辦法直接在 Word 里把全選內(nèi)容粘貼到文本編輯器再跑。4.3 統(tǒng)計(jì)錯(cuò)題主題按頻次決定復(fù)習(xí)順序三遍刷完之后把錯(cuò)題按第 2 章的考點(diǎn)分類(lèi)統(tǒng)計(jì)大概率會(huì)發(fā)現(xiàn)錯(cuò)題集中在某一兩個(gè)類(lèi)別。我見(jiàn)過(guò)最多的兩類(lèi)一類(lèi)是格式化輸入輸出的格式串匹配另一類(lèi)是整數(shù)除法與浮點(diǎn)除法的混用。這兩個(gè)主題在 PTA 判斷題里出現(xiàn)的密度很高而且容易互相糾纏。按頻次排序復(fù)習(xí)優(yōu)先解決錯(cuò)得最多的主題比從頭到尾平均用力效率高得多。5. 避坑與排查這份題集里最容易誤判的四個(gè)細(xì)節(jié)使用這份 docx 的過(guò)程中有幾個(gè)實(shí)際問(wèn)題不是題目本身造成的而是文檔形式和做題習(xí)慣帶來(lái)的。列出來(lái)給你提個(gè)醒。5.1 現(xiàn)象答案就印在題后自測(cè)時(shí)被眼睛提前劇透第二行就是 “T F”你讀題的時(shí)候余光已經(jīng)掃到了答案大腦會(huì)無(wú)意識(shí)地傾向那個(gè)選項(xiàng)自測(cè)結(jié)果失真。原因文檔為了讓讀者方便對(duì)照把 T/F 選項(xiàng)直接放在題干后面這是它的優(yōu)點(diǎn)也是自測(cè)時(shí)的干擾源。解決第一遍自測(cè)時(shí)把每一題的 T/F 區(qū)域用不透明紙條遮住只露出題干文字全部做完再統(tǒng)一揭開(kāi)核對(duì)?;蛘吡泶嬉粋€(gè)副本用 Word 的查找替換把T和F批量替換成空格生成一份純題干燥版。5.2 現(xiàn)象題干里帶“假設(shè)”二字的題順著假設(shè)想就錯(cuò)了1-18 假設(shè)賦值運(yùn)算符優(yōu)先級(jí)比算術(shù)運(yùn)算符高1-11 假設(shè)輸入1001 3 0.025輸出符不符合預(yù)期部分人看到熟悉的情境就放松警惕直接按直覺(jué)選。原因出題人用“假設(shè)”構(gòu)造了一個(gè)與 C 標(biāo)準(zhǔn)相悖的前提目的是考察你是否真正理解標(biāo)準(zhǔn)本身而不是考察你能不能按題干的設(shè)定推演。解決看到“假設(shè)”先停一下把題干假設(shè)放一邊按 C 語(yǔ)言的真實(shí)規(guī)則重新分析。如果真實(shí)規(guī)則下題干的設(shè)定不成立那么它想讓你選的那個(gè)“正確”結(jié)果其實(shí)就是錯(cuò)誤答案。5.3 現(xiàn)象手算輸出與題目答案對(duì)不上懷疑自己算錯(cuò)比如 1-24 手算1/2 1/4感覺(jué)是 0.75題目選 F怎么也想不通。原因忽略了整數(shù)除法。1/2在 C 語(yǔ)言里不是 0.5 而是 0兩個(gè) int 相除結(jié)果直接截?cái)唷_@題有雙重陷阱sum 是 double 沒(méi)用因?yàn)楸怀奖旧硎钦瓦\(yùn)算。解決手算 C 表達(dá)式時(shí)先畫(huà)類(lèi)型標(biāo)注。把每個(gè)運(yùn)算數(shù)的類(lèi)型標(biāo)在表達(dá)式下面除法兩邊都是整型就標(biāo)“整除”有浮點(diǎn)就標(biāo)“浮除”。這題一標(biāo)注就能看出來(lái)1/i是整除。5.4 現(xiàn)象選擇題 2-2 的四個(gè)選項(xiàng)長(zhǎng)得幾乎一樣選不出來(lái)選項(xiàng) B 和 D 只差一個(gè)初始化位置或者只有類(lèi)型不同逐行對(duì)比眼花。原因PTA 選擇題的干擾項(xiàng)通常只改一個(gè)點(diǎn)改初始化值、改變量類(lèi)型、改格式串前綴考的是細(xì)粒度記憶。解決四選項(xiàng)對(duì)比時(shí)逐個(gè)檢查三個(gè)維度。第一維是變量類(lèi)型int 還是 double第二維是初始化是 0 還是 1第三維是運(yùn)算寫(xiě)法1.0/i還是1/i。三個(gè)維度都對(duì)了才是正確答案。6. 把 docx 變成個(gè)人速查表題號(hào)索引、錯(cuò)題復(fù)述與最后一晚復(fù)習(xí)文檔的價(jià)值不只在第一遍刷題把它加工成適合自己復(fù)習(xí)的形態(tài)才是這份資源真正發(fā)揮作用的時(shí)刻。我習(xí)慣把這份 docx 拆成三份使用。原始文檔保留用于逐題精讀第二個(gè)副本提取題號(hào)生成速查表每行只留題號(hào)、考點(diǎn)、結(jié)論三列作為考前一天快速掃讀的清單第三個(gè)副本專(zhuān)門(mén)整理錯(cuò)題格式是“題號(hào) 正確結(jié)論 我當(dāng)時(shí)的錯(cuò)誤判斷 一句話解釋”用于考前一晚重點(diǎn)看。第三份不用長(zhǎng)三五十行足夠因?yàn)?PPT 上反復(fù)錯(cuò)的點(diǎn)就那么幾個(gè)比如 scanf 格式串匹配、整數(shù)除法截?cái)?、switch 穿透。制作速查表時(shí)我把每道題的判斷依據(jù)壓縮成一個(gè)短語(yǔ)比如 1-3 寫(xiě)“include 后不加分號(hào)”1-14 寫(xiě)“% 只能用于整型”1-21 寫(xiě)“sum 未初始化”。這些短語(yǔ)不是題目答案而是我自己對(duì)這個(gè)考點(diǎn)的記憶鉤子看到短語(yǔ)能想起完整推理過(guò)程才算真記住。最后一晚的復(fù)習(xí)順序也有講究。我一般先看速查表快速過(guò)一遍全部考點(diǎn)然后只看錯(cuò)題復(fù)述最后找一張白紙把每個(gè)考點(diǎn)的關(guān)鍵規(guī)則默寫(xiě)一遍。默寫(xiě)不需要完整句子寫(xiě)關(guān)鍵詞比如“printf 查類(lèi)型”“for 結(jié)束值看第一個(gè)不滿足條件的位置”。這個(gè)動(dòng)作能把短期記憶錨定到長(zhǎng)期區(qū)域考試時(shí)遇到同類(lèi)判斷題會(huì)迅速反應(yīng)出來(lái)。這套流程看起來(lái)簡(jiǎn)單但每一輪都在做同一件事把被動(dòng)的看題變成主動(dòng)的復(fù)述。從那以后我每次考前都強(qiáng)制走一遍三遍刷題法第一遍暴露問(wèn)題第二遍解決錯(cuò)題第三遍只看自己寫(xiě)過(guò)的關(guān)鍵詞而不是盯著原文反復(fù)背。別低估這一遍一遍過(guò)篩子的過(guò)程它比多刷十道新題更管用。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取