CPP-L1备课记录

Preface

为帮助7 ~ 8岁龄儿童学习C++,本章节尽量使用儿童可以理解的语言和例子,对计算机的组成、工作原理进行粗略的讲解。

对于单片机原理,汇编语言,操作系统,通信原理,概不涉及。

对于数字/逻辑电路,以能够理解2进制的加减运算,和进行逻辑判断为目的进行简单扼要的说明。

讲解过程切记要举例合适,不用成年人的思维去要求儿童的理解能力,更不要以计算机专业的知识储备去要求孩子。切记:兴趣比技能重要

0. 预备知识-计算机基础

0.1. 协议

协议 = 约定,大家都要遵守,才能达到目标。为了方便理解,本文约定:

约定1:核心知识这样表示:

这种灰色的框里面是核心知识

约定2:示例代码这样表示:

printf("hello world!"); //这种黑色框里面是示例代码

约定3:例题这样表示:

  • 例:这里是例题

约定4:备注这样表示:

备注:这里是备注内容

约定5:参考文献按如下方式表示,其中无法确定的信息将被省略:

【参考文献】:
[引用编号]. 作者. 文章标题[文章类型]. 发行商, 发行日期.

0.2. 二进制

逢二进位

红绿灯表示法:💔代表0,💚代表1

  • 例0-2-1:2+1=3
10进制2进制红绿灯表示法
A200000010💔💔💔💔💔💔💚💔
B100000001💔💔💔💔💔💔💔💚
加法结果300000011💔💔💔💔💔💔💚💚
  • 例0-2-2:2+2=4
10进制2进制红绿灯表示法
A200000010💔💔💔💔💔💔💚💔
B200000010💔💔💔💔💔💔💚💔
加法结果400000100💔💔💔💔💔💚💔💔

2的N次幂(背熟8位内的数字)

位号87654321
幂次76543210
代表的值(10进制)1286432168421
  • 例0-2-3:255怎么表示?
    答:因为255=128+64+32+16+8+4+2+1,所以在计算机中可以表示为11111111
位号87654321
代表的值(10进制)1286432168421
红绿灯表示法💚💚💚💚💚💚💚💚
二进制表示11111111

8位=1字节,1个字节无符号取值范围是0 ~ 255共计256个数字,有符号数是-128 ~ 127共计256个数字

0.3. 逻辑门

  • 与门真值表
A=0A=1
B=000
B=101
  • 或门真值表
A=0A=1
B=001
B=111
  • 非门真值表
A=0A=1
10

0.4. 内存/寄存器

地址是“门牌号”,让我们能够根据“门牌号”找到数字的“家”

高低位:左侧是高位,右侧是地位

寄存器和内存都可以存放东西,寄存器快而小,内存慢而大,因为寄存器在CPU内部

索引跟幂次一样从0开始

地址编号HGFEDCBA
高低位最高位第7位第6位第5位第4位第3位第2位最低位
索引76543210
地址里面放东西01011010
地址里面放东西的红绿灯表示法💔💚💔💚💚💔💚💔

0.5. CPU指令集

不同的CPU有自己的逻辑门实现,以及不同的编程“约定”。

在大部分CPU的指令集中,mov(英文move)是“存放”指令,add(英文addition)是“加法”指令,我们约定好,如果要使用这两个命令,需要使用如下格式:

mov 要存放数字的寄存器地址 要存放的“东西”
add 加数1所在的地址 加数2
  • 例0-5-1:根据“约定”,当我们需要计算机计算8+19时,汇编语言源代码为:
mov AX 8 // 把数字8放入寄存器AX
add AX 19 // 把寄存器AX里的数字+19,结果还是放在AX中

0.6. 有符号和无符号二进制加减法

正数的绝对值是它本身,负数的绝对值是去掉负号,在笛卡尔平面直角坐标系中绝对值可以表示“距离”的概念

  • 例0-6-1:写出3,-7的绝对值
绝对值
33
-77

最高位“约定”为符号位

在计算机中表示一个有符号数,使用0代表正数,1代表负数:

  • 例0-6-2:计算机如何表示-8?
位号87654321
红绿灯表示法💚💔💔💔💚💔💔💔
有符号2进制10001000

问题: 在有符号的表示方法中,8位二进制最大能表示的正数是多少?

源码、反码、补码

  • 例0-6-3:十进制数8的原码是多少?
    答:00001000

