Initial commit: C++ courseware

This commit is contained in:
xiaolinquan committed 2026-11-05 22:51:02 +08:00
commit 4a4ee7c287
1789 files changed
+373489

No files matched your search

@@ -0,0 +1,177 @@
# C++ 基本语法与 Python 的区别
## 第一部分:程序的基本结构
### 1. Python 基础程序 和 C++ 的基础程序
在 Python 中,你想打印一句话,只需要直接写一行代码:
```python
# Python 代码
print("Hello, World!")
```
Python 是**解释型语言**,它从第一行开始直接往下读并执行。
但在 C++ 中,哪怕只是打印一句话,你也需要搭建一个完整的代码框架结构。因为C++ 是**编译型语言**,代码必须先完整翻译成机器码,然后才能运行,以下的代码为 C++ 中 Hello world 程序实现。注:C++代码中 `//` 后的内容表示注释。
```cpp
// C++ 代码的基本框架
#include <iostream>
using namespace std;
int main() {
cout << "Hello, World!" << endl; // 这是注释,用于输出 Hello, world!
return 0;
}
```
### 2. C++ 结构拆解(为什么要有这么多行?)
* `#include <iostream>`:类似于 Python 的 `import`。`iostream` 是“输入输出流”的意思,没有这一行,C++ 连怎么把字显示在屏幕上都不知道,这一行相当于是拿到了 `iostream` 这个工具箱,让它可以获取里面的输出工具。
* `using namespace std;`:声明使用“标准命名空间”。你可以把它理解为告诉 C++:“接下来我用到的一些基础工具,都去标准工具箱(std)里找”。
* `int main() { ... }`:**这是 C++ 最重要的地方,叫做“主函数”**。在 C++ 里,程序永远从 `main` 函数的第一行开始执行。大括号 `{}` 里面的内容,就是要执行的具体指令代码。
* `return 0;`:表示程序正常结束,向操作系统汇报圆满完成了任务,没有错误。
### 3. 两个语法习惯的区别
* **分号 `;` 是结尾**:在 Python 里,换行就代表一句话结束。**在 C++ 里,几乎每一条语句结束时,都必须加上英文分号 `;`。** 忘记写分号是 `python` 使用者在 C++ 里最常犯的错误之一。
* **大括号 `{}` 取代了缩进**:Python 靠严格的缩进来判断代码块。C++ 不管缩进(哪怕你全写在一行它也能运行),C++ 是靠大括号 `{}` 来圈定代码块的。当然,为了人类易读,我们在 C++ 里依然会保持良好的缩进习惯。
---
## 第二部分:变量与数据类型
### 1. 动态类型 和 静态类型
在 Python 里,变量像是一个有弹性的袋子,你往里面装什么,它就是什么:
```python
# Python: 动态类型
age = 18 # 此时是整数
age = "十八" # 突然变成字符串了,Python 完全OK
```
**C++ 是严格的“静态类型”语言**。在 C++ 里,变量更像是一个定制的容器,你在制造(声明)这个容器的时候,**必须提前规定好它只能装什么类型的东西**,而且永远不能变。
那么**在 C++ 定义变量的语法是 `数据类型 变量名 = 初始化值;`**(其中 `= 初始化值` 的部分可以省略不进行初始化)。
```cpp
// C++是静态类型 (必须先写数据类型,再写变量名字,后面可以进行初始化)
int age = 18;
// age = "十八"; // 错误!C++ 会直接报错:不能把文字塞进整数盒子里!
```
### 2. C++ 中最常用的基本数据类型
在 Python 里的类型,在 C++ 里都有对应,但划分得更细:
* **`int`** :整数(例如 `10`, `-5`, `0`)。
* **`double`**:双精度浮点数,也就是小数(例如 `3.14`, `-0.99`)。C++ 中还有一种叫 `float` 的小数,但 `double` 精度更高,更常用。
* **`char`** :单个字符。注意!在 C++ 里,**单字符必须用单引号**(例如 `'A'`, `'?'`),双引号是留给字符串的。
* **`string`**:字符串(例如 `"Hello"`)。需要引入 `#include <string>` 才能使用,并且字符串需要用双引号包裹。
* **`bool`** :布尔值。代表真假。
### 3. 变量的声明与初始化
在 C++ 里,你可以先准备好盒子(声明),以后再往里装东西(赋值):
```cpp
int score; // 声明变量:准备了一个叫 score 的整数盒子
score = 100; // 赋值:把 100 放进去
double price = 9.9; // 声明并同时初始化(推荐这种做法)
```
---
## 第三部分:输入与输出
在 Python 里,我们用 `print()` 输出,用 `input()` 输入。
在 C++ 里,输入输出的概念有点像是一条河流。
### 1. 输出:`cout`
C++的输出是使用 `cout` 配合输出符号 `<<` (像两个向左的箭头,表示把数据流向屏幕)。
```cpp
// Python 的输出语法
# age = 16;
# print("我的年龄是", age)
// 对应 C++ 的实现:
int age = 16;
cout << "我的年龄是 " << age << endl;
```
* 你可以用 `<<` 把很多东西串联起来。
* `endl` (End Line) 表示换行,相当于 Python `print` 默认的换行效果。你也可以在字符串里添加 `\n` 来换行。
### 2. 输入:`cin`
C++的输入是使用 `cin` 配合输入符号 `>>` (箭头向右,表示把从键盘读到的数据流向变量)。
**输入这里 C++ 比 Python 方便一点!**
在 Python 里,`input()` 拿到的永远是字符串,你要用 `int(input())` 强行转换。
但在 C++ 里,因为变量已经提前规定好了类型,`cin` 会**自动**把你的键盘输入转换成合适的类型!
```cpp
// Python 代码:
# age_str = input("请输入年龄: ")
# age = int(age_str)
// C++ 代码:
int age; // 获取输入前,必须先准备好一个空盒子来装这个输入的数据
cout << "请输入年龄: "; // 提示用户
cin >> age; // 程序暂停,等待用户输入,并自动转为整数放进 age 盒子
```
---
## 第四部分:条件判断
条件判断的逻辑在任何编程语言里都是相通的(无非就是如果...就...否则...),主要的区别在于**符号和格式**。
### 1. 结构对比 (`if - elif - else` vs `if - else if - else`)
我们直接看对比。假设我们要编写根据分数判断 优秀、及格、不及格 的三个等级的代码:
**Python 版本:**
```python
score = 85
if score >= 90:
print("优秀")
elif score >= 60:
print("及格")
else:
print("不及格")
```
**C++ 版本:**
```cpp
int score = 85;
// 注意 1:条件必须用圆括号 () 包起来!
// 注意 2:执行的代码块必须用大括号 {} 包起来!
if (score >= 90) {
cout << "优秀" << endl;
}
else if (score >= 60) { // 注意 3:C++ 里没有 elif,必须写完整的 else if
cout << "及格" << endl;
}
else {
cout << "不及格" << endl;
}
```
### 2. 逻辑运算符的变换 (and, or, not)
在 Python 里,判断多个条件时,使用的是英语化的 `and`、`or`、`not`。
在 C++ 里,需要使用数学领域的符号:
* **与 (and) 变成 `&&`**
* **或 (or) 变成 `||`** (竖线符号,通常在回车键上方,按 Shift + \ 打出)
* **非 (not) 变成 `!`**
**举个例子:判断一个人是不是青少年(年龄在 13 到 19 岁之间):**
* Python: `if age >= 13 and age <= 19:` (Python 甚至允许 `if 13 <= age <= 19:`)
* C++: `if (age >= 13 && age <= 19)` (但是C++ **绝对不能**连写,必须用 `&&` 连接两个独立的判断)
### 3. 布尔值的细微差别
* Python 的真假是首字母大写的:`True` / `False`
* C++ 的真假是全小写的:`true` / `false`
---
### **作为有 Python 基础的同学,在写 C++ 时一定要注意以下几个问题:**
1. **分号**:每句话代码都要加上 `;` 。
2. **类型**:要用一个新变量,必须要规定数据类型,例如 `int` 、`double` 。
3. **括号**: `if` 后面,条件需要加上 `()` 。并且代码块也要加上 `{}` 。
4. **结构**:写代码前要写上C++程序框架, `int main() { ... }` ,以及前面的 `include` 以及 `using namespace std;`。
@@ -0,0 +1,167 @@
### 实例一:程序基本结构 (最简单的 "Hello World")
**Python 代码**
```python
# 直接写,所见即所得
print("Hello, C++!")
```
**C++ 代码**
```cpp
// C++ 程序在基本的程序框架下写代码,这个框架基本是固定的结构,记住即可。
#include <iostream>
using namespace std;
int main() {
cout << "Hello, Python!" << endl;
return 0;
}
```
#### 区别点解析:
* **框架**:Python 几乎没有框架,直接写功能。C++ 必须把所有代码放进 `int main() { ... }` 这个主函数“容器”里。
* **引用**:C++ 需要用 `#include <iostream>` 来引入“输入输出”的功能模块。
* **语法**:C++ 语句结尾必须有分号 `;`。`endl` 用于换行。
---
### 实例二:变量与数据类型 (声明一个变量并使用)
**Python 代码**
```python
# Python 是动态类型
# 变量的类型由赋给它的值决定
my_variable = 100
print("它现在是一个数字:", my_variable)
my_variable = "一百"
print("它现在变成了一个字符串:", my_variable)
```
**C++ 代码**
```cpp
#include <iostream>
#include <string> // 使用 string 类型,需要引入 string 工具箱中的字符串模块
using namespace std;
int main() {
// C++ 是静态类型
// 必须提前声明变量的类型, 语法为: 数据类型 变量名 = 初始化值; 其中 = 初始化值 的部分可以省略
int my_number = 100;
cout << "它是一个整数: " << my_number << endl;
// 如果是C++, 下面这行代码会直接编译失败!
// my_number = "一百";
string my_text = "一百";
cout << "这是一个字符串: " << my_text << endl;
return 0;
}
```
#### 区别点解析:
* Python 的变量 `my_variable` 可以随意改变类型。C++ 的变量 `my_number` 在被声明为 `int` 后,就永远只能存储整数。
* **声明**:C++ 必须用 `类型 名字;` 的格式先“声明”变量的存在,才能使用。如 `int my_number;` 和 `string my_text;`。
---
### 实例三:输入与输出
**Python 代码**
```python
name = input("请输入你的名字: ")
age_str = input("请输入你的年龄: ")
# input() 得到的是字符串,需要手动转换
age = int(age_str)
print("你好,", name, "! 你明年就", age + 1, "岁了。")
```
**C++ 代码**
```cpp
#include <iostream>
#include <string>
using namespace std;
int main() {
string name; // 准备一个装字符串的盒子
int age; // 准备一个整数的盒子
cout << "请输入你的名字: ";
cin >> name;
cout << "请输入你的年龄: ";
// cin 会自动将用户的输入转换为整数!
cin >> age;
cout << "你好, " << name << "! 你明年就 " << age + 1 << " 岁了。" << endl;
return 0;
}
```
#### 区别点解析:
* **输入类型**:Python 的 `input()` 永远返回字符串,需要手动转换。C++ 的 `cin` 会根据你提供的变量类型(`int age`)自动尝试转换用户的输入,非常方便。
* **输出串联**:Python 的 `print()` 用逗号 `,` 分隔多项。C++ 的 `cout` 使用 `<<` 符号来像链条一样串联多项。
---
### 实例四:条件判断
#### 例:输入年龄,根据是否成年 以及 是否有许可 来判断能否进入一个俱乐部
注:**是否有许可**是通过一个布尔类型变量 `has_permission` 来手动设置的,变量值设置为 `true` 代表有许可,否则是无许可。
**Python 代码**
```python
age = 20
has_permission = False
# 使用 and, or, not 逻辑词
# 使用冒号(:)和缩进定义代码块
if age >= 18 and not has_permission:
print("你已成年,但没有许可。")
elif age < 18:
print("你还未成年。")
else:
print("你可以进入。")
```
**C++ 代码**
```cpp
#include <iostream>
using namespace std;
int main() {
int age = 20;
bool has_permission = false; // 布尔值是小写
// 使用 &&, ||, ! 逻辑符号
// 使用圆括号()包裹条件,大括号{}定义代码块
if (age >= 18 && !has_permission) {
cout << "你已成年,但没有许可。" << endl;
}
else if (age < 18) { // 注意是 else if
cout << "你还未成年。" << endl;
}
else {
cout << "你可以进入。" << endl;
}
return 0;
}
```
#### 区别点解析:
* **逻辑词 和 逻辑符号 不同**:Python 的 `and`, `or`, `not` 在 C++ 中对应的是 `&&`, `||`, `!`。
* **代码块**:Python 靠**冒号+缩进**。C++ 靠**大括号 `{...}`**。
* **条件包裹**:C++ 的 `if` 和 `else if` 后面的判断条件**必须**用圆括号 `()` 包起来。
* **关键字不同**:Python 的 `elif` 在 C++ 中是 `else if`。Python 的 `True/False` 在 C++ 中是 `true/false`。
@@ -0,0 +1,191 @@
# C++与Python的对比 与 Python基本语法
---
### **1. 变量**
**区别:** Python 不需要声明类型,它会自动推导,相当于前面加了C++的 `auto` 一样,并且也不需要分号
| C++ | Python |
| :-------------------- | :------------------------------------------- |
| `int a = 10;` | `a = 10` |
| `float b = 3.14;` | `b = 3.14` |
| `string s = "hello";` | `s = "hello"` |
| `bool f = true;` | `f = True` (首字母需要大写与C++的true不一样) |
---
### **2. 输入输出 **
**输出:**
| C++ | Python |
| :---------------------- | :---------------- |
| `cout << "Hello";` | `print("Hello")` |
| `cout << "Num: " << a;` | `print("Num", a)` |
**输入:**
Python 的输入默认是字符串类型,如果要进行计算,需要手动强制类型转化
| C++ | Python |
| :-------------------- | :----------------------------------------------------------- |
| `string s; cin >> s;` | `s = input()` |
| `int n; cin >> n;` | `n = int(input())` (必须强制类型转化为`int`才能用于数学计算) |
---
### **3. 判断语句**
**区别:**
1. 没有括号 `()` 包围条件
2. 行尾必须加冒号 `:`
3. **没有大括号 `{}`,全靠缩进(通常为4个空格,可以使用Tab按键来快速缩进)来表示某个代码块**
4. `else if` 变成了 `elif`
**C++:**
```cpp
if (x > 0) {
cout << "正数";
} else if (x == 0) {
cout << "零";
} else {
cout << "负数";
}
```
**Python:**
```python
if x > 0: # 没括号,有冒号
print("正数") # 必须缩进,表示是属于 x > 0 的这个代码块
elif x == 0: # else if 变成 elif,并且回退缩进,从 x > 0 的代码块中退出
print("零")
else:
print("负数")
```
### Python的缩进
你可以把缩进看作是**“文件目录的层级”**
* 缩进越深,说明它属于越内部的逻辑
* 一旦缩进退回来,说明那个逻辑块结束了
**C++ (用花括号 `{}` 决定范围)**
C++ 根本不在乎你有没有缩进,只要有 `{}` 就能跑。哪怕你写成一行也是对的(虽然很丑)
```cpp
// C++ 即使写得乱七八糟,机器也能读懂,因为有 {}
void fun() {
if(isReady){
do();
}
}
```
**Python (用缩进决定范围)**
Python 没有 `{}`,**必须**靠缩进排版。如果你乱写,程序直接报错,或者逻辑完全变了
```python
# Python 必须写得整整齐齐
def fun(): # 函数下也必须缩进,代表函数的代码块范围
if is_ready: # 冒号代表下面要开始缩进来确定它自己的代码块范围了
do() # 这行缩进了,说明它属于 if
print("Done") # 这行退回去一个缩进了,说明它不属于 if,但属于 fun 函数内部
print("Over") # 没有缩进,代表它不属于任何逻辑代码块的内部
```
---
### **4. 循环 **
#### **For 循环**
**区别:** C++ 的 `for(int i=0; i<n; i++)` 在 Python 中用 `range(n)` 实现
**C++:**
```cpp
// 循环 5 次:0, 1, 2, 3, 4
for (int i = 0; i < 5; i++) {
cout << i;
}
```
**Python:**
```python
# range(5) 就代表 [0, 1, 2, 3, 4] 左闭右开的区间
for i in range(5):
print(i)
```
#### **While 循环**
**区别:** 同样是去掉括号,加上冒号。注意 Python 没有 `i++`,必须写 `i += 1`
**C++:**
```cpp
while (i < 5) {
cout << i;
i++; // 或者 ++i
}
```
**Python:**
```python
while i < 5:
print(i)
i += 1 # Python 没有 ++ 运算符
```
---
### **5. 函数**
**核心区别:**
1. **关键字**:C++ 用 `返回值类型` 开头,Python 统一用 **`def`** 开头
2. **参数**:Python **不需要** 写参数类型
3. **结构**:同样是去掉大括号 `{}`,行尾加冒号 `:`,内容靠 **缩进**
#### **写法对比**
**1:带返回值的函数 (比如求和)**
**C++:**
```cpp
// 必须声明返回类型(int)和参数类型(int)
int add(int a, int b) {
return a + b;
}
// 调用
int result = add(5, 10);
```
**Python:**
```python
# 统一用 def,参数没类型,结尾加冒号
def add(a, b):
return a + b # 缩进
# 调用
result = add(5, 10)
```
---
**2:无返回值的函数 (Void 类型)**
**C++:**
```cpp
// 使用 void
void say_hello(string name) {
cout << "Hello, " << name << endl;
}
```
**Python:**
```python
# 还是用 def,如果没有在内部写 return,就等于没有返回值
def say_hello(name):
print(Hello, name)
```