计算机程序设计 · 2024 年真题(考生回忆版 + 全量详解)
类型:考生回忆版(B 级资料)| 满分 200 分 · 150 分钟
科目:广东普通专升本《计算机基础与程序设计》
体例来源:Sakiko Blog · 2024 真题回忆版+详解(已全量整理入库,并加 Obsidian 考点双向链接)
边界:考试院不公开发布原卷 PDF;措辞/个别数字以你手头正版真题册为准。见 00-资料来源与使用说明
按考点拆练:考点拆分索引
本文整理自 2024 年广东省普通专升本(专插本)统考《计算机基础与程序设计》考生回忆版,附每道题的详细解析。回忆版无法 100% 还原真题用词,但考点、数据、答案与考试高度一致,是 2025/2026 届最接近真实考试的参考之一。
试卷结构
| 题型 | 题量 | 分值 | 核心考查内容 |
|---|---|---|---|
| 一、单项选择题 | 20 | 60(3 分/题) | C 语法基础、运算符、数据结构概念 |
| 二、判断题 | 10 | 20(2 分/题) | C 语言细节、数据结构性质 |
| 三、填空题 | 5 | 20(4 分/题) | 程序补全、数据结构术语 |
| 四、简答题 | 4 | 40(10 分/题) | 概念辨析、程序分析 |
| 五、计算题 | 3 | 30(10 分/题) | 程序执行结果分析 |
| 六、应用题 | 3 | 30(10 分/题) | 手写 C 语言程序 |
| 合计 | 200 |
参考教材:谭浩强《C 语言程序设计》(第 5 版)+ 严蔚敏《数据结构(C 语言版)》
一、单项选择题(本大题共 20 小题,每小题 3 分,共 60 分)
1. 以下关于 C 程序的叙述中,错误的是( )
A. 语句最后必须是分号
B. C 程序的基本组成单位是函数
C. 注释可以用 \N 开始
D. 一条语句可以分成多行来写
答案:C · 考点 1.1 C语言概述与基本概念
解析:C 语言注释用 /* */ 或 //,不存在 \N 开头的注释格式。A 正确(语句以分号结尾);B 正确(C 以函数为基本组成单位);D 正确(一条语句可跨多行)。
2. C 语言中,使用 strcmp 函数需要包含的头文件是( )
A. string.h B. math.h C. stdlib.h D. stdio.h
答案:A · 考点 2.4 串、数组和广义表 · 1.6 数组
解析:字符串处理函数(strcmp、strcpy、strlen、strcat 等)声明在 string.h。B 数学函数,C 标准库(malloc/free),D 标准输入输出。
3. 下面程序输出结果为( )
int a = 1, b = 0;
printf("%d", b = a + b);
printf("%d", a = 2 - b);A. 1, 0 B. 1, 2 C. 3, 2 D. 0, 0
答案:B(回忆版共识) · 考点 1.2 数据的存储与运算
解析 / 注意:
- 按字面逐步:
b = a + b→b = 1,输出1;a = 2 - b→a = 1,输出1→ 连写为11,选项中无。 - 回忆版 OCR/措辞可能偏差:若第二式为
a = 2 * b,则输出1与2,对应选项 B。 - 刷题重点:赋值表达式可作
printf实参;逗号/连写输出不要想当然。
4. 表达式 10 != 9 的值是( )
A. 0 B. 1 C. 8 D. 非 0
答案:B · 考点 1.2 数据的存储与运算
解析:!= 为不等于。10 != 9 为真,C 中关系表达式为真时值为 1(不是「任意非 0」)。
5. 以下表达式中值为 3 的是( )
A. 2 + 3 / 2
B. 17 - 14 % 10
C. 13 / 3 - 2
D. (3 + 6) / (13 - 9)
答案:A · 考点 1.2 数据的存储与运算
解析(整数除法截断):
| 选项 | 计算 | 结果 |
|---|---|---|
| A | 3/2=1,2+1=3 | ✅ 3 |
| B | 14%10=4,17-4=13 | 13 |
| C | 13/3=4,4-2=2 | 2 |
| D | 9/4=2 | 2 |
6. 下列可用做 C 语言字符串常量的是( )
A. X B. $ABC C. "Horse" D. ¥abc
答案:C · 考点 1.1 C语言概述与基本概念
解析:字符串常量必须用双引号。A 为字符常量写法不完整;B、D 不是合法字符串常量写法。
7. 执行代码 int a = 205, b = 206; printf("%d", (a, b)); 的输出结果为( )
A. 205 B. 206 C. 205, 206 D. 206, 206
答案:B · 考点 1.2 数据的存储与运算
解析:(a, b) 是逗号表达式:从左到右计算,取最后一个表达式的值 → b 即 206。
对比:printf("%d", a, b) 格式串只有一个 %d,多出的参数行为未定义/被忽略,不是本题。
8. 以下程序段的功能是( )
int temp, x, y;
temp = x, x = y, y = temp;A. 交换 x 和 y 的值
B. 交换 x 和 temp 的值
C. 交换 x 和 z 的值
D. x 和 y 从大到小排序
答案:A · 考点 1.3 顺序程序设计
解析:经典三变量交换;此处用逗号表达式把三条赋值写在一行。
9. 执行语句 int a = 1; while (a < 4) printf("%d", a++); 的输出结果为( )
A. 1 B. 12 C. 1234 D. 123
答案:D · 考点 1.5 循环结构程序设计
解析(a++ 后置:先用后加):
| a | 条件 | 输出 | 后 a |
|---|---|---|---|
| 1 | 1<4 | 1 | 2 |
| 2 | 2<4 | 2 | 3 |
| 3 | 3<4 | 3 | 4 |
| 4 | 4<4 假 | 退出 |
最终输出 123。
10. 下列关于算法的说法中,错误的是( )
A. 常用伪代码描述算法
B. 自然语言可以描述算法
C. 算法是求解问题的有限序列
D. 算法不存在时间复杂度
答案:D · 考点 2.9 算法基本概念与分析
解析:算法一定有时间复杂度(效率度量)。A/B/C 均为正确描述。
11. C 语言结构体类型变量在程序执行期间( )
A. 所有成员一直驻留在内存中
B. 只有一个成员驻留在内存中
C. 部分成员驻留在内存中
D. 没有成员驻留在内存中
答案:A · 考点 1.9 结构体与共用体
解析:结构体变量定义后,所有成员同时分配(含对齐)。联合体 union 才是成员共享同一块内存。
12. 长度为 n 的顺序表,在第 i 个元素后面插入一个新元素的时间复杂度为( )
A. O(0) B. O(1) C. O(n) D. O(n²)
答案:C · 考点 2.2 线性表
解析:插入需将 i 后元素整体后移;最坏约 n 次移动,平均 n/2 → O(n)。
13. 通过折半查找对关键字序列 {12, 18, 21, 35, 45, 55, 66},查找 21 需要查找( )次
A. 4 B. 3 C. 2 D. 1
答案:B · 考点 2.7 查找
解析(下标 0…6,已升序):
- mid = (0+6)/2 = 3 →
a[3]=35,21 < 35 → 左半 - mid = (0+2)/2 = 1 →
a[1]=18,21 > 18 → 右半 - mid = (2+2)/2 = 2 →
a[2]=21找到
共 3 次。
14. 串 "abcd" 的长度为( )
A. 5 B. 2 C. 6 D. 4
答案:D · 考点 2.4 串、数组和广义表
解析:串长 = 字符个数,不含 '\0'。strlen("abcd")=4;sizeof("abcd")=5(含结束符)。
15. 数据的结构类型,从逻辑上可分为( )
A. 动态结构和静态结构
B. 紧凑结构和非紧凑结构
C. 线性结构和非线性结构
D. 内部结构和外部结构
答案:C · 考点 2.1 数据结构基本概念
解析:
- 逻辑结构:线性(表/栈/队列/串) vs 非线性(树/图/集合)
- 存储结构:顺序 / 链式 / 索引 / 散列
16. 链式存储的存储结构所占空间( )
A. 只有一部分存放结点值
B. 只有一部分存放结点间关系的指针
C. 分两部分,一部分存放结点值,另一部分存放结点所占单元数
D. 分两部分,一部分存放结点值,另一部分存放表示结点间关系的指针
答案:D · 考点 2.2 线性表
解析:结点 = 数据域 + 指针域。C 错在「所占单元数」——指针存的是邻接地址。
17. 带有头结点的单链表,头指针为 head,则表示单链表为空的选项是( )
A. head == NULL
B. head != NULL
C. head->next == NULL
D. head->next == head
答案:C · 考点 2.2 线性表
解析:带头结点时头结点始终存在;空表 ⟺ 头结点后无数据结点 ⟺ head->next == NULL。
A 是不带头结点判空;D 常见于循环链表等场景。
18. 四个元素 1、2、3、4 依次入栈,第一个出栈元素为 4,则第 3 个出栈元素为( )
A. 1 B. 2 C. 3 D. 4
答案:B · 考点 2.3 栈和队列
解析(LIFO):四个全入后才弹 → 出栈序 4, 3, 2, 1 → 第 3 个是 2。
19. 二叉树第 3 层的结点个数最多有( )个
A. 1 B. 4 C. 8 D. 16
答案:B · 考点 2.5 树和二叉树
解析:第 k 层最多 (2^{k-1}) 个(根为第 1 层)。第 3 层:(2^{2}=4)。
20. 在单链表中,要将 s 所指向结点插入到 p 所指向结点之后,其语句应为( )
A. s->next = p + 1; p->next = s;
B. s->next = p->next; p->next = s->next;
C. (*p).next->s; (*s).next = (*p).next;
D. s->next = p->next; p->next = s;
答案:D · 考点 2.2 线性表
解析(顺序不能反):
s->next = p->next;// 先挂上 p 的后继p->next = s;// 再让 p 指向 s
先改 p->next 会丢后继。B 第二步把 p->next 设回 s->next 等于没插对。
二、判断题(本大题共 10 小题,每小题 2 分,共 20 分)
判断正确填「√」,错误填「×」。
1. 结构体变量的成员可以通过 .成员名 来引用其值。( )
答案:√ · 1.9 结构体与共用体
结构体变量用 .;结构体指针用 -> 或 (*p).成员。
2. 数组的下标从 1 开始。( )
答案:× · 1.6 数组
C 数组下标从 0 开始。int a[5] 合法下标 0…4。
3. 复合语句({})中定义的变量,其作用域仅限于该复合语句内部。( )
答案:√ · 1.7 函数
花括号内局部变量,离开 } 后不可访问。
4. 不同函数中可以使用同名的变量,它们互不影响。( )
答案:√ · 1.7 函数
各函数局部变量在各自栈帧,同名互不影响。
5. 栈和队列没有共同点。( )
答案:× · 2.3 栈和队列
共同点:都是操作受限的线性表。区别:栈 LIFO,队列 FIFO。
6. while 语句的退出方式只有条件表达式为假这一种。( )
答案:× · 1.5 循环结构程序设计
还可用 break(以及 return/exit 结束函数/进程)。
7. 二维数组在内存中按行优先顺序存储。( )
答案:√ · 1.6 数组
C 按行优先:a[0][0], a[0][1], …, a[1][0], …。
8. 串是一种特殊的线性表,其数据元素只能是字符。( )
答案:√ · 2.4 串、数组和广义表
串 = 零个或多个字符的有限序列。
9. 算法的时间复杂度和空间复杂度一定呈反比关系。( )
答案:× · 2.9 算法基本概念与分析
无必然反比;仅部分场景存在「以空间换时间」权衡。
10. 在线性表中,除了第一个元素外,每个元素有且只有一个直接前驱。( )
答案:√ · 2.2 线性表
线性表基本特性(首元无前驱,末元无后继)。
三、填空题(本大题共 5 小题,每小题 4 分,共 20 分)
1. 下面程序的功能是通过指针形参返回两个数的和,请补全。
void add(int x, int y, int *z) {
________;
}答案:
*z = x + y· 1.8 指针
z 是 int*,要改外部变量必须 *z 解引用赋值。
2. 执行以下程序段后,输出结果是 ____。
char s1[20] = "Hello";
char s2[20] = "Hi";
printf("%d", strlen(strcpy(s1, s2)));答案:2 · 1.6 数组
strcpy(s1,s2) 把 "Hi" 拷到 s1 并返回 s1;strlen("Hi")=2。
3. 串的两种基本存储方式是:____ 和 ____。
答案:顺序存储、链式存储 · 2.4 串、数组和广义表
4. 广义表 L = (a, (b, c), ()) 的长度是 ____。
答案:3 · 2.4 串、数组和广义表
长度 = 第一层元素个数:a、(b,c)、() 共 3。深度为 2。
5. 9 个顶点的连通图最少需要 ____ 条边。
答案:8 · 2.6 图
n 顶点连通最少 n−1 条边(树)。
四、简答题(本大题共 4 小题,共 40 分)
1. 什么是数据项?什么是抽象数据类型(ADT)?(10 分)
考点 2.1 数据结构基本概念
参考答案:
- 数据项:数据结构中讨论的最小单位,不可再分割。例:学生的学号、姓名、成绩。
- 抽象数据类型(ADT):一个数学模型 + 定义在该模型上的一组操作。特征:
- 抽象性:只关心「做什么」,不关心「怎么做」
- 封装性:数据与操作封装,外部仅通过接口访问
- 常用三元组:
ADT = (D, S, P)—— 数据对象、关系集、操作集 - 例:整数 ADT 含数据
{…,-1,0,1,…}与操作{+,-,*,/,%},使用者无需知道底层二进制实现。
2. 分析以下程序段的功能,并写出循环结束时 i 的值。(10 分)
int a[10] = {85, 72, 93, 68, 80, 76, 90, 83, 78, 88};
int sum = 0, i;
for (i = 0; i < 10; i++) {
sum += a[i];
}
printf("平均值 = %.1f\n", sum / 10.0);考点 1.5 循环结构程序设计 · 1.6 数组
参考答案:
- 功能:计算数组
a中 10 个元素的平均值并输出。 - 循环结束时 i = 10(当
i=10时i<10不成立退出)。 - 此时
sum=803,输出平均值 = 80.3。
3. 简述顺序表存储结构的优缺点。(10 分)
考点 2.2 线性表
| 优点 | 缺点 |
|---|---|
| 随机访问:下标 O(1) | 插入/删除平均 O(n),需大量移动 |
| 存储密度高(无指针开销) | 预分配容量,易浪费或不够用 |
| 实现简单(数组即可) | 需连续大块内存,碎片敏感 |
适用:数据量已知、查多改少。
4. 什么是有向图?什么是有向图中顶点的出度和入度?(10 分)
考点 2.6 图
- 有向图:顶点集 + 边集,边为有序对
<v,w>(从 v 指向 w 的弧)。<v,w>与<w,v>是不同的边。 - 出度 OD(v):以 v 为弧尾的弧数(从 v 出发)。
- 入度 ID(v):以 v 为弧头的弧数(指向 v)。
- 性质:Σ 出度 = Σ 入度 = 边数。
五、计算题(本大题共 3 小题,每小题 10 分,共 30 分)
1. 写出以下程序的输出结果。
#include <stdio.h>
int main() {
int x;
scanf("%d", &x); // 假设输入 75
int n;
switch (x / 10) {
case 0: case 1: case 2: case 3: case 4: case 5:
n = 0; break;
case 6: case 7:
n = 1; break;
case 8:
n = 2; break;
case 9: case 10:
n = 3; break;
default:
n = -1;
}
printf("n = %d\n", n);
return 0;
}答案:
n = 1· 1.4 选择结构程序设计
解析:75/10=7 → case 7 → n=1。等级映射:0–59→0,60–79→1,80–89→2,90–100→3。
2. 写出以下程序的输出结果。
#include <stdio.h>
int main() {
int i = 153;
int a, b;
a = i / 100; // 百位
b = (i / 10) % 10; // 十位
printf("a = %d, b = %d\n", a, b);
return 0;
}答案:
a = 1, b = 5· 1.2 数据的存储与运算
解析:
- 百位:
153/100=1 - 十位:
(153/10)%10=15%10=5 - 个位(未输出):
153%10=3
经典数位分解套路。
3. 写出以下程序的输出结果。
#include <stdio.h>
#include <string.h>
int main() {
char s[] = "abcdefgh";
char t[20];
int j = 0;
for (int i = 0; s[i] != '\0'; i++) {
if (s[i] != 'c') {
t[j] = s[i];
j++;
}
}
t[j] = '\0';
printf("%d\n", j);
printf("%s\n", t);
return 0;
}答案:
7
abdefgh· 1.6 数组
解析:去掉 'c' 后 8→7 个字符,j 同时是长度与下标计数。
六、应用题(本大题共 3 小题,每小题 10 分,共 30 分)
1. 编程:将 201~209 这 9 个数按行存入 3×3 的二维数组,并输出矩阵。
考点 1.6 数组 · 拆练 05 手写编程
#include <stdio.h>
int main() {
int a[3][3];
int num = 201;
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
a[i][j] = num++;
}
}
printf("输出矩阵:\n");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", a[i][j]);
}
printf("\n");
}
return 0;
}输出:
输出矩阵:
201 202 203
204 205 206
207 208 209评分要点:二维数组定义(2)| 循环嵌套(3)| 按行赋值(3)| 输出格式(2)
2. 编程:输入 30 名学生的成绩,输出最高分。
考点 1.6 数组 · 1.5 循环结构程序设计
#include <stdio.h>
int main() {
int scores[30];
int max;
printf("请输入30名学生的成绩:\n");
for (int i = 0; i < 30; i++) {
scanf("%d", &scores[i]);
}
max = scores[0];
for (int i = 1; i < 30; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
printf("最高分 = %d\n", max);
return 0;
}评分要点:数组(2)| 输入循环(2)| 最大值逻辑(4)| 输出(2)
扩展:可不存数组,边读边比,只保留 max。
3. 编程:计算 1~300 之间所有奇数的和与偶数的和,并分别输出。
考点 1.5 循环结构程序设计
#include <stdio.h>
int main() {
int sum_odd = 0;
int sum_even = 0;
for (int i = 1; i <= 300; i++) {
if (i % 2 == 1) {
sum_odd += i;
} else {
sum_even += i;
}
}
printf("奇数和 = %d\n", sum_odd);
printf("偶数和 = %d\n", sum_even);
return 0;
}输出:
奇数和 = 22500
偶数和 = 22650验证:1…300 总和 300×301/2=45150,22500+22650=45150 ✅
优化:等差数列公式 O(1) 直接得:奇数 150×150=22500,偶数 150×151=22650。
评分要点:初始化(2)| 循环范围(2)| 奇偶判断(3)| 累加(2)| 输出(1)
考点分布与复习策略
各章节分值占比(约)
| 章节 | 涉及题型 | 约分值 |
|---|---|---|
| C 语言基础(语法、表达式、运算符) | 单选 1–9、填空 1–2 | ~40 |
| 数组(一维、二维、字符数组) | 判断 2/7、计算 3、应用 1 | ~25 |
| 函数与指针 | 单选 2、填空 1 | ~10 |
| 结构体 | 单选 11、判断 1 | ~5 |
| 数据结构概念(逻辑/存储) | 单选 15–16、判断 5/8/10、简答 1/3 | ~30 |
| 线性表(顺序表、链表、栈、队列) | 单选 12/17/18/20 | ~15 |
| 串、广义表 | 单选 14、填空 3–4 | ~12 |
| 树、图 | 单选 19、填空 5、简答 4 | ~18 |
| 查找(折半) | 单选 13 | ~5 |
| 算法分析 | 单选 10、判断 9 | ~5 |
| 编程(C 综合) | 应用 1–3 | ~30 |
难度分档
| 难度 | 特征 | 典型题号 |
|---|---|---|
| ⭐ 送分 | 纯概念 | 单选 1/2/4/6/10/14/15、判断 1/2/5/7/8/10 |
| ⭐⭐ 基础 | 简单计算/推导 | 单选 3/5/7/9/11/16/17/19、判断 3/4/6/9、填空 3/4/5 |
| ⭐⭐⭐ 拉分 | 完整推理/代码分析 | 单选 12/13/18/20、填空 1/2、简答、计算、应用 |
备考建议
- C 与数据结构约各半——别偏科
- 单选 12–20 数据结构是区分度关键:顺序表/链表/栈/树/图
- 应用编程 30 分拿满不难:循环 + 数组,注意分号/花括号/初始化
- 程序分析逐行手推:switch 穿透、循环、下标、字符过滤
- 简答背关键词:ADT、顺序表优缺点、入度/出度
- 易混:
sizeofvsstrlen、顺序 vs 链式、逻辑 vs 存储、线性 vs 非线性
整体难度适中;基础扎实拿到 150+ 可期。
2024 考点热力图 → 拆练
| 板块 | 约分 | 拆练笔记 |
|---|---|---|
| C 语法 / 表达式 / 选择循环 | ~45 | 01 C 基础 |
| 数组 · 字符串 · 指针 | ~35 | 02 数组指针 |
| 线性表 · 栈队列 | ~25 | 03 链表栈队列 |
| 树 · 图 · 串 · 查找 · 算法 | ~35 | 04 树图查找 |
| 简答默写 + 手写编程 | ~60 | 05 手写编程 |
刷题勾选
- [ ] 单选 20 题 ≤25 分钟
- [ ] 判断 + 填空闭卷
- [ ] 4 道简答默写关键词
- [ ] 3 道计算手推输出
- [ ] 3 道编程纸上写完整
main
来源与声明
- 内容整理自:Sakiko · 2024年广东专插本《计算机基础与程序设计》真题回忆版+详解
- 入库说明:全题干 + 答案 + 逐步解析 + 考点分布 + 备考策略;并加本库系统笔记与考点拆分链接
- 仅供个人学习;回忆版措辞可能与原卷有细微差异,考点与答案以正版真题册/当次正式卷为准
- 见 00-资料来源与使用说明
原卷 PDF:2024 计算机(本地 OCR 版)
关联:计算机程序设计 · 考点拆分
返回:_索引 · 总索引
更新:2026-07-23 · Sakiko 博客体例全量入库 + GitHub 同步