2025暑假csp笔试笔记

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

第一章:计算机基础知识 - 图1

冯诺依曼计算机体系

第一章:计算机基础知识 - 图2

程序+数据

计算的组成

1、存储器

第一章:计算机基础知识 - 图3

2、总线分类

计算机语言

1、低级语言

2、高级语言

第一章:计算机基础知识 - 图4


计算机进制与转换

一、常见的进制

  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. 将二进制数 10110.101 转换为十进制数。
  2. 将十进制数 37.75 转换为二进制数。
  3. 将八进制数 123 转换为十六进制数(通过二进制中转)。
  4. 将十六进制数 1A.2F 转换为八进制数(通过二进制中转)。
  5. 将十进制数 100 分别转换为二进制、八进制和十六进制。

学生笔记原文:

  1. # 计算机进制与转换
  2. ## 一、常见的进制
  3. 1. **十进制(Decimal)**:
  4. - 基数为10,使用0~9十个数字。
  5. - 示例:123.45 = 1×10² + 2×10¹ + 3×10 + 4×10⁻¹ + 5×10⁻²
  6. 2. **二进制(Binary)**:
  7. - 基数为2,使用01两个数字。
  8. - 计算机内部使用二进制,因为二进制状态(01)易于用物理设备表示(如开和关,高电平和低电平)。
  9. - 示例:101.11(二进制) = 1×2² + 0×2¹ + 1×2 + 1×2⁻¹ + 1×2⁻² = 5.75(十进制)
  10. 3. **八进制(Octal)**:
  11. - 基数为8,使用0~7八个数字。
  12. - 示例:123.4(八进制) = 1×8² + 2×8¹ + 3×8 + 4×8⁻¹ = 83.5(十进制)
  13. 4. **十六进制(Hexadecimal)**:
  14. - 基数为16,使用0~9A~F(或a~f)表示,其中A=10B=11C=12D=13E=14F=15
  15. - 在计算机中常用于简化二进制表示(因为与二进制转换方便)。
  16. - 示例:1A.8(十六进制) = 1×16¹ + 10×16 + 8×16⁻¹ = 26.5(十进制)
  17. ## 二、为什么计算机使用二进制?
  18. - 物理实现容易:只需要两种稳定状态的物理器件(如开关、电压的高低),抗干扰能力强。
  19. - 运算规则简单:二进制的加、减、乘、除等运算规则比十进制简单得多,容易用数字电路实现。
  20. - 逻辑运算方便:可以方便地用二进制数的位来表示逻辑真和假,进行逻辑运算。
  21. ## 三、进制转换
  22. ### 1. 其他进制转十进制(按权展开)
  23. - **公式**:将一个进制数按权展开相加,权重为基数的幂次(从个位开始,整数部分为0次幂,向左递增;小数部分为负幂次,向右递减)。
  24. - **示例**:
  25. - 二进制数 `1011.101` 1×2³ + 0×2² + 1×2¹ + 1×2 + 1×2⁻¹ + 0×2⁻² + 1×2⁻³ = 11.625(十进制)
  26. - 八进制数 `57.6` 5×8¹ + 7×8 + 6×8⁻¹ = 47.75(十进制)
  27. - 十六进制数 `2F.8` 2×16¹ + 15×16 + 8×16⁻¹ = 47.5(十进制)
  28. ### 2. 十进制转其他进制
  29. - **整数部分:除基取余法**(从下往上取余数)
  30. 步骤:用十进制数不断除以目标基数,直到商为0,余数从下往上排列。
  31. - **小数部分:乘基取整法**(从上往下取整数部分)
  32. 步骤:用十进制小数部分不断乘以目标基数,直到积的小数部分为0或达到所需精度,每次取乘积的整数部分,从上往下排列。
  33. - **示例**:
  34. - 将十进制数 `25.375` 转换为二进制:
  35. - 整数部分2525 ÷ 2 = 12 1
  36. 12 ÷ 2 = 6 0
  37. 6 ÷ 2 = 3 0
  38. 3 ÷ 2 = 1 1
  39. 1 ÷ 2 = 0 1 所以整数部分为 `11001`
  40. - 小数部分0.3750.375 × 2 = 0.75 整数部分0
  41. 0.75 × 2 = 1.5 整数部分1
  42. 0.5 × 2 = 1.0 整数部分1 所以小数部分为 `.011`
  43. - 因此 `25.375 = 11001.011`(二进制)
  44. - 将十进制数 `100` 转换为十六进制:
  45. 100 ÷ 16 = 6 4(低位)
  46. 6 ÷ 16 = 0 6(高位) 因此为 `64`(十六进制)
  47. ### 3. 二进制与八进制、十六进制的转换
  48. - **二进制转八进制**:将二进制数从小数点开始,分别向左(整数部分)和向右(小数部分)每3位一组分组,不足3位的用0补齐,然后每组二进制数转换为对应的八进制数。
  49. - 示例:`11010111.1101`(二进制)
  50. 整数部分:分组(011, 010, 111)注意:最高位补0 3,2,7 327(八进制)
  51. 小数部分:分组(110, 100)最低位补0 6,4 .64(八进制)
  52. 所以整体为 `327.64`(八进制)
  53. - **八进制转二进制**:将每一位八进制数转换为3位二进制数(不足3位在高位补0),然后拼接起来。
  54. - 示例:`65.4`(八进制)→ 6110, 5101, 4100 `110101.100`(二进制)
  55. - **二进制转十六进制**:每4位一组分组。
  56. - 示例:`11101011.101101`(二进制)
  57. 整数部分:分组(1110, 1011)→ E, B `EB`(十六进制)
  58. 小数部分:分组(1011, 0100)注意:最低位补0 B, 4 `.B4`(十六进制)
  59. 所以整体为 `EB.B4`(十六进制)
  60. - **十六进制转二进制**:将每一位十六进制数转换为4位二进制数,然后拼接。
  61. - 示例:`A3.5C`(十六进制)→ A1010, 30011, 50101, C1100 `10100011.01011100`(二进制)
  62. ## 四、小结
  63. - 计算机使用二进制作为基础。
  64. - 理解不同进制的表示方法(权值)。
  65. - 掌握不同进制之间的转换方法:
  66. - 其他进制转十进制:按权展开。
  67. - 十进制转其他进制:整数部分除基取余,小数部分乘基取整。
  68. - 二进制与八进制、十六进制之间的快速转换:分组法。

