2025暑假CSP笔试笔记

计算机基础知识

计算机概述

1.计算机发展的五个阶段划分

计算机基础知识 - 图1

2.冯·诺依曼计算机体系

冯诺伊曼提出计算机硬件设备由存储器、运算器、控制器、输入设备和输出设备5部分组成(如下图所示),并由总线连接。总线包括地址总线、数据总线、控制总线。 计算机基础知识 - 图2 1946年,世界上第一台电子计算机ENIAC在美国宾夕法尼亚大学诞生。

冯诺依曼的存储程序思想

存储+数据

3.图灵

图灵:被称为“人工智能之父”,提出了一种判定机器是否具有智能的实验方法,即图灵实验。此外,图灵提出的著名的图灵机模型为现代计算机的逻辑工作方式奠定了基础。

4.计算机的应用

1.数值计算 2.数据和信息处理 3.过程控制 4.计算机辅助系统 5.人工智能

计算机系统的基本结构

1.存储器

计算机基础知识 - 图3

2.总线结构

按照总线上传输信息的不同,总线可以分为数据总线(DB),地址总线(AB)和控制总线(CB)三种。

1.数据总线

用来传送数据信息,它主要连接了CPU与各个部件,是它们之间交换信息的通路。

2.地址总线

用来传送地址信息。CPU通过地址总线中传送的地址信息访问存储器,通常是单向的。

3.控制总线

用来传送控制信号,以协调各部件之间的操作。

3.主要的性能指标

1.字长 2.运算速度 3.主频 4.内存容量

计算机软件系统

计算机软件分为系统软件和应用软件。

计算机语言

低级语言

低级语言依赖于硬件,可读性和可移植性差。

高级语言

1.编译型语言;2.解释型语言 计算机基础知识 - 图4 高级语言是一种独立于机器的语言,从解决问题方式分为面向过程和面向对象语言。

面向过程语言

自定往下逐步求精,最重要的是模块化的思维方法。

面向对象语言

把事物抽相成类,在实例化对象,对象包括属性与行为。

先有面向过程再有面向对象。 Fortran是第一个高级语言,Smalltalk是第一个面向对象的语言。

计算机进制与转换

