适用对象: 学过四个学期 Python、第一次接触 C++ 的同学 使用方式: 自学讲义。全套 16 课,每课按 1.5 小时设计——照着讲义边读边敲,做完练习再进入下一课 学完本课,你应该能:
print / input 翻译成
cout /
cin,写出读两个数、输出其和的完整程序你已经学了两年 Python。学 C++ 不是从零开始学编程。
你已经知道:
C++ 只是换了一种写法,加了几条新规矩。
这本讲义的每个知识点都这样呈现:
你在 Python 里这样写 → C++ 改成这样 → 只有这几个不同
你不需要忘掉 Python。把它当成翻译工具。
使用说明:
| 符号 | 含义 |
|---|---|
| ⭐ | 基础题,2 分钟内完成 |
| ⭐⭐ | 实战题,5 分钟内完成 |
| ⭐⭐⭐ | 冲刺题,给学有余力的同学 |
| ⚠️ | 新手必看陷阱 |
| 📝 | 要点速记 |
| 问题 | 回答 |
|---|---|
| Python 不够用吗? | 够用,但信息学竞赛(GESP、CSP-J)的主流语言是 C++ |
| C++ 和 Python 谁快? | 同样的程序 C++ 通常快 10~100 倍 |
| Python 白学了吗? | 完全没有。编程思维是通用的,你只是换个"外壳" |
📝 一句话: Python 教会你"怎么想",C++ 教会你"怎么在比赛里写"。
推荐版本:Dev-C++ 5.11(或 Dev-C++ TDM-GCC 64 位版)
安装完成后,四步跑通第一个程序:
.cpp(例如 lesson1.cpp)⚠️ 别踩这个坑:
文件名和保存路径不要用中文,不要存在桌面上一个中文名文件夹里,否则有的电脑上编译会莫名失败。建议在
D 盘建一个 cpp 文件夹专门放代码。
Python 的程序可以只有一行。C++ 不行——任何 C++ 程序都要套在一个固定外壳里:
#include <bits/stdc++.h>
using namespace std;
int main() {
// 在这里写你的代码
return 0;
}逐行解释:
| 代码 | 作用 | 类比 Python |
|---|---|---|
#include <bits/stdc++.h> |
引入所有常用工具 | 一行顶所有 import |
using namespace std; |
允许直接写 cin、cout |
类似 from ... import * |
int main() { } |
程序从这里开始运行 | Python 最外层的代码 |
return 0; |
告诉系统"正常结束" | Python 不需要 |
// 注释 |
注释 | # 注释 |
📝 背下来。 每次新建文件,先把这 6 行打上。本学期每节课上课前都会默写一次。
⚠️ 大括号 { } 就是 C++ 的缩进。 Python
用缩进表示"哪些代码属于谁",C++ 用 { } 包起来表示。C++
里缩进只是为了好看,机器不看缩进,只看大括号。
print →
cout(20 分钟)Python 你这样写:
print("Hello, World!")
print("我叫小明,今年11岁") # ← 换成你自己的!C++ 改成这样:
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "Hello, World!" << endl;
cout << "我叫小明,今年11岁" << endl; // ← 换成你自己的!
return 0;
}只有这几个不同:
print(...) →
cout << ... << endl;<<
是"发送"符号:把右边的内容发给屏幕。cout 读作"C
奥特"(console output)endl = end line,换行。相当于 Python print
自带的换行;,Python 不用加,C++
必须加输出多个东西,就连着 <<:
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "3 + 5 = " << 3 + 5 << endl;
return 0;
}运行结果:
3 + 5 = 8
Python 里的 print("3 + 5 =", 3 + 5) 用逗号分隔,C++
里全部换成 << 串起来。
⚠️ 别踩这个坑:
代码里的引号、分号、括号必须是英文符号。中文引号
“”
会直接编译报错。写代码前先看一眼输入法是不是英文状态。
新建
intro.cpp,输出三行自我介绍(姓名、年级、一个爱好)。编译运行成功,再往下读。
Python 你这样写:
x = 10
price = 3.5
name = "xiaoming"C++ 改成这样:
#include <bits/stdc++.h>
using namespace std;
int main() {
int x = 10;
double price = 3.5;
string name = "xiaoming";
cout << x << " " << price << " " << name << endl;
return 0;
}只有这几个不同:
| 类型 | 装什么 | 例子 |
|---|---|---|
int |
整数 | int age = 11; |
double |
小数 | double price = 3.5; |
string |
文字 | string name = "xiaoming"; |
📝 类型只在第一次出现时写。
之后再用这个变量,直接写名字:x = 20;(不要再写
int x = 20;,那是重复声明,会报错)。
还有
long long(超大整数)、char(单个字符)、bool(真假)——以后学。
input() →
cin(15 分钟)Python 你这样写:
n = int(input())
print(n * 2)C++ 改成这样:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
cout << n * 2 << endl;
return 0;
}只有这几个不同:
int n;,再用
cin >> n; 把输入装进去>> 是"接收"符号,方向和 <<
相反:cout << 往外送,cin >>
往里收int(...) 转换——因为
n 声明成 int,cin
自动按整数读读多个数:
Python 你这样写:
a, b = map(int, input().split())
print(a + b)C++ 改成这样:
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}int a, b; 一行声明两个变量cin >> a >> b;
连着读,输入时用空格或回车分隔都行——map(int, input().split())
那一长串再也不用写了,这是 C++ 更省事的地方编译错误不可怕,它是编译器在告诉你哪里错了。请把下面三个错误故意做一遍,亲眼看看报错长什么样——以后再遇到就不慌了。习惯是:报错先自己读,读不懂再问人。
错误 1:忘记分号(本学期你会犯 100 次的错)
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "hello" << endl ← 这行末尾少了 ;
return 0;
}
编译器会说:error: expected ';' before 'return'
(翻译:在 return 前面,我期待一个分号)
📝 编译器指出的行号,错误往往在它的上一行。
错误 2:中文引号
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << “hello” << endl; ← 用了中文引号 “ ”
return 0;
}
编译器会说:error: stray '\342' in program (看到
stray
加一堆数字,几乎总是中文符号混进了代码)
错误 3:少了大括号
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "hello" << endl;
return 0;
← 少了结尾的 }
编译器会说:error: expected '}' at end of input
(翻译:读到文件末尾了,还缺一个 })
练习文件自己新建,文件名写在每题里。
⭐ 基础题 1:找错(不用电脑,先用眼睛)
下面的程序应该输出
你好,C++!,但有两处错误,请圈出来再改正:
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "你好,C++!" << endl
return 0
}
cout 那行末尾缺 ;,return 0
末尾也缺 ;:
#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "你好,C++!" << endl;
return 0;
}⭐ 基础题 2:翻译(文件名 t2.cpp)
把下面的 Python 程序翻译成 C++,编译运行验证:
print("我学了2年Python")
print("今天开始学C++")#include <bits/stdc++.h>
using namespace std;
int main() {
cout << "我学了2年Python" << endl;
cout << "今天开始学C++" << endl;
return 0;
}⭐⭐ 实战题:A+B(文件名 t3.cpp)
输入两个整数 a 和
b(同一行,空格分隔),输出它们的和。
输入样例:
3 5
输出样例:
8
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
cout << a + b << endl;
return 0;
}⭐⭐ 实战题:翻倍报数(文件名
t4.cpp)
输入一个整数 n,按下面的格式输出它的 2 倍和 10 倍。
输入样例:
7
输出样例:
7 的 2 倍是 14
7 的 10 倍是 70
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
cout << n << " 的 2 倍是 " << n * 2 << endl;
cout << n << " 的 10 倍是 " << n * 10 << endl;
return 0;
}⭐⭐⭐ 冲刺题:三数求最大(文件名
t5.cpp)
输入三个整数,输出其中最大的一个。提示:C++ 自带
max(x, y)
函数,一次只能比两个数——想想怎么比出三个数的最大值。
输入样例:
3 7 5
输出样例:
7
#include <bits/stdc++.h>
using namespace std;
int main() {
int a, b, c;
cin >> a >> b >> c;
cout << max(a, max(b, c)) << endl;
return 0;
}先用 max(b, c) 比出后两个数的大者,再和 a
比一次。
| Python | C++ | 备注 |
|---|---|---|
print("abc") |
cout << "abc" << endl; |
endl 换行 |
print("x =", x) |
cout << "x = " << x << endl; |
逗号换成 << |
n = int(input()) |
int n; cin >> n; |
先声明类型 |
a, b = map(int, input().split()) |
int a, b; cin >> a >> b; |
连读,更省事 |
x = 10 |
int x = 10; |
第一次出现要写类型 |
price = 3.5 |
double price = 3.5; |
小数用 double |
name = "abc" |
string name = "abc"; |
文字用 string |
# 注释 |
// 注释 |
|
| 缩进表示层级 | { } 表示层级 |
机器只看大括号 |
| 行末不加符号 | 行末加 ; |
最高频错误 |
| 程序直接运行 | 必须套 int main() 外壳 |
6 行模板背下来 |
本课新函数/新符号:
cout、cin、<<、>>、endl、max(x, y)、int、double、string、//