反码是按位取反

  • 例0-6-4:写出十进制数8的反码
十进制数源码反码
80000100011110111

补码=负数的绝对值的原码按位取反再加1

  • 例0-6-5:写出十进制数-8的补码

第一步:-8的绝对值是8
第二步:8的原码=0 0 0 0 1 0 0 0
第三步:8的反码=1 1 1 1 0 1 1 1
第四步:反码加1=1 1 1 1 1 0 0 0

答:-8的补码是1 1 1 1 1 0 0 0

问:如果+1后进位变成9位了怎么办?
答:溢出位不要了,我们只有8位可用(目前我们只看8位,也就是1个字节)

计算机减法:A-B = A + (-B) = A的二进制源码 + B的补码(溢出位丢弃)

  • 例0-6-6:计算机计算64-8

第一步:64的原码=0 1 0 0 0 0 0 0
第二步:-8的补码=1 1 1 1 1 0 0 0
第三步:加法结果=0 0 1 1 1 0 0 0

操作数原码/补码
64    0 1 0 0 0 0 0 0
-8    1 1 1 1 1 0 0 0
求和(1) 0 0 1 1 1 0 0 0

00111000转10验算结果=32+16+8=56

【参考文献】:
[1]. 偶尔有点小迷糊. 『教程』补码怎么来的?. 哔哩哔哩, 2021-05-14.

0.7. 小学数学四则运算

计算机中的常见运算符号:
加 +
减 -
乘 *
除 /
取模 %

取模运算是求两个数相除的余数

0.8. 计算机及编程语言的进化史

计算机及编程的雏形

计算机代际分类

电子管 -> 晶体管 -> 中小规模集成电路 ->大/超大规模集成电路

  • 第一台电子管计算机:1946年2月14日,ENIAC在美国宾夕法尼亚大学诞生

【参考】:
[6]. 程序员客栈. 计算机简史:所有这些时刻,终将流失在时光中,一如眼泪消失在雨里. 知乎, 2022/11/02.
在这里插入图片描述

编程语言进化过程

二进制 -> 汇编语言 -> 高级编程语言

存储介质进化过程

机械存储(打孔纸带)-> 磁存储时代(磁环、磁带) -> 硬盘时代 -> 闪存时代

【参考】:
[7]. 智能制造. 数据存储技术的进化和跃迁. 知乎, 2023/09/22.

0.9. 编译原理(简化版)

编程语言 -> 编译器 -> 目标代码(CPU指令/集) -> 链接器(连接启动代码和库代码) -> 可执行程序 -> 运行

0.10. ASCII码表

由前面的学习内容可知,8位二进制有符号数最大代表的正整数是127,所以可定义计算机使用的字符如下:

标准 ASCII 码对照表(十进制0~31和127是控制字符)
二进制 八进制 十进制 十六进制 字符/缩写 解释
00000000 000 0 00 NUL (NULL) 空字符
00000001 001 1 01 SOH (Start Of Headling) 标题开始
00000010 002 2 02 STX (Start Of Text) 正文开始
00000011 003 3 03 ETX (End Of Text) 正文结束
00000100 004 4 04 EOT (End Of Transmission) 传输结束
00000101 005 5 05 ENQ (Enquiry) 请求
00000110 006 6 06 ACK (Acknowledge) 回应/响应/收到通知
00000111 007 7 07 BEL (Bell) 响铃
00001000 010 8 08 BS (Backspace) 退格
00001001 011 9 09 HT (Horizontal Tab) 水平制表符
00001010 012 10 0A LF/NL(Line Feed/New Line) 换行键
00001011 013 11 0B VT (Vertical Tab) 垂直制表符
00001100 014 12 0C FF/NP (Form Feed/New Page) 换页键
00001101 015 13 0D CR (Carriage Return) 回车键
00001110 016 14 0E SO (Shift Out) 不用切换
00001111 017 15 0F SI (Shift In) 启用切换
00010000 020 16 10 DLE (Data Link Escape) 数据链路转义
00010001 021 17 11 DC1/XON
(Device Control 1/Transmission On)
设备控制1/传输开始
00010010 022 18 12 DC2 (Device Control 2) 设备控制2
00010011 023 19 13 DC3/XOFF
(Device Control 3/Transmission Off)
设备控制3/传输中断
00010100 024 20 14 DC4 (Device Control 4) 设备控制4
00010101 025 21 15 NAK (Negative Acknowledge) 无响应/非正常响应/拒绝接收
00010110 026 22 16 SYN (Synchronous Idle) 同步空闲
00010111 027 23 17 ETB (End of Transmission Block) 传输块结束/块传输终止
00011000 030 24 18 CAN (Cancel) 取消
00011001 031 25 19 EM (End of Medium) 已到介质末端/介质存储已满/介质中断
00011010 032 26 1A SUB (Substitute) 替补/替换
00011011 033 27 1B ESC (Escape) 逃离/取消
00011100 034 28 1C FS (File Separator) 文件分割符
00011101 035 29 1D GS (Group Separator) 组分隔符/分组符
00011110 036 30 1E RS (Record Separator) 记录分离符
00011111 037 31 1F US (Unit Separator) 单元分隔符
00100000 040 32 20 (Space) 空格
00100001 041 33 21 !  
00100010 042 34 22 "  
00100011 043 35 23 #  
00100100 044 36 24 $  
00100101 045 37 25 %  
00100110 046 38 26 &  
00100111 047 39 27 '  
00101000 050 40 28 (  
00101001 051 41 29 )  
00101010 052 42 2A *  
00101011 053 43 2B +  
00101100 054 44 2C ,  
00101101 055 45 2D -  
00101110 056 46 2E .  
00101111 057 47 2F /  
00110000 060 48 30 0  
00110001 061 49 31 1  
00110010 062 50 32 2  
00110011 063 51 33 3  
00110100 064 52 34 4  
00110101 065 53 35 5  
00110110 066 54 36 6  
00110111 067 55 37 7  
00111000 070 56 38 8  
00111001 071 57 39 9  
00111010 072 58 3A :  
00111011 073 59 3B ;  
00111100 074 60 3C <  
00111101 075 61 3D =  
00111110 076 62 3E >  
00111111 077 63 3F ?  
01000000 100 64 40 @  
01000001 101 65 41 A  
01000010 102 66 42 B  
01000011 103 67 43 C  
01000100 104 68 44 D  
01000101 105 69 45 E  
01000110 106 70 46 F  
01000111 107 71 47 G  
01001000 110 72 48 H  
01001001 111 73 49 I  
01001010 112 74 4A J  
01001011 113 75 4B K  
01001100 114 76 4C L  
01001101 115 77 4D M  
01001110 116 78 4E N  
01001111 117 79 4F O  
01010000 120 80 50 P  
01010001 121 81 51 Q  
01010010 122 82 52 R  
01010011 123 83 53 S  
01010100 124 84 54 T  
01010101 125 85 55 U  
01010110 126 86 56 V  
01010111 127 87 57 W  
01011000 130 88 58 X  
01011001 131 89 59 Y  
01011010 132 90 5A Z  
01011011 133 91 5B [  
01011100 134 92 5C \  
01011101 135 93 5D ]  
01011110 136 94 5E ^  
01011111 137 95 5F _  
01100000 140 96 60 `  
01100001 141 97 61 a  
01100010 142 98 62 b  
01100011 143 99 63 c  
01100100 144 100 64 d  
01100101 145 101 65 e  
01100110 146 102 66 f  
01100111 147 103 67 g  
01101000 150 104 68 h  
01101001 151 105 69 i  
01101010 152 106 6A j  
01101011 153 107 6B k  
01101100 154 108 6C l  
01101101 155 109 6D m  
01101110 156 110 6E n  
01101111 157 111 6F o  
01110000 160 112 70 p  
01110001 161 113 71 q  
01110010 162 114 72 r  
01110011 163 115 73 s  
01110100 164 116 74 t  
01110101 165 117 75 u  
01110110 166 118 76 v  
01110111 167 119 77 w  
01111000 170 120 78 x  
01111001 171 121 79 y  
01111010 172 122 7A z  
01111011 173 123 7B {  
01111100 174 124 7C |  
01111101 175 125 7D }  
01111110 176 126 7E ~  
01111111 177 127 7F DEL (Delete) 删除

【参考文献】:
[8]. 偶尔有点小迷糊. 文字频频乱码 这背后是显卡的扭曲还是规则的沦丧?. 哔哩哔哩, 2020-06-24

1. 学习内容

1.1. 创建项目

文件-》新建-》项目

1.2. 创建程序入口

项目管理-》main.cpp

1.3. 快捷键

IDE中的一级快捷键要按ALT+键位名称,再按二级快捷键使用对应功能

  • 例:创建新项目:ALT+F(文件),N(新建),P(项目)

编写代码过程中,常用的快捷键:

快捷键作用
CTRL+S保存当前编辑的文件
CTRL+W关闭当前编辑的文件
CTRL+C复制
CTRL+V粘贴
CTRL+Z撤销
CTRL+SHIFT+Z重做
F9编译
F10运行
F5调试
F7(调试过程中)下一步

1.4. 编写代码

  • 让计算机给我们输出:hello world!
  • 让计算机帮我们计算加减乘除

1.5. 存储结构

  • 浮点数的存储
    在这里插入图片描述

【参考】:
[9]. IEEE. 754-2019 - IEEE Standard for Floating-Point Arithmetic[S]. ISBN:978-1-5044-5924-2, DOI: 10.1109/IEEESTD.2019.8766229, 22 July 2019.
[10]. ayusharma0698. IEEE Standard 754 Floating Point Numbers. geeksforgeeks, 16 Mar, 2020
[11]. 蒋佳诚. 单精度浮点数(float32)存储与表示方式. 知乎, 2023/08/15.
[12]. free-coder. float是如何在计算机中存储的. 哔哩哔哩, 2020/02/15.

1.6. 数据类型

为了方便理解,我们对照数学中的概念:

C/C++数据类型数学定义
整型整数
浮点型实数

备注:实数=有理数(整数(自然数(正整数+0)+负整数)+不循环小数+无限循环小数)+ 无理数

1.7. 变量、函数的声明

定义变量:

数据类型 变量名称 = 值

定义函数:

返回值的类型 函数的名称 (函数的参数列表,参数中间用“,”隔开) {
函数的内容
}

2. Q&A of L1

2.1. 计算机在哪?编译输出的结果都是什么意思?

  • 说法一:计算机由控制系统,运算系统,输入输出(IO)系统,存储系统,数据通路(总线)五部分组成;

  • 说法二:计算机由控制系统,运算系统,输入系统(Input),输出系统(Output),存储系统五部分组成;

    再具体一些,就是在物理上,使用不同的材料,实现的逻辑门电路的集群,构成了“计算机”,计算机按照约定的顺序和位置,不停的执行人类的指令。为了让人类能够灵活的,自由的使用计算机内部的各种器件,人类编写了一个庞大的软件,称为“操作系统”,它负责协调组织计算机的所有“硬件”。

2.2. 什么是数据的类型?

  • 数学里的数据类型:

正整数:1………………999
自然数:0,1………………999
整数:正整数,0,-1(自然数 +负整数)
有理数 = 整数 + 分数/小数(不循环小数+ 无限循环小数)
无理数 = 无限不循环小数
实数 = 有理数 + 无理数
复数 = 实数 + 虚数

  • C++的数据类型:

整数:int
小数:float(比较小的小数) double(比较大的小数)
字符(串):char char* string
布尔类型:true/false 真/假 (记住非0即真)

  • 数据结构:

数组 = 一群数字组成的队列 {1,2,3,4,5…}

2.3. 编写程序的格式:

声明变量和定义函数,都是在告诉计算机,我们需要用到它能提供的某些资源,为了不然计算机误解,所以人类提前约定好了严格的编写格式,编译器也是严格遵循格式进行编译,这其实就是提前约定的好的“协议”,如下格式约定了如何定义变量:

数据类型 变量名称 = 值

例:

int a = 1;

2.4. 要跟计算机说的话可以写在大括号外面吗? 有区别吗?如果有多个大括号呢?

作用域和生命周期

2.5. 为什么要让计算打印的话都要用printf和()和“”呢?结束都要用; 呢?

  • 库的引用

  • 不同数据类型的数据的书写格式及输出占位符; 参数的传递(形参/实参)

  • 注释前面为什么要加/呢?为什么注释错了没关系呢?
    单行注释,多行注释,书写规范

2.6. 变量的使用

变量的赋值

  • 例2-6-1:int a = 9; 是什么意思?
    答:申请一个内存“盒子”,里面放上数字9

其中:
int是让计算机准备一块内存空间
a给这块内存空间起名a
=是让计算机把=后面的值,放入=前面的内存空间中
9是要放入内存的数字
;是告诉计算机,这条指令结束了

变量参与计算

ret = ret * 9;

备注:断点调试可以检查变量的值

下一课:CPP-L2备课记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值