信息编码

一:认识计算机中的信息

1. 什么是信息?

  • 信息就是计算机能理解的各种数据
  • 例子:文字、数字、图片、声音

2. 计算机如何表示信息?

  • 计算机只认识0和1
  • 所有信息最终都变成0和1的组合

二:数字的编码表示

1. 十进制与二进制

  • 十进制:我们平时用的0-9
  • 二进制:计算机用的0和1

2. 数字转换小游戏

  1. 十进制 | 二进制
  2. 0 | 0
  3. 1 | 1
  4. 2 | 10
  5. 3 | 11
  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. }

网络的体系结构

第一章:计算机基础知识 - 图5

七层网络模型

第一章:计算机基础知识 - 图6

第一课:认识计算机网络

  1. 什么是计算机网络?

    • 电脑之间的连接,像”信息高速公路”
    • 比喻:像小朋友之间传纸条
  2. 网络的作用:

    • 分享信息(如看视频、玩游戏)
    • 共享资源(如打印机)
    • 远程交流(如视频通话)

第二课:网络结构基础

  1. 网络拓扑结构:

    1. // 模拟星型网络
    2. #include <iostream>
    3. using namespace std;
    4. int main() {
    5. cout << "中心节点:路由器" << endl;
    6. cout << "├─ 电脑A" << endl;
    7. cout << "├─ 电脑B" << endl;
    8. cout << "└─ 打印机" << endl;
    9. return 0;
    10. }
  2. 常见网络结构:

    • 星型结构(家庭WiFi)
    • 总线结构(老式学校机房)
    • 环形结构(少见)

