☰
PTA理论考C语言语法与易错点:判断题选择题通关指南
2026/10/31 12:57:02 网站建设 项目流程

简介:这份资源是面向C语言初学者的PTA理论考判断题与选择题练习集,以docx文档形式整理,聚焦C语言基础语法与程序执行规则的考点辨析,适合正在准备PTA平台理论测评、课堂测验或期末复习的学生用于自查与查漏补缺。压缩包内仅1个docx文件,大小约345KB,内容按HW02、HW03等模块编号组织,逐题标注分值,并附参考答案与知识点详解,覆盖编译预处理命令、main函数入口、语句分号结束、变量声明顺序、单目运算符操作数、整数除法与浮点运算差异、赋值与比较运算符混淆、scanf与printf格式匹配、for循环三表达式执行时机、复合语句与空语句、累加与阶乘计算等细节。已有1897人学习下载,读者可借助题干与逐条解析对照复习,快速定位易错判断点,理解题目背后的语法依据,从而在理论考试中减少凭感觉作答的情况,提升答题准确率与复习效率。

1. PTA 理论考最狠的一刀:先判「语法合法」,再谈功能对不对

PTA 理论考这份判断题+选择题,看着像送分,真正拉开差距的是两类题:一类问「这句话对不对」,一类问「这段程序对不对」。很多人盯代码逻辑看了半天,忽略了语法本身就已经不合法——变量先用了才声明、double上去做取余、scanf的格式符和变量类型对不齐。这些点在卷面上一分一题,堆起来却能把及格线压住。这份理论考题库的价值就在这:它把 C 语言最容易被出题人拿来设陷的语法规则,逐条做成了「T/F」和「四选一」,你练的不是编程能力,而是判卷人视角。适合刚学完 C 语言、代码能跑通但理论题总在 70 分上下打转的人,也适合复习时间只剩几晚、需要按考点密度优先过的备考者。

2. 语法骨架与表达式:预处理、main、分号、整除这五类题最密集

判断题的密度分布很不均匀。把整份卷子按知识点摊开看,程序结构(预处理命令、main函数、执行起点、语句结尾)和表达式运算(整除、取余、单目运算符、赋值优先级)这两块几乎占了判断题的一半。这两块的特点是不需要你读懂逻辑,只需要你记得住规则,所以也是最该先背下来的部分。

2.1 五条硬规矩:预处理、入口、分号、声明顺序、复合语句

先把最容易翻车的五条摆出来。

第一条,预处理命令。#include <stdio.h>属于编译预处理命令,在编译之前由预处理器处理,把标准输入输出库的内容并进来,程序才能用printf、scanf这些函数。判断题里常见的写法是#include <stdio.h>;后面多挂一个分号,按题意问「是不是编译预处理命令」,主体成立判 T;但从编译器的角度,预处理命令不以分号结尾,这个分号在正式写代码时是要出问题的,多出来的分号会被当成一条空语句。做题时抓「命令类别」,写代码时抓「不加分号」。

第二条,入口唯一。一个程序必须有一个main(),而且只能有一个,它是程序执行的起点。这条经常和第三条一起考。

第三条,执行起点。C 程序不是从源文件的第一条语句开始执行的,是从main()的第一条可执行语句开始。源文件开头可能有#include、有全局变量定义、有其他函数定义,这些都不是执行起点。这条判断题的标准错法就是把它说成「从源文件第一条语句开始」,判 F。

第四条,语句结尾。不是所有语句都以分号结尾。表达式语句、return、break、continue、函数调用语句要分号;预处理命令不要,函数定义的头部不要,if、for、while后面那个括号行不要,用一对{}括起来的复合语句整体后面也不要。所以「C 语言中所有语句都必须以分号结束」这句话判 F。与之配套的另一个考点是:复合语句在语法上被视为一条语句,这就是为什么if (表达式) 语句1 else 语句2里的语句1、语句2「只能是一条语句」这句话能判 T——你写十行放进大括号,它仍然算「一条」。循环体有多条语句时必须加大括号组成复合语句,也是同一个道理。只由一个分号构成的叫空语句,什么也不做,判断题里通常判 T。

第五条,先声明后使用。k = 1;然后int k;这种写法判 F,因为变量在声明之前就被使用了。这条题看着简单,但它是后面一堆错误的根源:C 语言里标识符必须先有类型、先分配存储单元,才能参与运算。变量代表内存中的一个存储单元,这句话判 T,讲的就是声明与存储的对应关系。

