Skip to content

计算机 2024 真题全量详解

广东专升本《计算机基础与程序设计》2024 考生回忆版 + 答案解析

计算机程序设计 · 2024 年真题(考生回忆版 + 全量详解)

类型:考生回忆版(B 级资料)| 满分 200 分 · 150 分钟
科目:广东普通专升本《计算机基础与程序设计》
体例来源Sakiko Blog · 2024 真题回忆版+详解(已全量整理入库,并加 Obsidian 考点双向链接)
边界:考试院不公开发布原卷 PDF;措辞/个别数字以你手头正版真题册为准。见 00-资料来源与使用说明
按考点拆练考点拆分索引

本文整理自 2024 年广东省普通专升本(专插本)统考《计算机基础与程序设计》考生回忆版,附每道题的详细解析。回忆版无法 100% 还原真题用词,但考点、数据、答案与考试高度一致,是 2025/2026 届最接近真实考试的参考之一。


试卷结构

题型题量分值核心考查内容
一、单项选择题2060(3 分/题)C 语法基础、运算符、数据结构概念
二、判断题1020(2 分/题)C 语言细节、数据结构性质
三、填空题520(4 分/题)程序补全、数据结构术语
四、简答题440(10 分/题)概念辨析、程序分析
五、计算题330(10 分/题)程序执行结果分析
六、应用题330(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 数组

解析:字符串处理函数(strcmpstrcpystrlenstrcat 等)声明在 string.h。B 数学函数,C 标准库(malloc/free),D 标准输入输出。


3. 下面程序输出结果为( )

c
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 + bb = 1,输出 1a = 2 - ba = 1,输出 1 → 连写为 11,选项中无。
  • 回忆版 OCR/措辞可能偏差:若第二式为 a = 2 * b,则输出 12,对应选项 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 数据的存储与运算

解析(整数除法截断)

选项计算结果
A3/2=12+1=3✅ 3
B14%10=417-4=1313
C13/3=44-2=22
D9/4=22

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. 以下程序段的功能是( )

c
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
11<412
22<423
33<434
44<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,已升序):

  1. mid = (0+6)/2 = 3 → a[3]=35,21 < 35 → 左半
  2. mid = (0+2)/2 = 1 → a[1]=18,21 > 18 → 右半
  3. 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")=4sizeof("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 线性表

解析(顺序不能反):

  1. s->next = p->next; // 先挂上 p 的后继
  2. 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. 下面程序的功能是通过指针形参返回两个数的和,请补全。

c
void add(int x, int y, int *z) {
    ________;
}

答案:*z = x + y · 1.8 指针

zint*,要改外部变量必须 *z 解引用赋值。

2. 执行以下程序段后,输出结果是 ____

c
char s1[20] = "Hello";
char s2[20] = "Hi";
printf("%d", strlen(strcpy(s1, s2)));

答案:2 · 1.6 数组

strcpy(s1,s2)"Hi" 拷到 s1 并返回 s1strlen("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 分)

c
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=10i<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. 写出以下程序的输出结果。

c
#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=7case 7n=1。等级映射:0–59→0,60–79→1,80–89→2,90–100→3。


2. 写出以下程序的输出结果。

c
#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. 写出以下程序的输出结果。

c
#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 手写编程

c
#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 循环结构程序设计

c
#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 循环结构程序设计

c
#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=4515022500+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、顺序表优缺点、入度/出度
  • 易混sizeof vs strlen、顺序 vs 链式、逻辑 vs 存储、线性 vs 非线性

整体难度适中;基础扎实拿到 150+ 可期。


2024 考点热力图 → 拆练

板块约分拆练笔记
C 语法 / 表达式 / 选择循环~4501 C 基础
数组 · 字符串 · 指针~3502 数组指针
线性表 · 栈队列~2503 链表栈队列
树 · 图 · 串 · 查找 · 算法~3504 树图查找
简答默写 + 手写编程~6005 手写编程

刷题勾选

  • [ ] 单选 20 题 ≤25 分钟
  • [ ] 判断 + 填空闭卷
  • [ ] 4 道简答默写关键词
  • [ ] 3 道计算手推输出
  • [ ] 3 道编程纸上写完整 main

来源与声明

原卷 PDF2024 计算机(本地 OCR 版)
关联计算机程序设计 · 考点拆分
返回_索引 · 总索引
更新:2026-07-23 · Sakiko 博客体例全量入库 + GitHub 同步

仅供个人学习 · 考生回忆版 · 非考试院原卷