第2章 计算机软件
🟢 基础 | 课程A·计算机应用基础 · 约占理论卷 60%(≈90 分)
2.1 软件基本概念 ★★★
- 软件定义:程序 + 数据 + 相关文档的集合(⚠ 只说"程序"不完整——判断题陷阱)
- 软件分类★★★:
- 系统软件:管理硬件与软件资源、为应用软件提供运行环境——操作系统、语言处理程序(编译/解释/汇编)、数据库管理系统(DBMS)、系统工具/服务程序(⚠ DBMS 属系统软件高频考点)
- 应用软件:面向具体应用——办公软件(Office/WPS)、图形图像(PS)、浏览器、即时通信等
2.2 操作系统 ★★★
- 定义:管理计算机硬件和软件资源、控制程序执行、方便用户使用的系统软件(最重要的系统软件;裸机+OS=虚拟机/扩充机器)
- 四大特征★★★:并发性、共享性、虚拟性、异步性(不确定性)
- 五大功能★★★:处理机管理(进程管理)、存储器管理、设备管理、文件管理、作业管理(用户接口)
- 类型 ★★:
- 批处理系统(成批、无交互、吞吐量大)
- 分时系统(时间片轮转、交互性强、多用户;Unix 典型)
- 实时系统(响应及时可靠,实时控制/实时信息处理,如导弹制导、订票)
- 网络操作系统、分布式操作系统、嵌入式操作系统(手机/家电中,如 Android、iOS、鸿蒙 HarmonyOS、VxWorks)
- 常用操作系统 ★★★:Windows(微软,单用户多任务)、macOS(苹果)、Linux(开源,内核 Linus Torvalds;发行版 CentOS/Ubuntu/红旗)、Android(Google,Linux 内核,开源)、iOS(苹果,闭源)、HarmonyOS 鸿蒙(华为)——开源/闭源、厂商对应关系是高频选择
- 进程:程序的一次执行过程,是资源分配和调度的独立单位;进程三态:就绪→运行→阻塞 ★;线程:CPU 调度的基本单位(进程内多条线程共享进程资源)★
2.3 程序设计语言 ★★★
- 分类★★★:
- 机器语言:二进制指令,计算机唯一直接识别/执行(依赖机器,不可移植)
- 汇编语言:助记符,需汇编程序翻译;面向机器的低级语言
- 高级语言:面向问题/过程/对象,易读易移植——C、C++、Java、Python 等
- 语言处理程序★★★:
- 汇编程序:汇编语言源程序→机器语言
- 编译程序(编译器):高级语言源程序→目标程序(一次翻译、整体执行、执行快;C/C++)
- 解释程序(解释器):逐句翻译逐句执行、不生成目标程序、可交互但慢(Python 传统模式)
- ⚠ 编译 vs 解释对比:是否生成目标程序、执行速度、灵活性的三行对比是高频选择
- 语言组成(数据成分、运算成分、控制成分、传输成分)
- 程序的三种控制结构★★★:顺序、选择(分支)、循环
- 源程序执行方式:编译方式 / 解释方式(同上)
- 常用语言 ★★:C(面向过程,系统开发)、C++(面向对象)、Java(面向对象、跨平台"一次编译到处运行"→字节码+JVM)、Python(解释型、胶水语言、AI 领域主流)、C#、JavaScript(网页脚本)、PHP、Go、SQL(结构化查询语言,数据库)、HTML(⚠ 是标记语言不是程序设计语言——判断题陷阱)
2.4 算法和数据结构 ★★★(理论卷必考)
算法:
- 定义:对特定问题求解步骤的有限描述
- 算法五大特性★★★:有穷性、确定性(无二义)、可行性、有 0 个或多个输入、有 1 个或多个输出(⚠ 输出至少一个——判断题陷阱)
- 算法复杂度★★★:时间复杂度(执行时间增长率,大 O 记法)与空间复杂度(存储空间增长率);常见量级排序:O(1) < O(log₂n) < O(n) < O(n·log₂n) < O(n²) < O(n³) < O(2ⁿ);⚠ 与问题规模 n 相关;"算法的优劣与所用计算机无关"
数据结构:
- 定义:相互之间存在特定关系的数据元素的集合
- 逻辑结构★★:线性结构(线性表、栈、队列、串)与非线性结构(树、图)
- 存储结构★★:顺序存储、链式存储、索引存储、散列(哈希)存储
- 线性表★★★:n 个同类型元素的有序序列
- 顺序存储(顺序表):地址连续、可随机存取(按序号 O(1) 访问);插入/删除需移动元素(平均移动 n/2 个,O(n))
- 链式存储(链表):结点=数据域+指针域;顺序存取(须从头遍历);插删只改指针 O(1)(已定位时);不要求连续空间
- 链表分类:线性单链表(单向)、双向链表(前后两个指针)、循环链表(尾指针指回头);带头结点的意义:操作统一
- 栈(Stack)★★★:后进先出(LIFO);只允许在栈顶插入(入栈 push)删除(出栈 pop);应用:函数/递归调用、表达式求值、进制转换、括号匹配、页面后退
- 队列(Queue)★★★:先进先出(FIFO);队尾入队(rear)、队头出队(front);应用:打印队列、CPU 任务调度、消息缓冲
- 树★★★:
- 术语:根结点、叶子结点(度为 0)、结点的度、树的深度(层次)、父/子/兄弟结点
- 二叉树:每个结点最多 2 棵子树(左子树/右子树,次序不能颠倒)
- 性质 📐:第 i 层最多 2^(i-1) 个结点;深度为 k 的二叉树最多 2ᵏ−1 个结点;n₀ = n₂ + 1(叶子数=度 2 结点数+1)
- 满二叉树(每层全满)/ 完全二叉树(编号对应满二叉树,仅缺最下层右侧)
- 遍历★★★:前序(根左右)、中序(左根右)、后序(左右根)——由中序+前/后序之一可唯一重建二叉树(高频综合题)
- 二叉树存储结构:顺序存储(数组按下标存,适合完全二叉树);链式存储(二叉链表:data+lchild+rchild,最常用)
- 二叉排序树(BST):左<根<右,中序遍历得升序序列
- 图★:顶点+边;有向图/无向图;度(入度/出度);连通图;存储:邻接矩阵(n×n 矩阵,稠密图,空间 O(n²))/ 邻接表(数组+链表,稀疏图,O(n+e));遍历:深度优先 DFS / 广度优先 BFS
- 查找★★:顺序查找(任意表,ASL 长);折半查找(二分查找):要求有序 + 顺序存储,mid=(low+high)/2,比较次数 ⌈log₂(n+1)⌉(⚠ 两个前提条件是高频判断)
- 排序★★★:
| 算法 | 平均复杂度 | 稳定性 | 要点 |
|---|---|---|---|
| 冒泡排序 | O(n²) | 稳定 | 相邻比较交换,每趟最大沉底 |
| 简单选择排序 | O(n²) | 不稳定 | 每趟选最小放前 |
| 直接插入排序 | O(n²) | 稳定 | 把元素插入前面有序区 |
| 快速排序 | O(nlog₂n) | 不稳定 | 基准分区,平均最快 |
| 堆排序 | O(nlog₂n) | 不稳定 | 建堆+调整 |
| 归并排序 | O(nlog₂n) | 稳定 | 两两合并 |
2.5 软件工程基础 ★★
- 软件工程:用工程化方法开发维护软件(应对"软件危机")
- 软件生命周期★★:问题定义→可行性研究→需求分析→软件设计(总体/概要设计+详细设计)→编码→软件测试→运行维护(维护是持续时间最长、花费最高的阶段)
- 结构化设计方法:自顶向下、逐步求精、模块化
- 总体设计(概要设计):模块划分、模块调用关系("做什么"结构)
- 详细设计:模块内部算法与数据结构("怎么做")
- 模块独立性好 = 高内聚、低耦合 ★★
- 面向对象方法(OOA 分析 / OOD 设计)★★:类(抽象模板)/对象(实例);三大特性:封装、继承、多态;UML统一建模语言(详见技能三)
- 软件测试★★★:
- 目的:发现错误(不能证明无错)
- 白盒测试:看代码内部逻辑——逻辑覆盖(语句/判定/条件/路径覆盖)
- 黑盒测试:只看功能输入输出——等价类划分、边界值分析
- 步骤:单元测试→集成测试→确认测试(验证)→系统测试;α 测试(用户在开发环境)/β 测试(用户在实际环境)
- 程序调试:定位并改正错误;静态调试(不运行:走查、代码审查)/ 动态调试(运行:断点、单步、打印中间结果)