再看单目运算符。++、--、!、取地址&、负号-这类只需要一个操作数,「单目运算符需要 2 个操作数」判 F。和它配对考的是自增:fahr++与fahr + 1不等价,前者会把fahr本身改掉,后者只是算出一个值。判断题里常写「等价」,判 F。

2.2 整除、取余、优先级:三道用代码才能讲清的判断题

表达式类判断题最容易凭感觉答,实际每一道都能用一行代码验出来。

先看5(fahr-32)/9。这个式子判 F,原因是数字与括号之间缺少乘号,C 语言里不存在「隐式乘法」这种写法。正确写法是5 * (fahr - 32) / 9。这类题的坑在于它长得像数学公式,一眼扫过去很顺,判卷人赌的就是你不逐字符看。

再看取余。double x; x % 2判 F。%要求两个操作数都是整型,浮点型不能参与取余。与之相对的int n;在|n| > 1时,1/n恒为 0,这句判 T——两个整数相除,结果还是整数,小数部分直接舍掉。这里有个血泪经验:很多人在判断题里能答对「1/2 等于 0」,一到代码题里算级数求和就写成1/i,全篇结果归零。

赋值与优先级这一组更绕。x + y = 22判 F,因为赋值号左边必须是变量,不能是表达式,x + y不是一个可以存东西的位置。而「假设赋值运算符的优先级比算术运算符高,执行n = 10 + 2;后 n 的值为 10」这句判 T——这是纯假设题,考的是你会不会顺着假设推:赋值先算,就变成(n = 10) + 2,n 拿到 10。真实优先级是算术高于赋值,所以实际运行 n 得 12。这类「假设优先级变了」的题,一定按它给的假设推,不要按真实规则答。

下面这段代码把整除、类型提升和累加器类型三件事放在一起,跑一遍比背十条规则都管用:

#include <stdio.h> int main(void) { int i; int sum_int = 0; /* 整型累加器:小数部分会被截掉 */ double sum_dbl = 0.0; /* 浮点累加器:能留住 0.5 这种结果 */ for (i = 1; i <= 2; i++) { sum_int = sum_int + 1.0 / i; /* 1.0/i 是浮点运算,赋回 int 时截断 */ sum_dbl = sum_dbl + 1.0 / i; /* 同样的值进 double,保留小数 */ } printf("%d %.2f\n", sum_int, sum_dbl); /* 输出 1 1.50 */ return 0; }

这段输出是1 1.50。第一轮1.0/1得 1.0,两个累加器都是 1;第二轮1.0/2得 0.5,sum_int变成 1.5 后被截断回 1,sum_dbl变成 1.5。参数上唯一要盯的是分子:写1.0/i才是浮点除法,写1/i先做整数除法直接得 0,后面加多少次都是 0。把这段里的1.0改成1再跑一次,就是判断题里那道「double sum;累加1/i,结果是 0.75」为什么判 F 的答案——它实际得 0。

同一个道理还能解释另外两道高频判断题。int i, sum;然后sum = sum + 1.0/i求前两项,判 F,因为sum是int,0 加 1.0 得 1,再加 0.5 得 1.5 截断成 1,得不到 1.5。以及那个求 1 到 10 累加、声称sum是 55 的题,判 F——sum没有初始化,初值是个不确定的值,累加结果不可预期。累加器初值写 0、累乘器初值写 1,这两句话在所有循环题里都成立,凡是看到product = 0;然后连乘的,直接判 F。

3. 分支结构:if-else 配对、赋值当比较、测试用例数量的固定数法

分支这块的题量比语法少,但单题分值高,选择题基本都出在这里。它考三件事:else跟谁配对、判断条件里那个符号到底是赋值还是比较、以及给一段分支代码问「至少要设计几组测试用例」。前两件靠规则,第三件靠一个固定的数法。

3.1 悬空 else 与赋值当比较:两道选择题的完整推演

else的配对规则只有一句:与之前最近的、且尚未配对的if配对。这条规则在嵌套if里就是命门,卷面上常见的四个选项分别是「与缩进对齐的 if 配对」「与最近的 if 配对」「与最近的且不带 else 的 if 配对」「与第一个 if 配对」,正确项是第三个。缩进是给人看的,编译器不认。

拿一道具体题走一遍:

