Initial commit: C++ courseware
This commit is contained in:
commit
4a4ee7c287
1789 files changed
+373489
No files matched your search
Binary file not shown.
Binary file not shown.
@@ -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)
|
||||
```
|
||||
Binary file not shown.
Reference in new issue
Block a user