第三课:网络设备与连接

  1. 主要网络设备:

    • 路由器:”网络交警”
    • 交换机:”网络接线员”
    • 网卡:电脑的”网络耳朵”
  2. 连接方式:

    1. // 模拟网络连接检测
    2. #include <iostream>
    3. using namespace std;
    4. int main() {
    5. bool isConnected = true;
    6. if(isConnected) {
    7. cout << "✓ 网络连接成功" << endl;
    8. } else {
    9. cout << "✗ 请检查网线或WiFi" << endl;
    10. }
    11. return 0;
    12. }

第四课:互联网是如何工作的

  1. IP地址:电脑的”门牌号”

    1. // 显示本机IP
    2. #include <iostream>
    3. using namespace std;
    4. int main() {
    5. cout << "本机IP可能是: 192.168.1.100" << endl;
    6. cout << "网站IP示例: 142.250.190.46 (google)" << endl;
    7. return 0;
    8. }
  2. DNS:网络”电话簿”

    • 把 www.example.com 变成数字地址

第五课:网络协议

  1. HTTP/HTTPS协议:

    1. // 模拟浏览器请求
    2. #include <iostream>
    3. using namespace std;
    4. int main() {
    5. cout << "GET / HTTP/1.1" << endl;
    6. cout << "Host: www.hnai.net" << endl;
    7. cout << "正在获取椰程网站首页..." << endl;
    8. return 0;
    9. }
  2. TCP/IP协议组:

    • 像寄信的四个步骤:
      1. 写信(应用层)
      2. 装信封(传输层)
      3. 写地址(网络层)
      4. 投递(链路层)

第六课:网络安全

  1. 安全小贴士:

    • 不点击陌生链接
    • 设置强密码 ```cpp // 密码强度检测

      include

      using namespace std;

    int main() {

    1. string password;
    2. cout << "创建密码(至少8位):";
    3. cin >> password;
    4. if(password.length() >= 8) {
    5. cout << "✓ 密码强度足够" << endl;
    6. } else {
    7. cout << "⚠ 密码太短不安全" << endl;
    8. }
    9. return 0;

    } ```

第七课:动手实验

  1. 简易Ping程序: ```cpp

    include

    include

    using namespace std;

int main() { cout << “正在ping www.hnai.net …” << endl; cout << “来自 203.0.113.1 的回复: 时间=32ms” << endl; cout << “来自 203.0.113.1 的回复: 时间=28ms” << endl; return 0; }

  1. 2. 网络状态监测器:
  2. ```cpp
  3. #include <iostream>
  4. using namespace std;
  5. int main() {
  6. int downloadSpeed = 10 + rand() % 50;
  7. cout << "当前下载速度: " << downloadSpeed << " Mbps" << endl;
  8. if(downloadSpeed > 30) {
  9. cout << "网络状态优秀" << endl;
  10. } else if(downloadSpeed > 10) {
  11. cout << "网络状态一般" << endl;
  12. } else {
  13. cout << "网络状态较差" << endl;
  14. }
  15. return 0;
  16. }

第八课:未来网络技术

  1. 5G网络:

    • 更快的速度
    • 更低的延迟
  2. 物联网:

    1. // 模拟智能家居
    2. #include <iostream>
    3. using namespace std;
    4. int main() {
    5. cout << "智能灯泡: 已连接网络" << endl;
    6. cout << "请输入指令(开/关):";
    7. string cmd;
    8. cin >> cmd;
    9. if(cmd == "开") {
    10. cout << "灯泡已点亮" << endl;
    11. } else {
    12. cout << "灯泡已关闭" << endl;
    13. }
    14. return 0;
    15. }