int main(void) { int a = 2, b = -1, c = 2; if (a < b) if (b < 0) c = 0; else c++; printf("%d\n", c); return 0; }

外层a < b是2 < -1,为假;内层那个if (b < 0)虽然有else c++,但它整个是外层if的语句体,外层条件不成立,整块都不执行。所以c保持 2,输出 2。凡是看到这种「外层 if 没有大括号、内层 if 带 else」的结构,先把 else 归属标出来,再判断外层条件真假——外层一旦为假,内层连同它的 else 一律不执行。这道题的干扰项里通常有 0、1、3,分别对应「以为 else 配给外层」「以为内层执行了」「以为 c 自增两次」。

接着是把赋值当比较。if (x = 20) { y = 1; } else { y = 0; }这种代码,条件里是赋值号不是等号,x被改成 20,表达式值 20 非零为真,走y = 1分支。所以「执行后 x 的值不变」判 F。同类型的还有else if (x = 0):x被赋成 0,值变成 0,于是走 else 分支,x从 4 变成 0。做题的判断动作很简单:条件里出现单个=,先判「值被改了」。

还有一类是多写了一个分号。if (x >= 0);后面跟分号,if的语句体变成空语句,后面的if...else就成了独立的一条语句,逻辑全乱:x等于 0 时本应走y = 0,实际会走到内层的else y = -1。选择题问「以下程序段中错误的是」,答案就落在这个多分号的版本上。这类题不看你懂不懂逻辑,看你眼睛够不够细。

关于测试用例数量,规则可以背下来:分支覆盖看分支个数,边界值要单独算一组。省略else的if (grade < 60)只有两个分支(小于 60 输出 Fail、不小于 60 什么都不输出),题干说「至少需要设计 3 组(小于、大于、等于 60)」判 F,两组就够,一组 59、一组 60。而嵌套的if...else if...else三个分支,至少 3 组,判 T。如果条件是分段函数那种x < 0、0 <= x <= 15、x > 15,边界 0 和 15 各自要把两侧都测到,组数就按区间端点数数:小于 0 的数、0、0 到 15 之间的数、15、大于 15 的数,正好 5 组,题干说 5 组判 T。这类题的唯一陷阱是把「区间数」当成「分支数」——分支只有三个,但边界值决定了测试点更多。

再看一道复合的:一个 else-if 处理+、-、*、/,其中/里还嵌了一个「除数为 0」的判断,最后还有一个「未知运算符」的兜底。数组数时不能只数四个运算符,要把/拆成「除数非 0」和「除数为 0」两种,再加上未知运算符:+、-、*、/正常、/除零、其他,一共 6 组。四个选项给 7、6、5、4,选 6。数法固定:每个叶子分支算一组,参数边界额外加组。

3.2 switch:case 的四个禁忌与「等价改写」的判法

switch的选择题套路很固定,四类禁忌必须一口清。

第一,case后面必须是常量表达式,不能写case choice == 1:。因为choice == 1是个关系表达式,它的值是 0 或 1,不是一个编译期常量标签;而且这样写的本意(拿变量跟 1 比)本身就跟 switch 的语义冲突。这道题判 F,对应选择题里就是「以下合法的 switch 语句」的排除项。

第二,case的常量值不能重复。「每一个 case 常量表达式的值可以相同」判 F。

第三,default不是必需的。「在 switch 语句中必须使用 default」判 F。而且default的位置可以放在最前、中间、最后,只要所有case都带break,放哪儿都等价——这是「以下哪个 switch 与其他不等价」这类题的解法核心。

第四,break可用可不用,但不用就会贯穿。带break时,表达式匹配到哪个case就执行那一段然后跳出;不匹配任何case就执行default段再跳出。不带break时,匹配到哪个case,就从那儿开始把后面所有语句段依次执行完,即使中途遇到别的case标签也照穿不误。这两段流程描述在判断题里都是对的,判 T;「case 后如没有 break,顺序向下执行」也判 T。

贯穿的效果用一小段代码看最清楚:

switch (x) { /* 假设 x 的值为 1 */ case 0: b++; /* 不匹配,跳过 */ case 1: a++; /* 从这里进入,a 变成 1 */ case 2: a++; b++;/* 没有 break,继续向下,a 变成 2,b 变成 1 */ }