一、常见的进制

  1. 十进制(Decimal)
    • 基数为10,使用0~9十个数字。
    • 示例:123.45 = 1×10² + 2×10¹ + 3×10⁰ + 4×10⁻¹ + 5×10⁻²
  2. 二进制(Binary)
    • 基数为2,使用0和1两个数字。
    • 计算机内部使用二进制,因为二进制状态(0和1)易于用物理设备表示(如开和关,高电平和低电平)。
    • 示例:101.11(二进制) = 1×2² + 0×2¹ + 1×2⁰ + 1×2⁻¹ + 1×2⁻² = 5.75(十进制)
  3. 八进制(Octal)
    • 基数为8,使用0~7八个数字。
    • 示例:123.4(八进制) = 1×8² + 2×8¹ + 3×8⁰ + 4×8⁻¹ = 83.5(十进制)
  4. 十六进制(Hexadecimal)
    • 基数为16,使用0~9和A~F(或a~f)表示,其中A=10,B=11,C=12,D=13,E=14,F=15。
    • 在计算机中常用于简化二进制表示(因为与二进制转换方便)。
    • 示例:1A.8(十六进制) = 1×16¹ + 10×16⁰ + 8×16⁻¹ = 26.5(十进制)

      二、为什么计算机使用二进制?

  • 物理实现容易:只需要两种稳定状态的物理器件(如开关、电压的高低),抗干扰能力强。
  • 运算规则简单:二进制的加、减、乘、除等运算规则比十进制简单得多,容易用数字电路实现。
  • 逻辑运算方便:可以方便地用二进制数的位来表示逻辑真和假,进行逻辑运算。

    三、进制转换

    1. 其他进制转十进制(按权展开)
    • 公式:将一个进制数按权展开相加,权重为基数的幂次(从个位开始,整数部分为0次幂,向左递增;小数部分为负幂次,向右递减)。
    • 示例
      • 二进制数 1011.101 → 1×2³ + 0×2² + 1×2¹ + 1×2⁰ + 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 11.625(十进制)
      • 八进制数 57.6 → 5×8¹ + 7×8⁰ + 6×8⁻¹ = 47.75(十进制)
      • 十六进制数 2F.8 → 2×16¹ + 15×16⁰ + 8×16⁻¹ = 47.5(十进制)
        2. 十进制转其他进制
    • 整数部分:除基取余法(从下往上取余数) 步骤:用十进制数不断除以目标基数,直到商为0,余数从下往上排列。
    • 小数部分:乘基取整法(从上往下取整数部分) 步骤:用十进制小数部分不断乘以目标基数,直到积的小数部分为0或达到所需精度,每次取乘积的整数部分,从上往下排列。
    • 示例
      • 将十进制数 25.375 转换为二进制:
        • 整数部分25:25 ÷ 2 = 12 余1 ↑
          1. 12 ÷ 2 = 6 0
          2. 6 ÷ 2 = 3 0
          3. 3 ÷ 2 = 1 1
          4. 1 ÷ 2 = 0 1 所以整数部分为 `11001`
        • 小数部分0.375:0.375 × 2 = 0.75 → 整数部分0
          1. 0.75 × 2 = 1.5 整数部分1
          2. 0.5 × 2 = 1.0 整数部分1 所以小数部分为 `.011`
        • 因此 25.375 = 11001.011(二进制)
      • 将十进制数 100 转换为十六进制: 100 ÷ 16 = 6 余4(低位) 6 ÷ 16 = 0 余6(高位) 因此为 64(十六进制)
        3. 二进制与八进制、十六进制的转换
    • 二进制转八进制:将二进制数从小数点开始,分别向左(整数部分)和向右(小数部分)每3位一组分组,不足3位的用0补齐,然后每组二进制数转换为对应的八进制数。
      • 示例:11010111.1101(二进制) 整数部分:分组(011, 010, 111)注意:最高位补0 → 3,2,7 → 327(八进制) 小数部分:分组(110, 100)最低位补0 → 6,4 → .64(八进制) 所以整体为 327.64(八进制)
    • 八进制转二进制:将每一位八进制数转换为3位二进制数(不足3位在高位补0),然后拼接起来。
      • 示例:65.4(八进制)→ 6→110, 5→101, 4→100 → 110101.100(二进制)
    • 二进制转十六进制:每4位一组分组。
      • 示例:11101011.101101(二进制) 整数部分:分组(1110, 1011)→ E, B → EB(十六进制) 小数部分:分组(1011, 0100)注意:最低位补0 → B, 4 → .B4(十六进制) 所以整体为 EB.B4(十六进制)
    • 十六进制转二进制:将每一位十六进制数转换为4位二进制数,然后拼接。
      • 示例:A3.5C(十六进制)→ A→1010, 3→0011, 5→0101, C→1100 → 10100011.01011100(二进制)

        四、小结

  • 计算机使用二进制作为基础。
  • 理解不同进制的表示方法(权值)。
  • 掌握不同进制之间的转换方法:
    • 其他进制转十进制:按权展开。
    • 十进制转其他进制:整数部分除基取余,小数部分乘基取整。
    • 二进制与八进制、十六进制之间的快速转换:分组法。

      信息编码

      一:认识计算机种的信息

      1.什么是信息?
  • 信息就是计算机能理解的各种数据
  • 例子:文字、数字、图片、声音
    2.计算机如何表示信息?
  • 计算机只认识0和1
  • 所有信息最终都变成0和1的组合

    二:数字的编码表示

    1.十进制与二进制
  • 十进制:我们平时用的0-9
  • 二进制:计算机用的0和1
    2.数字转换小游戏
    1. 1. 十进制 | 二进制
    2. 2. 0 | 0
    3. 3. 1 | 1
    4. 4. 2 | 10
    5. 5. 3 | 11
    6. 6. 4 | 100

    三:字母的编码表示

    1.ASCII码表
  • 每个字母对应一个数字
  • 例如:A→65,B→66
    2.简单C++代码演示
    1. #include <iostream>
    2. using namespace std;
    3. int main() {
    4. char letter = 'A';
    5. cout << "字母 " << letter << " 的编码是: " << (int)letter;
    6. return 0;
    7. }

    四:颜色的编码表示

    1.RGB颜色
  • 红(Red)、绿(Green)、蓝(Blue)混合
  • 每种颜色用0-255的数字表示
    2.颜色编码练习
    1. 红色:RGB(255,0,0)
    2. 绿色:RGB(0,255,0)
    3. 蓝色:RGB(0,0,255)
    4. 黄色:RGB(255,255,0)

    五:综合练习

    1.编码转换挑战
  • 把名字转换成ASCII码
  • 用二进制表示年龄
    2.简单C++程序
    1. #include <iostream>
    2. using namespace std;
    3. int main() {
    4. string name;
    5. cout << "输入你的名字: ";
    6. cin >> name;
    7. cout << "名字的ASCII码: ";
    8. for(char c : name) {
    9. cout << (int)c << " ";
    10. }
    11. return 0;
    12. }

    原码、反码和补码

    真值

    机器数的第一位是符号位(1是负数,0,是正数),后边才是真正的数值

    原码

    原码就是符号位加上真值的绝对值,即用第一位表示符号,其余位表式值

    反码

    正数的反码是其本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反

    补码

    补码的表示方式是: 正数的补码就是其本身 负数的补码是在其原码的基础上,符号位不变,其余各位取反,最后+1。(即在反码的基础上+1)

    计算机网络

    网络主要功能

    1.资源共享 2.信息传输 3.分布式处理 4.综合信息服务

    网络的分类

    1.按网络的地理范围分类
    局域网(LAN)、域域网(MAN)、广域网(WAN)
    2.按网络的拓扑结构分类
    网络按拓扑结构分为星型、总线型、环形、树形、网状型

    网络的体系结构

    计算机基础知识 - 图5 七层网络模型 计算机基础知识 - 图6

    计算机安全

    计算机病毒特征
  • 繁殖性
  • 破坏性
  • 传染性
  • 潜伏性
  • 隐蔽性
  • 可触法型