资讯动态

计算机二级C语言通关:选择题与操作题考点地图及时间分配

发布时间:2026/10/26 2:28:45 来源:尧图企业网站定制
简介这份资料包以 Go 语言从 0 到 1 的学习项目为主体兼顾计算机二级C语言资料的备考场景适合零基础初学者、在校学生和需要系统梳理语法与项目实践的开发者参考。压缩包共 471 个文件、约 90.44MB其中 308 个 go 源码承载示例与练习26 个 gohtml 模板配合 html、demo、out 等呈现页面渲染与运行结果28 个 md 文档和 54 个 png 图片用于说明与图解另有 sh、mod、proto、yaml 等配置辅助文件。内容覆盖变量、切片与结构体、模板嵌套、管道处理、日期格式化及性能分析等知识点读者可顺着目录做案例练习并结合源码与输出结果理解 Go 的语法细节和常见用法。已有 115 人学习适合按模块查阅、对照复现和查漏补缺。1. 分水岭不在编程题计算机二级C语言到底考什么计算机二级C语言这门考试最反直觉的一点是多数人翻车的地方不是最后那道 24 分的编程大题而是前面那些「扫一眼就觉得自己会」的选择题和程序填空。按历年卷面常见的分布选择题 40 分公共基础知识约 10 分、C 语言部分约 30 分操作题 60 分程序填空 18 分、程序修改 18 分、程序设计 24 分120 分钟交卷。算出这笔账就明白了选择题稳住 30 分上下、三道操作题各拿一半及格线已经摸到反过来选择题丢 20 分、编程题又只写了个空架子剩下时间全砸在最后一道题上也补不回来。这场考试考的不是你会不会写 C而是你能不能在有限时间里稳定拿到「本来就会」的那部分分。零基础想一次过的人要的是考点地图考过一次差几分的人要的是失分清单这两样东西下面都拆开讲。2. 选择题40分公共基础与C语言的分开打法选择题最容易犯的战略错误是把 40 道题当成一个整体去刷。实际上它由两套完全不同的能力构成前 10 道左右的公共基础知识题本质是背诵加概念辨析一行代码都不用写后 30 道 C 语言题考的是读代码、算结果靠的是对表达式和内存模型的熟悉度。两者的复习方式、答题节奏、容错空间都不一样混在一起刷只会让强项浪费时间、弱项一直没人管。这一章按这两块分开拆先把公共基础那 10 分变成「背了就有」再把 C 语言 30 分拆成几个能反复命中的判断类型最后用三道真题演示怎么把选择题当推理题做而不是靠背答案。2.1 公共基础知识那10分不写代码也要背的清单这部分是整张卷子里投入产出比最高的 10 分。它不考代码考的是概念和固定公式一共四块内容每块都有一两个必考的「死知识点」。很多人复习时直接跳过进了考场才发现这 10 分里有 6 分是纯记忆题丢得非常可惜。数据结构与算法是重灾区也是送分题。栈是先进后出、队列是先进先出这两个方向每年都有人记反。循环队列的元素个数公式是(rear - front m) % m其中 m 是数组容量这个公式几乎年年以选择题形式出现记住就能秒。二叉树有三条固定关系叶子结点数 度为 2 的结点数 1第 k 层最多有 2^(k-1) 个结点深度为 h 的二叉树最多有 2^h − 1 个结点。遍历方面要会前序、中序、后序的定义以及「已知中序加前序或后序能唯一确定一棵二叉树」这个判断。排序算法的复杂度与稳定性用一张表解决排序方法平均时间复杂度最坏时间复杂度是否稳定冒泡排序O(n²)O(n²)稳定插入排序O(n²)O(n²)稳定选择排序O(n²)O(n²)不稳定快速排序O(n log₂n)O(n²)不稳定归并排序O(n log₂n)O(n log₂n)稳定表里只需要记两件事快排最坏会退化成 O(n²)稳定的是冒泡、插入、归并。二分查找要求数据有序这个前置条件也是常考的选项。链表与顺序表的对比考「插入删除效率」和「随机访问」顺序表能随机访问、链表不能一句话就能判断。程序设计基础主要考结构化程序的三种基本结构顺序、选择、循环和面向对象的三个特征封装、继承、多态。软件工程考软件生命周期各阶段的划分、需求分析产出什么、结构化设计里「高内聚低耦合」这句判断内聚越高越好、耦合越低越好反过来写就是错项、以及白盒测试与黑盒测试的区别。数据库考 E-R 图转关系模型、三种关系运算投影是选列、选择是选行、笛卡尔积是组合还有 1NF、2NF、3NF 的递进关系每个字段不可再分是 1NF消掉非主属性对码的部分依赖是 2NF再消掉传递依赖是 3NF。提示这 10 分不要放在复习最后一周前期每天花十几分钟过一遍公式和判断句比考前三小时硬背有效得多。2.2 C语言30分从表达式到指针的高频判断C 语言这 30 道题不是考你写代码的能力是考你「读代码算结果」的准确度。把近几年的题目归归类高频判断集中在下面六个方向每个方向都有一两个固定套路。第一类是数据类型与运算。整型相除会截断5 / 2得 2 而不是 2.5%两侧必须都是整数浮点数不能用直接比较。第二类是运算符与优先级这是最容易翻车的地方和--的前后缀差别、和||的短路特性左边能定结果右边就不执行了、逗号表达式的值是最后一个子表达式的值、赋值表达式的值是赋进去的那个值。第三类是位运算左移一位相当于乘 2右移一位相当于除 2和|在二进制上逐位计算。第四类是数组与字符串。数组部分初始化时剩下的元素自动补 0二维数组可以省略行数但不能省略列数sizeof算的是占用字节数、含结尾的\0strlen算的是字符个数、不含\0这两个函数放一起考几乎是固定题。第五类是指针核心就一句话*p是 p 所指向的那个值p本身是地址p 1移动的字节数由 p 的类型决定。数组名在大多数表达式里会退化成指向首元素的指针但它不能被赋值。第六类是函数与存储类别static修饰的局部变量只初始化一次、函数调用结束不销毁全局变量和局部变量的作用域覆盖关系也是常客。至于结构体和文件在选择题里出现得比操作题少考法也很固定结构体成员的访问用.变量和-指针文件操作考fopen的返回值和打开模式的含义。把这些方向按出现频率排个序先攻运算符、数组、指针三块基本能吃下这 30 分里的二十几分。2.3 三道真题演练把选择题当推理题做选择题最快的做法不是背答案而是把每一行代码在纸上「执行」一遍。下面三道是典型题覆盖面刚好是三个高频方向。#include stdio.h int main(void) { int a[5] {1, 3, 5, 7, 9}; int *p a; /* p 指向 a[0] */ printf(%d,, *p); /* 先取 *p 输出再让 p 后移一位 */ printf(%d\n, *p); /* 先让 p 后移一位再输出 *p */ return 0; }这道题考的是与*的结合顺序正确答案是1,5。推理过程要落在纸上第一行*p里后缀优先级高于*但后缀的含义是「先用旧值再自增」所以先输出a[0]也就是 1执行完这一句 p 指向a[1]第二行*p是前缀自增先把 p 移到a[2]再解引用输出 5。这里的关键参数是数组下标和指针位置的对应关系只要每执行一句就在纸上标出 p 现在指向第几个元素这类题就不会错。面试官最想看到的是你有没有「逐步记录指针位置」的习惯而不是直接报答案。#include stdio.h #include string.h int main(void) { char s1[] abc; char s2[10] abc; printf(%d %d %d\n, (int)sizeof(s1), (int)sizeof(s2), (int)strlen(s1)); return 0; }正确答案是4 10 3。s1没有写长度编译器按初始化内容分配 3 个字符加 1 个结尾符共 4 字节s2显式写了 10就实实在在占 10 字节后面全是 0strlen数到\0就停所以是 3。这道题的失分点几乎全在「sizeof和strlen混用」上答题时先把两个函数的定义在心里过一遍再动笔。#include stdio.h void swap(int a, int b) { int t a; a b; b t; } int main(void) { int x 1, y 2; swap(x, y); printf(%d %d\n, x, y); return 0; }输出是1 2交换没有生效。原因是形参 a、b 只是实参的副本函数内部怎么改都不影响 main 里的 x、y这就是值传递。要真正交换形参必须写成int *调用时传x、y函数体里用*a、*b操作。这类题通常这么答先判断是值传递还是地址传递再看函数有没有通过指针写回原内存两步就能锁定答案。3. 操作题60分填空、改错、编程的固定打法操作题是整张卷子里唯一「有标准动作」的部分。三道题的代码都是围绕某个具体函数展开的题干第一行一定写着这个函数要干什么这就是全部线索。很多人上来就盯着空看结果在细节里绕不出来正确的顺序是先读懂函数功能再看 main 怎么调用、输入输出长什么样最后才回到空所在的那一行。这一章把三道题分开讲每道题给一套可以反复套用的动作顺序配一段可运行的示例代码。三道题加起来 60 分每道题哪怕只拿一半配合选择题也足够过线所以策略上不必追求满分追求的是「会做的部分一分不丢」。3.1 程序填空18分先读main再定位空填空题的代码结构是固定的一个待补充的函数若干处下划线main 负责调用和输出。答题动作分五步走。第一步读函数上方的注释通常一句话说清功能圈出关键词比如「求阶乘」「删除字符」「统计个数」。第二步看 main重点看输入用什么函数、输出的格式串长什么样输出格式往往能反推函数该返回什么类型。第三步看空所在语句前后的变量确定这里应该出现什么类型的东西是循环变量、累加器还是某个表达式的组成部分。第四步检查变量是否已经定义过填空题一般不允许新增变量声明只能填表达式。第五步手工走查一遍拿 n 3 这样的最小值代进去算看结果对不对。/* 函数功能求 s 1 1/2! 1/3! ... 1/n!返回结果 */ double fun(int n) { double s 0.0, t 1.0; int i; for (i 1; i n; i) { t t / ______; /* 空1 */ s s ______; /* 空2 */ } return s; }空 1 填i空 2 填t。推理链条是这样的t 在循环里扮演的是「当前这一项的分母阶乘」这个角色i 从 1 开始第一轮 t 1/1 1对应 1/1!第二轮 t 1/2对应 1/2!第三轮 t 1/6对应 1/3!正好对得上。s 是累加器每一项的值就是当前的 t所以空 2 直接填 t不需要再写1/t。这里的参数含义要特别注意t 的初值必须是 1.0 而不是 1如果写成整数 1t / i会做整数除法第二轮就变成 0整个结果直接崩掉。这一处就是填空题最典型的坑——类型不匹配不会报错但结果全错。再补一个动作填完之后把 n 1 代进去走一遍此时 s 应该等于 1如果算出来是 0 或者别的数说明空填错了位置。这个「最小用例回代」的习惯比反复读代码有效得多。3.2 程序修改18分编译不报错的错才是真错改错题比填空题更考验眼力因为错误通常是「能编译、跑出来不对」的逻辑错。题面一般会标出两到三处found注释每处下面一行有问题。答题时先把整段代码通读一遍理解功能然后对着每一处 found 逐行看三件事边界条件、类型匹配、函数调用的参数顺序。常见的错误分三类。第一类是边界错循环条件写成i n而数组只有 n 个元素或者循环起点从 1 开始却应该从 0 开始。第二类是类型与格式错整型用%f输出、写成、字符串比较用了而不是strcmp。第三类是逻辑与习惯错strcpy的两个参数写反、交换时漏了中间变量、返回值类型和函数声明不一致。/* 函数功能找出数组 a 中 n 个元素的最大值并把它与 a[0] 交换 */ void fun(int *a, int n) { int i, k 0, t; for (i 1; i n; i) /* found1 */ if (a[i] a[k]) k i; t a[0]; a[0] a[k]; a[k] t; }found1 处的错误是i n越界应改为i n。错在哪数组下标范围是 0 到 n − 1取到 n 就访问了数组之外的内存。为什么错这种越界在 C 里不会报错只是读到一个随机值如果这个随机值恰好很大最大值的位置就错了最终交换出来的结果莫名其妙。怎么答对看到循环上界和数组长度同时出现先默念一遍「下标从 0 开始上界不取等号」再检查循环起点是不是也该是 0。/* 函数功能把字符串 s 复制到 t 中然后输出 t 的长度 */ void fun(char *s, char *t) { int i 0; while (s[i] ! \0) { t[i] s[i]; i; } /* found2 */ printf(%d\n, (int)strlen(t)); }found2 的问题不在这一行本身而在它前面少了一句t[i] \0;。错在哪复制完字符却没有给新串补结尾符strlen会一直往后扫直到碰上内存里某个 0 才停长度就是个随机数。为什么错C 的字符串靠\0定界不补结尾符等于交出一个没有边界的串。怎么答对凡是手写循环复制字符串、拼接字符串、删除字符之后最后一步永远是给目标串补\0这条要变成肌肉记忆。注意改错题通常规定不能增删整行语句、不能改动程序结构只能改 found 下面的那一行。如果判断出问题在别处先确认题干的具体限制别一上来就大改。3.3 程序设计24分一份能套用的函数模板编程题是分值最高、也最容易拿部分分的一道。它的评分通常是按测试点给分能编译通过、能跑出正确结果就有分所以第一优先级是「写出一份能编译的完整函数」而不是追求最优写法。动作顺序固定为五步定义变量、循环遍历、条件判断、写回结果、返回。/* 函数功能统计字符串 s 中数字字符的个数 同时把串中所有小写字母转成大写字母返回数字字符个数 */ int fun(char *s) { int count 0; /* 数字字符计数器必须初始化 */ int i 0; while (s[i] ! \0) { /* 逐字符扫描到串尾 */ if (s[i] 0 s[i] 9) count; /* 命中数字字符 */ else if (s[i] a s[i] z) s[i] s[i] - 32; /* 小写转大写ASCII 差值为 32 */ i; /* 别忘了推进下标否则死循环 */ } return count; }这段代码里每个部分都有明确作用。count是返回值载体必须初始化为 0这是最常见的丢分点i是扫描下标从 0 开始走到\0为止两个判断分支互斥先判数字再判小写字母用else if连接可以少做一次比较。参数s是指向字符数组的指针函数内部通过下标访问修改会直接作用在原串上所以大写转换不需要额外返回值。一个必须点出来的细节字符范围判断不能写成a s[i] z。C 会先算a s[i]得到一个 0 或 1再拿这个 0/1 去和z比较结果恒为真所有字符都会被当成小写字母处理。这个坑每年都有人踩写的时候强迫自己拆成两个条件用连接。如果题目要求返回处理后的字符串或者返回多个值模板要相应调整返回字符串时函数类型写成char *最后return s;需要带回多个结果时用指针形参写回比如void fun(char *s, int *num)在函数体里写*num count;。这些变化不影响五步顺序只是把「返回」这一步换了个出口。4. 高频考点指针、数组、函数、结构体、文件的必考组合C 语言的知识点摊开有十几章但真正在卷面上反复出现的组合就那么几组。指针和数组永远绑在一起考函数必然连着参数传递和作用域结构体一定和链表结点挂钩文件操作则是操作题里最独立也最套路化的一块。把这四组关系吃透选择题的一大半和操作题的基本盘就都覆盖了。这一章按这四组展开每组先讲清楚它的考法逻辑再给一段能直接对着练的代码。重点不是把语法从头过一遍而是让你知道「这个知识点会以什么形式出现在卷子上」。4.1 指针与数组一张等价关系表解决大半判断指针和数组之所以总是一起考是因为它们在表达式里高度等价。理解下面这张表比背十页笔记有用写法含义等价形式a数组首元素地址a[0]a i第 i 个元素的地址a[i]*(a i)第 i 个元素的值a[i]p ap 指向首元素p a[0]p[i]以 p 为起点的第 i 个元素*(p i)a整个数组的地址类型是数组指针值相同但类型不同前五行是考试主力最后一行是拉分点。a和a的值一样但类型不同a退化成指向首元素的指针a是指向整个数组的指针所以a 1移动一个元素a 1移动整个数组的长度。这个区别在选择题里出现过判断方法就是看加 1 之后跨过多少字节。二维数组的考法更固定核心就一句a[i][j]等价于*(*(a i) j)。把它拆开理解a i是第 i 行的地址*(a i)是第 i 行首元素的地址再 j解引用一次就落到具体元素。选择题常问「*(a 1) 2是什么」答案是第 1 行第 2 个元素的地址而不是值少一层*就错。#include stdio.h int main(void) { int a[3][4] {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; int (*p)[4] a; /* 行指针一次跨一行 */ printf(%d\n, *(*(p 1) 2)); /* 第 1 行第 2 列输出 7 */ printf(%d\n, p[2][1]); /* 也可以直接按二维下标用输出 10 */ return 0; }这段代码里p的类型是「指向含 4 个 int 的数组的指针」所以p 1跳过一整行 16 个字节。参数这样写的好处是函数接收二维数组时可以保留列数信息形参写成int (*p)[4]就能直接用p[i][j]访问。如果写成int **p类型就对不上了运行时会读到错误地址这是函数传二维数组时最常见的错误。4.2 函数参数传递、作用域与递归三件事函数的考点集中在三件事上每一件都有固定的判断方法。参数传递看形参类型普通变量是值传递函数内的修改不影响实参指针是地址传递通过*写回可以改变实参指向的内容数组名传参本质是传首地址函数内对元素的修改会作用到原数组。这三句话能解掉绝大多数函数相关的选择题。作用域看变量定义的位置和修饰符。在函数内定义的普通局部变量每次调用重新初始化加了static的局部变量只在第一次调用时初始化之后一直保留上次的值直到程序结束。这个特性几乎是必考判断方法很简单看这个变量有没有static有就按「只初始化一次、值会累积」算。#include stdio.h void counter(void) { static int s 0; /* 只初始化一次之后一直累加 */ int n 0; /* 每次调用都重新置 0 */ s; n; printf(%d %d\n, s, n); } int main(void) { counter(); /* 输出 1 1 */ counter(); /* 输出 2 1 */ counter(); /* 输出 3 1 */ return 0; }三次调用的输出分别是1 1、2 1、3 1。s定义时加了static放在静态存储区函数退出后值还在下次进来接着加n是普通局部变量每次进函数都在栈上重新分配并赋 0所以永远是 1。参数说明里要特别注意static局部变量的初始化语句在编译期就完成了运行时只执行一次所以不能指望它每次调用都重置。递归的考法更简单两条必须同时成立有终止条件、每次递归向终止条件靠近。答题时看这两个条件在不在就能判断递归函数对不对。/* 求 n 的阶乘n 0 */ long fact(int n) { if (n 1) /* 终止条件 */ return 1; return n * fact(n - 1); /* 向终止条件靠近 */ }这段递归里终止条件是n 1时返回 1递推式是n * fact(n - 1)每次 n 减 1 必然收敛到 1。常考的变形是「求斐波那契数列第 n 项」和「求整数各位数字之和」后者要注意负数处理和递归出口写n 0还是n 10的区别。递归的调用次数也是选择题的常见问法拿 n 4 手动展开一层就能数清楚。4.3 结构体与链表结点定义和三个基本动作结构体本身不难难的是它和指针结合之后的链表操作。结点定义是固定模板必须记住结构体内部的那个指针类型要写成struct 结构体名 *不能直接写别名因为此时别名还没定义完。#include stdlib.h typedef struct node { int data; /* 数据域 */ struct node *next; /* 指针域指向同类结点 */ } NODE; /* 在值为 key 的结点之后插入值为 x 的新结点成功返回 1找不到返回 0 */ int insertAfter(NODE *head, int key, int x) { NODE *p head; while (p ! NULL p-data ! key) p p-next; /* 顺着链找目标结点 */ if (p NULL) return 0; /* 走到链尾还没找到 */ NODE *q (NODE *)malloc(sizeof(NODE)); if (q NULL) return 0; /* 内存分配失败实际考试很少触发 */ q-data x; q-next p-next; /* 先让新结点接上后继 */ p-next q; /* 再让前驱接上新结点 */ return 1; }这段代码里最关键的是最后两行的顺序必须先接后、再断前如果反过来先执行p-next q原来的后继地址就丢了后面的整条链全部断掉。这是链表操作最经典的翻车点也是改错题喜欢设陷阱的地方。链表在卷面上只有三个基本动作遍历、插入、删除。遍历用while (p ! NULL) { ...; p p-next; }删除要先找到前驱再执行p-next p-next-next;并释放结点。参数说明里要留意的两点头结点是不是带头结点的链表带头结点时空链表判断是head-next NULL不带头是head NULL以及函数返回的是结点指针还是成功标志。结构体成员访问用.还是-只看左边是变量还是指针这条规则在选择题里也常出现。4.4 文件操作四步流程和打开模式表文件操作是操作题里最独立的一块流程永远是四步打开、判断是否成功、循环读写、关闭。打开模式的含义必须记牢这是选择题和改错题的共同考点模式含义文件不存在时r只读文本方式打开失败返回 NULLw只写文本方式新建文件原有内容被清空a追加写文本方式新建文件写入内容接在末尾r读写文本方式打开失败rb/wb二进制方式读写规则同上w会清空原文件这一条要特别小心改错题里经常出现「想读文件却用了w模式」的错误。#include stdio.h int main(void) { FILE *fp fopen(in.txt, r); if (fp NULL) { /* 打开失败必须先判断否则后面全是空指针操作 */ printf(open error\n); return 1; } int n 0; char ch; while ((ch fgetc(fp)) ! EOF) /* 逐个字符读到文件尾 */ if (ch 0 ch 9) n; /* 统计数字字符个数 */ fclose(fp); /* 用完必须关闭否则缓冲区可能没刷盘 */ printf(%d\n, n); return 0; }这段代码的参数含义要清楚fopen返回FILE *失败返回 NULLfgetc每次读一个字节读到文件末尾返回EOF所以循环条件要写成赋值加判断的组合并且赋值外面必须有一层括号否则!会先结合。写文件对应fputc、fputs、fprintf格式化读写用fscanf和fprintf整块读写用fread和fwrite。操作题里最常出现的是「读入数据、处理、写到另一个文件」这个组合四步流程套上去中间的处理逻辑和数组题没有区别。5. 易错点五类年年有人栽的题这一章列的五类错误有一个共同特征它们都不是「不会做」而是「觉得会做」然后做错。复习到最后阶段把这些点过一遍的收益往往比再刷五十道新题更高。5.1 边界与下标三行代码里藏着两个坑错在哪循环条件写成i n数组下标访问越界字符串处理完忘记补\0strlen和printf(%s)全都读飞。为什么错C 语言不检查数组越界越界读到的是一块随机内存程序不一定崩但结果一定不对所以靠运行看不出问题字符串没有结尾符时函数会一直往后扫到内存里碰巧出现的 0长度和内容都是随机的。这两类错误都属于「能编译、能运行、结果错」肉眼极难发现。怎么答对养成两个固定动作。写循环之前先默念「数组长度 n下标 0 到 n − 1上界不取等号」写完之后看一眼起点是不是也该是 0。凡是手动构造、复制、删除字符串最后一步无条件补t[i] \0;补完再回头看长度对不对。改错题里看到循环上界和数组长度同时出现优先怀疑这一处。5.2 指针与字符串最贵的三类失分错在哪把值传递当成能改实参指针定义了没初始化就解引用strcpy、strcmp的参数顺序写反。为什么错值传递时形参只是副本函数内部改得再热闹main 里的变量纹丝不动未初始化的指针指向一个随机地址写进去就是踩内存strcpy(dst, src)的方向是从后往前拷写反了会直接把源串覆盖掉。这三类错误在操作题里都直接扣分而且是整道题大面积失分。怎么答对函数需要修改实参时形参写int *调用时传x函数体里用*p定义指针时立刻赋一个有效地址比如NODE *p head;不确定就先赋 NULL用之前判断字符串函数按「目标在前、源在后」记strcmp则是「前减后」返回正负。改错题看到形参是指针但函数体里当普通变量用基本就是这里错了。5.3 表达式与文件优先级和句柄的坑错在哪a ch z这种连写比较if (x 0)把赋值写进条件文件用完不fclose或者用w模式去读文件。为什么错连写比较在 C 里会先算左边得到一个 0 或 1再拿 0/1 去和z比结果恒为真所有字符都被当成符合条件赋值表达式的值是赋进去的那个值x 0的值是 0条件永远不成立w模式会清空原文件想读数据却把数据清没了这道题后面的测试点全部失败。怎么答对范围判断一律拆成两个条件用连接条件里出现单独的立刻改成写的时候把常量放左边0 x可以让编译器帮你抓错文件操作按「打开、判空、读写、关闭」四步走打开模式对着表格确认一遍是读还是写。5.4 类型与格式不报错的错最麻烦错在哪整型用%f输出、double用%d输出累加器初始化成int却在做浮点除法函数声明返回double但函数体里return了一个整数表达式。为什么错printf的格式串和参数类型不匹配时不会报错只会输出一段乱码或者 0t / i两边都是整数时执行整数除法1/2 直接得 0后面全乘 0返回值类型不匹配会做隐式截断小数部分全丢。怎么答对写变量时把类型和格式串成对记int配%d、double配%lf输入或%f输出、char配%c、字符串配%s。做除法前先看两边类型只要涉及小数至少一边要是浮点写法上把1.0放在前面。函数第一行就把返回类型和return的表达式对齐。5.5 死循环与推进最容易被忽略的一分错在哪while循环体里忘了写i;链表遍历时忘了p p-next;for循环的三个表达式写错位置导致条件永远成立。为什么错循环变量不推进条件永远为真程序卡死。考试环境里程序超时不会给你任何提示只会一直等着最后交卷时这道题 0 分还很可能是后面题目的时间也被吃掉了。怎么答对写完任何一个循环先扫一眼循环体里有没有改变循环变量的语句没有就补上链表遍历统一写成while (p ! NULL) { ...; p p-next; }把推进放在循环体最后一行for循环的三个部分按「初始化、条件、推进」顺序默念一遍。这个检查只要五秒钟但能救回整道题。6. 120分钟的分配表与押题思路时间分配这件事很多人是进了考场才临时决定结果前面选择题磨了五十分钟后面编程题只剩二十分钟写完框架就交卷。合理的节奏应该在考前就固定下来练的时候按这个节奏掐表形成条件反射。时间段内容目标035 分钟40 道选择题先做 C 语言部分再回头做公共基础3550 分钟程序填空保 12 分以上拿不准的空先填最可能的5065 分钟程序修改每处 found 至少改一处不留空65105 分钟程序设计先写能编译的完整版本再优化105120 分钟回查检查变量初始化、结尾符、下标边界选择题先做 C 语言部分是有原因的这部分靠推理刚进场脑子最清醒效率最高公共基础靠记忆放到后面做不影响正确率。编程题千万不要留到最后十五分钟一道 24 分的题从零开始写光理清功能就要五分钟写不完就是白丢。哪怕思路没完全理顺也要先把函数框架、变量定义、循环结构写进去让它能编译通过能过一个测试点就是一个测试点的分。押题方向上操作题的函数功能有明显的聚集性。字符串类是绝对主力统计某类字符个数、删除符合条件的字符、大小写转换、字符串逆置、子串查找。数组类是第二主力求最大值最小值、排序、查找、移动元素、求平均值。数学类是第三块素数判断、阶乘、斐波那契、水仙花数、数列求和。链表类出现频率稍低但一旦出现就是整道大题重点看结点的插入和删除。文件类通常和上面某一块组合考「从文件读数据、处理、写回文件」。把这五类各写三遍考场上遇到的基本都在射程内。还有一个容易被忽略的细节编程题的函数名、参数列表在题面里是给定的不能改。改了就编译不过直接 0 分。写之前先把题面给的函数头原样抄一遍再往里面填内容这一步花十秒能避免最冤的一种失分。我自己的习惯是每次模拟练习都强制走一遍「读功能注释、看 main、写框架、补边界、手工回代最小用例」这五步哪怕题目看起来很简单也不跳。血泪经验是有一回觉得一道字符串题太熟直接上手写结果忘了补结尾符本地跑出来是乱码考场上没有第二次机会。从那以后我每次写完字符串相关函数都会单独回头确认一遍有没有\0这个动作已经变成了条件反射。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