x = 1时从case 1进入,一路贯穿到case 2,最后a = 2、b = 1。这就是选择题里那个「输出 a=2,b=1」的标准推法。判断动作固定:先找入口 case,再数它后面有几个语句段,全部执行。干扰项通常是a=1,b=1(以为执行完case 1就停)和a=2,b=2(以为从头开始执行)。

「等价改写」题的解法是把三种写法摆在一起比较:标准写法(case全套break加default)、把default提到最前面但每个分支仍带break、以及「switch 之前先给变量赋默认值、switch 里只写四个 case 且每个带 break」。这三种在语义上完全等价,因为不匹配时变量拿到的都是那个默认值。唯一不等价的是既没有default、也没有在 switch 之前预置默认值的那种写法——不匹配时变量保持原值,跟前面几种行为不同。四个选项里找那个「缺 default 且没有预置」的,就是答案。

最后一条容易忽略的:switch后面括号里的表达式类型要和case常量对得上。写switch(ch)处理字符,case 'a':是合法的,因为字符常量在 C 里是整型;但如果你写case "a":就是字符串,编译不过。判断题一般不挖这么深,选择题偶尔出现在「以下合法的 switch 语句」的选项里。

4. 循环与字符:for 三表达式、复合语句、ASCII 与格式符错位

循环和字符输入输出这两块,是理论卷里「代码看起来对、结果就是不对」的重灾区。循环考的是三个表达式的执行时机和循环变量的终值,字符考的是常量写法和 ASCII 的顺序关系,输入输出考的是格式符和变量类型是否配对。

4.1 for 的三次执行与循环变量终值:四道填空一道不漏

for (表达式1; 表达式2; 表达式3) 循环体的执行顺序是固定的:表达式1只在进入循环时执行一次;每轮先算表达式2,为真就执行循环体,为假就结束循环;循环体执行完再算表达式3,然后回到表达式2。「表达式1只执行一次」判 T,「表达式2为假则结束循环」判 T。这两条几乎是原题照搬,属于必须拿住的分。

真正要小心的是「执行了多少次」这类填空。看这段:

int fahr; double celsius; for (fahr = 91; fahr <= 100; fahr++) celsius = 5.0 * (fahr - 32) / 9.0; /* 语句① */ printf("%4d%6.1f\n", fahr, celsius); /* 语句② */

四个空分别是:语句①执行 10 次(91 到 100,含两端);语句②执行 1 次(它在循环体之外,循环结束后才执行一次);循环体共执行 10 次;循环结束时fahr的值是 101。最后这个空最容易错,很多人写 100。判断口诀是:循环变量的终值是让它第一次不满足条件的那个值,fahr++在 100 那轮执行完变成 101,再回到条件判断101 <= 100为假,循环结束,fahr就停在 101。注意语句②在内层缩进上看着像循环体,实际没有大括号,它不属于循环。

循环体的括号规则也是考点。「循环体如包括一个以上的语句,则必须用一对大括号括起来,组成复合语句」,判 T。少了括号,只有紧跟着的第一条语句属于循环,其余都在循环外,这类错误在选择题里常以「程序段功能是什么」的形式出现。

再看级数求和与阶乘这两道经典选择题。求1 + 1/2 + 1/3 + ...前 N 项和,四个选项的差别只在三处:sum有没有初始化为 0、sum的类型是int还是double、分子写1.0还是1。正确项必须同时满足:double sum = 0、1.0/i、for的三个表达式用分号分隔。凡是int sum的排除(结果被截断),凡是1/i的排除(整数除法,除了第一项全是 0),凡是for (i = 1, i <= n, i++)用逗号分隔的也排除(那不是 for 的语法)。求 n 的阶乘那道同理:product必须是double(结果可能很大)、初值必须是 1、循环体里乘的是i。四个选项里唯一同时满足的是「double product; product = 1; product = product * i;」那一个。

阶乘题还有一个隐藏考点,判断题里出现过:product = 0;然后连乘 20 次,判 F。因为 0 乘任何数都是 0,最后结果恒为 0,不是 20 的阶乘。与之配对的另一道是「这段程序的功能是计算 20 的阶乘」,即便初值改对了,也要留意double的精度上限——不过判断题里出题人一般只考初值这一个点,不会真的让你算溢出。答题时优先抓最明显的错,别在精度上纠缠。

4.2 字符常量与 ASCII:三条顺序规律加两个易混差值

字符这块的判断题密集得离谱,但规律只有三条:数字字符'0'到'9'按升序连续排列;大写字母'A'到'Z'按升序连续;小写字母'a'到'z'按升序连续。把「升序」写成「降序」的,判 F,这是最常见的一种改法。

跨类别的顺序要单独记:大写和小写不是连在一起升序排列的,'Z'和大写区结束之后还有几个符号,'a'才开始。所以「大小写字母一起按升序连续排列」判 F,「大写'M'的 ASCII 码值比小写'm'大」判 F,「小写'a'的 ASCII 码值是大写'Z'的 ASCII 码值加 1」判 F——它们差 7,不是 1。

需要死记的只有几个锚点:'0'是 48、'1'是 49、'A'是 65、'a'是 97。由此可以推所有题:'1'的值是 49 而不是数字 1,所以「数字字符'1'的值就是数字 1」判 F;'D' - 'A'得 3,'d' - 'a'也得 3,两者相等,所以'D' - 'A' == 'd' - 'a'判 T。这道题考的是「同类字符之间的差值相同」,比记单个码值更省事。

字符常量本身的定义也要记清:用一对单引号括起来的单个字符。凡是写成双引号的都是字符串,不是字符常量。选择题问「以下是合法的字符常量」,'A'、'z'、'0'、'$'这四个全都合法,单引号里放一个字符就行,不看它是不是字母。

输入输出这块的判断题,错法高度集中。putchar('S')输出的是S本身,不带引号,题干说「显示 'S'」判 F。getchar()一次只读一个字符,输入三个Q也只取第一个,所以ch = getchar(); putchar(ch);输出 Q 判 T;scanf("%c%c%c", ...)读三个字符,printf("%c", ch2)输出第二个,输入三个k输出k,判 T。这两道看着像送分,但选项里常把「读三个输出三个」混进去。

「不能用 printf 输出字符」「不能用 scanf 输入字符」这两句都判 F,%c就是干这个的。但%c有一个坑不出现在判断题里、出现在代码题里:它不跳过空白字符,前面如果留了回车或空格,%c会把那个空白读进去。判断题不考这个,写代码时要注意。

真正的高频错点是格式符与变量类型错位,这一组在判断题里能连着出四道。double x; scanf("%d", &x);判 F——%d对应int,double要用%lf(或%f,但读入时更稳妥的是%lf),类型对不上,读进来的是垃圾值。double x; scanf("%f", &x);同样判 F,%f在scanf里对应float。scanf("x=%lf", &x);这行格式串里带了x=,输入时必须原样敲x=30才能正确赋值,题干说「输入 30,输出 30.00」判 F——普通格式串里出现的非格式字符,输入时要一一对应地敲进去。

最后一道复合型:int money, year; double rate;,读入用scanf("%d %lf %d ", &money, &year, &rate),输出用printf("%d#%d#%.3f", money, year, rate)。判 F。错在两处:year是int却用%lf读,rate是double却用%d读,两个变量的读入类型完全错位;另外格式串末尾多一个空格,会让scanf等着继续吃输入,交互式运行时表现为「程序卡住不往下走」。答题时按变量声明逐个对格式符,对不上就是错,不用看别的。

5. 易错点:五类最常翻车的题,逐条给判法和答法

5.1 错点一:把「从第一条语句开始执行」判成 T

错在哪:一看「C 语言程序是从源文件的第一条语句开始执行的」觉得没毛病,直接打 T。

为什么错:源文件开头的#include、全局变量定义、写在main前面的其他函数,都不是执行起点。程序真正的入口是main(),从它的第一条可执行语句开始跑,其他函数只有被调用才执行。

怎么答对:看到「执行起点」「入口」这类词,先找main三个字。题目里只要没提main而说「第一条语句」「第一个函数」,一律判 F。顺带把「任何程序必须有且只有一个 main」和它绑在一起记,这两条是同一条知识点的正反两面。

5.2 错点二:格式符与变量类型对不上还判 T

错在哪:double x; scanf("%d", &x);然后printf("%.2f", x);,看输出格式是%.2f就觉得整段没问题,判 T。

为什么错:错在读入那一半。%d是给int用的,把double变量的地址按int的规则写进去,四个字节写进八个字节的空间,剩下的部分是未定义的。输出的%.2f再正确也没用,源头就脏了。

怎么答对:按「声明 → 读入 → 输出」三段逐个对格式符。int对%d,double读入对%lf、输出对%f或%.2f,float读入对%f,char对%c。三段里任何一段对不上,整题判 F。这套流程走顺了,这类题基本不会错。

5.3 错点三:累加器不初始化、累乘器初值写成 0

错在哪:int i, sum; for (i = 1; i <= 10; i++) sum = sum + i;,题干说sum最后是 55,判 T。

为什么错:sum只有声明没有初值,它的初始内容是不确定的,累加十次的结果也不确定。编译器不会自动帮你清零,这条在选择题里会以「这段程序有什么问题」的形式再考一次。

怎么答对:看到累加先扫一眼初值,没有初值或初值不是 0 的,判 F;看到累乘先扫一眼初值,初值写成 0 的,判 F(0 乘任何数都是 0)。两条口诀记死:加法从 0 开始,乘法从 1 开始。这条在循环题里出现的频率比任何一条语法规则都高。

5.4 错点四:整数除法与浮点除法混着用

错在哪:double sum = 0; for (i = 1; i <= 2; i++) sum = sum + 1/i;,算出来sum是 1.5,判 T。

为什么错:1/i两个操作数都是整型,先做整数除法。i = 1得 1,i = 2得 0,加起来是 1,不是 1.5。sum是double只保证存得住小数,不改变右边先算整数除法这个事实。

怎么答对:看分子。分子写1.0才是浮点运算,写1就是整数除法。凡是级数求和、平均值、除法运算出现在循环体里的,先检查分子有没有写成小数形式。另一条并行的判断是左值类型:int sum;就算右边算出 1.5,赋回去也截断成 1,所以「int sum累加得到 1.5」同样判 F。分子和接收变量,两个都要查。

5.5 错点五:switch 的 default 和 break 想当然

错在哪:看到 switch 里没有default就认为语法错误,或者看到case后面没写break就认为程序跑不通。

为什么错:default是可选的,位置也可以放在最前面;break也是可选的,不写就是贯穿执行,语法上完全合法,只是逻辑上会多执行几段。判断题把它们说成「必须」,就是在赌你把「规范写法」记成了「语法要求」。

怎么答对:把这两条当成独立规则记——default可选、位置任意,break可选、不写则贯穿。遇到「以下哪个 switch 与其他不等价」,先看有没有default,再看有没有在 switch 之前预置默认值,两者都缺的那个就是答案。遇到「以下叙述正确的是」,把「必须」「只能」这类绝对词当排除信号,正确项往往带「不一定」「可以」。

6. 答题技巧:判断题的两次扫描与选择题的排除顺序

判断题别顺着读,按两次扫描走。第一遍扫「绝对词」:必须、所有、只能、一定、任何。C 语言的理论题里,绝对词十有八九是错的,比如「所有语句都必须以分号结束」「必须使用 default」「case 的值可以相同」。第二遍扫「执行主体」:起点是不是main、初值有没有给、格式符和变量对不对、除法两边是不是整型。两次扫完还没找到破绽,再判 T。这个方法不玄学,它把「凭感觉」换成了两个固定的检查点。

选择题按排除顺序做,比从头推快得多:

题型第一排除第二排除剩下的怎么验
程序段功能变量类型错(int 存小数)初值错(累加非 0、累乘为 0)分子是不是 1.0
输出结果有没有贯穿(缺 break)有没有悬空 else 误配手动走一遍分支
测试用例组数只数分支不数边界的把区间数当分支数的每个叶子分支加一组边界
合法语句语法硬错(case 后接表达式)缺分号或多分号编译一遍心里过

押题方向上,优先级排一下:程序结构与语句规则(预处理、main、分号、复合语句)几乎必出,占比最高;其次是整除与类型转换;再是if-else配对与switch贯穿;最后是 ASCII 顺序与格式符。时间不够就按这个顺序过,别从字符那一堆细碎的码值开始背。

我自己第一遍做这类卷子的时候,判断题错了七道,五道是「看着对就打了 T」,两道是把1.0/i看成1/i。后来每次做完都把错题按「语法规则 / 类型转换 / 分支配对 / 循环边界 / 输入输出」五类归档,同一类错第二次就把它写成一句话贴在错题本最前面。从那以后我每次拿到一套理论卷,先花三分钟把这份五类清单默写一遍再动笔,错的题就再也没超过两道。

这份 PTA 理论考题库的判断题和选择题都带知识点拆解,按上面五个类别对着刷一遍,比从头到尾顺着做效率高得多,有需要可以直接拿去练。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询