重生之我在10天内卷赢C++ - DAY 1
坐稳了,我们的C++重生之旅现在正式发车!请系好安全带,前方高能,但绝对有趣!
🚀 重生之我在10天内卷赢C++ - DAY 1
导师寄语:嘿,未来的编程大神!欢迎来到C++的世界。我知道,你现在可能对着黑乎乎的命令行窗口,心里犯嘀咕:“这玩意儿能干啥?” 别急,这扇黑色的门背后,是一个由你创造的、充满无限可能的奇幻世界。今天,我就带你拿到第一把钥匙,推开这扇门。记住,最牛的黑客,也是从第一行
Hello, World!
开始的。Let’s Go!
🎯 今日目标
- 了解C++是个啥,建立基本印象。
- 掌握Linux基本命令行操作,成为“命令行小子”。
- 学会使用Vim编辑器,体验“键盘流”的快感。
- 成功编译并运行你的第一个C++程序!
- 掌握变量、输入输出,让程序“活”起来。
- 养成写注释的好习惯,做个有“代码品”的程序员。
1. C++的“前世今生” (听个故事,放松一下)
想象一下,你有一辆老式的手动挡汽车,它叫 C语言。这车性能强劲,速度飞快,能让你完全掌控每一个零件。但问题是,开起来太费劲了!换挡、离合,一不小心就熄火,新手司机直接劝退。
后来,一个叫Bjarne Stroustrup的大佬觉得:“这不行啊,我得给这车升个级!” 于是,他在C语言的基础上,加装了“自动挡”、“导航系统”、“安全气囊”等等一大堆现代化的玩意儿,并给它取了个新名字,叫 C++ (C Plus Plus,就是比C更强一点的意思)。
所以,C++是什么?
- 它是C语言的“超级进化版”:你能在C里做的,C++基本都能做。
- 它更强大、更安全:它引入了**面向对象(OOP)**等高级特性,让你能像搭乐高一样组织代码,开发大型项目时不再一团乱麻。
- 它性能依然是王者:它被广泛用于游戏引擎、桌面软件、服务器开发等一切需要“快”的领域。
我们学C++,就像直接学开一辆现代化的“自动挡性能车”,既能体验速度与激情,又不会被复杂的操作搞得手忙脚乱。
2. 磨刀不误砍柴工:搭建开发环境
在Linux下,我们的“开发三件套”就是:命令行终端、Vim编辑器、g++编译器。
2.1 Linux命令行:你的数字世界导航仪
忘掉鼠标吧!在Linux世界,命令行是最高效的工具。它就像你和电脑之间的“密语”,你输入指令,它立即执行。
打开你的终端(通常是按 Ctrl+Alt+T
),我们来学几个“咒语”:
-
pwd
(Print Working Directory):“我在哪儿?”- 输入
pwd
แล้ว按回车,它会告诉你当前所在的文件夹路径。
$ pwd /home/your_username
- 输入
-
ls
(List):“这里有啥?”- 输入
ls
,它会列出当前文件夹下的所有文件和文件夹。
$ ls Desktop Documents Downloads Music Pictures
- 输入
-
mkdir
(Make Directory):“给我造个新窝!”- 我们来为我们的C++学习创建一个专属文件夹。
$ mkdir cpp_journey
-
cd
(Change Directory):“走,去那儿!”- 进入我们刚创建的文件夹。
$ cd cpp_journey $ pwd # 再确认一下位置 /home/your_username/cpp_journey
恭喜!你已经掌握了在文件系统中“瞬间移动”的能力!
2.2 Vim编辑器:键盘流的“上古神器”
Vim是一个纯键盘操作的文本编辑器。初见时可能觉得它很奇怪,但一旦熟悉,你的编码速度会起飞。
Vim的“三步走”魔法,记住它就能完成80%的工作:
-
打开/创建文件:
vim 文件名
- 我们在
cpp_journey
文件夹下,创建一个叫hello.cpp
的文件。
$ vim hello.cpp
现在你进入了Vim的正常模式 (Normal Mode)。在这个模式下,你不能直接打字,按键会被当成命令。
- 我们在
-
进入编辑模式:按一下
i
键i
代表 Insert (插入)。按下后,左下角会出现-- INSERT --
字样。现在,你就可以像在记事本里一样,自由地输入代码了!
-
保存并退出:
- 首先,按
Esc
键,退出编辑模式,回到正常模式。 - 然后,输入冒号
:
,接着输入wq
,最后按回车。w
代表 write (写入/保存)q
代表 quit (退出):wq
就是 “保存并退出” 的意思。
- 首先,按
小贴士:如果玩坏了,想不保存就强制退出,可以按
Esc
后输入:q!
。这个!
就像在说:“我不管,就是要走!”
2.3 g++编译器:你的代码“翻译官”
你写的C++代码(.cpp文件),计算机是看不懂的。它只懂0和1组成的机器码。g++ 就是一个伟大的“翻译官”,它能把你的代码翻译成计算机能执行的文件。
检查一下你的“翻译官”在不在:
$ g++ --version
如果显示出一大堆版本信息,说明它已经就位。如果没有,就用下面这条命令请它出山(需要输入你的系统密码):
$ sudo apt-get update
$ sudo apt-get install g++
sudo
就像是在说:“我是管理员,我说了算!”
3. 宇宙第一定律:Hello, World!
环境就绪,万事俱备!现在,让我们写下编程世界的开篇诗篇。
第一步:用Vim编写代码
$ cd ~/cpp_journey # 确保在我们的工作目录
$ vim hello.cpp
第二步:按 i
进入插入模式,输入以下代码
// 这是我的第一个C++程序
#include <iostream>int main() {// 在屏幕上打印 "Hello, C++ World!"std::cout << "Hello, C++ World!" << std::endl;return 0; // 告诉系统,程序圆满结束
}
第三步:按 Esc
,输入 :wq
保存退出
第四步:召唤 g++ 翻译官进行编译
$ g++ hello.cpp -o hello
g++ hello.cpp
:告诉编译器去翻译hello.cpp
文件。-o hello
:-o
是 output (输出) 的意思,表示请把翻译好的可执行文件命名为hello
。如果不加这个,默认会生成一个叫a.out
的文件。
编译成功后,ls
一下,你会发现多了一个绿色的、名为 hello
的文件。它就是我们程序的“真身”!
第五步:运行你的程序!
$ ./hello
./
表示“当前目录下”,./hello
就是运行当前目录下的hello
程序。
终端上会立刻显示:
Hello, C++ World!
🎉🎉🎉 恭喜你!你已经正式成为一名程序员了!🎉🎉🎉
代码逐行解剖:
#include <iostream>
:引入工具箱。iostream
是一个包含了输入(input)和输出(output)功能的“工具箱”。cout
这个工具就放在里面。int main()
:程序的唯一入口。操作系统运行你的程序时,会先找main
函数,从这里开始执行。一个程序只能有一个main
函数,就像一栋房子只有一个正门。{ ... }
:函数的地盘。花括号里的所有内容,都属于main
函数。std::cout << "..." << std::endl;
:输出指令。std::cout
是“标准输出流”,你可以把它想象成一个连接到屏幕的“大喇叭”。<<
是“流插入运算符”,像个传送带,把右边的东西送到左边的cout
喇叭里播放出去。std::endl
是一个特殊指令,表示“换个行,然后刷新一下”。
return 0;
:汇报工作。向操作系统报告:“报告老板,任务圆满完成,一切正常!” 返回0
是一个约定俗成的成功信号。// ...
:注释。这两行是写给你自己和别人看的,编译器会直接忽略它们。我们稍后会详细讲。
4. C++的“基本积木”:变量与数据类型
程序光会打招呼可不够,它得能记住东西。变量 (Variable) 就是程序用来存放数据的“小盒子”。
每个盒子都有类型,规定了它能装什么东西,以及盒子有多大。
类型 | 名字 | 能装啥 | 例子 |
---|---|---|---|
int | integer | 整数 | int age = 18; |
double | double-precision | 小数(浮点数) | double price = 19.99; |
char | character | 单个字符 | char grade = 'A'; (注意是单引号) |
bool | boolean | 真或假 | bool is_handsome = true; |
std::string | string | 一串字符(字符串) | std::string name = "卷王"; (注意是双引号) |
实践一下:
创建一个新文件 variables.cpp
,把你的个人信息存起来。
#include <iostream>
#include <string> // 使用string需要这个头文件int main() {// 声明并初始化变量std::string name = "C++小萌新";int age = 1;double height = 1.75; // 单位:米char gender = 'M';bool is_learning = true;// 把这些信息打印出来std::cout << "姓名: " << name << std::endl;std::cout << "年龄: " << age << "岁" << std::endl;std::cout << "身高: " << height << "米" << std::endl;std::cout << "性别: " << gender << std::endl;std::cout << "正在学习C++吗? " << is_learning << std::endl; // bool会打印出 1 (true) 或 0 (false)return 0;
}
编译运行:
$ g++ variables.cpp -o vars
$ ./vars
看看输出是不是你的个人信息?
5. 与程序互动:标准输入与输出
你的程序现在会“说”了,我们再教它怎么“听”。
std::cout
是输出(说)。std::cin
是输入(听)。
cin
(see-in) 使用 >>
运算符,方向和 cout
相反,表示把从键盘输入的数据“灌”进变量里。
示例:一个会聊天的机器人
创建 chat.cpp
:
#include <iostream>
#include <string>int main() {std::string user_name;int user_age;std::cout << "你好! 我是你的AI助手,请问你叫什么名字呀? " << std::endl;std::cin >> user_name; // 等待用户输入名字,并存入user_namestd::cout << "哇," << user_name << ",真是个好名字!你今年多大了呢?" << std::endl;std::cin >> user_age; // 等待用户输入年龄,并存入user_agestd::cout << "酷!" << user_age << "岁正是学习编程的黄金年龄!加油哦!" << std::endl;return 0;
}
编译运行,和它聊聊看!
偷懒的艺术:using namespace std;
你可能已经注意到了,每次用 cout
, cin
, string
, endl
都要在前面加上 std::
,好麻烦!std
是 standard (标准) 的缩写,表示这些工具都来自C++的“标准库命名空间”。
命名空间 (Namespace) 就像一个姓氏。张家的“三”叫张三,李家的“三”叫李三,可以避免重名冲突。
std::cout
就是“std”家的cout
。
如果我们确定今天只和“std”一家人打交道,就可以在程序开头声明一下:
#include <iostream>
#include <string>using namespace std; // 声明:接下来没写姓的,都默认是std家的int main() {string name;cout << "请输入你的名字: "; // 看,不用写std::了cin >> name;cout << "你好, " << name << "!" << endl;return 0;
}
这样是不是清爽多了?
导师提醒:在大型项目中,为了避免命名冲突,不推荐在头文件中使用
using namespace std;
。但在我们现在的小练习中,为了方便,大胆用!
6. 成为有“素质”的程序员:注释
注释是写给“人”看的,不是给机器看的。 几个月后,当你回头看自己写的代码,你会感谢今天写下注释的自己。
两种注释方式:
-
单行注释
//
- 从
//
开始,直到这一行结束,都是注释。
// 这是一个单行注释,用来解释下面这行代码的作用 int a = 10;
- 从
-
多行注释
/* ... */
/*
和*/
之间的所有内容,不管多少行,都是注释。
/*这是一个多行注释。通常用来写一些比较详细的说明,比如函数的用途、作者信息等等。作者:卷王导师日期:2024-01-01 */ int b = 20;
总结与小贴士
呼!第一天信息量有点大,但你坚持下来了!我们来回顾一下:
- 你认识了C++,你的新朋友。
- 你学会了用
ls
,cd
,mkdir
在Linux里“横行霸道”。 - 你用Vim写下了神圣的
Hello, World!
。 - 你用g++编译并运行了它,感受到了创造的乐趣。
- 你学会了用变量存东西,用
cin
和cout
和程序聊天。
卷王小贴士:
编程遇到问题是100%会发生的事,尤其是编译错误。不要怕那满屏的红色报错信息。仔细读第一行错误,它通常会告诉你哪一行(比如hello.cpp:5:10:
)出了什么问题(比如missing a semicolon ';'
缺少分号)。解决它,你会获得巨大的成就感!
✍️ DAY 1 作业
- 个人名片生成器:
- 编写一个程序
my_card.cpp
。 - 程序依次询问用户的 姓名(string)、城市(string) 和 幸运数字(int)。
- 最后,程序将这些信息格式化输出,类似下面这样:
******************** * 姓名: 张三 * 城市: 北京 * 幸运数字: 8 ********************
- 编写一个程序
- 温度转换器:
- 编写一个程序
temp_converter.cpp
。 - 程序提示用户输入一个摄氏度(Celsius)温度(可以是小数,所以用
double
类型)。 - 程序计算出对应的华氏度(Fahrenheit)温度并输出。
- 转换公式:
F = C * 9.0 / 5.0 + 32
。(注意:要用9.0 / 5.0
而不是9 / 5
,否则整数相除会丢失精度!)
- 编写一个程序
💡 作业答案与解析
1. 个人名片生成器
文件:my_card.cpp
#include <iostream>
#include <string>// 使用std命名空间,简化代码
using namespace std;int main() {// 声明需要的变量string name;string city;int lucky_number;// 提示并获取用户输入cout << "欢迎使用个人名片生成器!" << endl;cout << "请输入您的姓名: ";cin >> name;cout << "请输入您所在的城市: ";cin >> city;cout << "请输入您的幸运数字: ";cin >> lucky_number;// 格式化输出cout << "\n--- 这是您的专属名片 ---" << endl; // \n也是一个换行符cout << "********************" << endl;cout << "* 姓名: " << name << endl;cout << "* 城市: " << city << endl;cout << "* 幸运数字: " << lucky_number << endl;cout << "********************" << endl;cout << "------------------------" << endl;return 0;
}
编译与运行:
$ g++ my_card.cpp -o my_card
$ ./my_card
运行示例:
欢迎使用个人名片生成器!
请输入您的姓名: 卷王
请输入您所在的城市: 上海
请输入您的幸运数字: 666--- 这是您的专属名片 ---
********************
* 姓名: 卷王
* 城市: 上海
* 幸运数字: 666
********************
------------------------
2. 温度转换器
文件:temp_converter.cpp
#include <iostream>using namespace std;int main() {// 声明变量,使用double以支持小数double celsius;double fahrenheit;// 提示用户输入cout << "请输入摄氏度温度: ";cin >> celsius;// 根据公式进行计算// 使用9.0和5.0确保是浮点数除法,结果更精确fahrenheit = celsius * 9.0 / 5.0 + 32;// 输出结果cout << "您输入的摄氏度 " << celsius << "°C" << endl;cout << "转换为华氏度是 " << fahrenheit << "°F" << endl;return 0;
}
编译与运行:
$ g++ temp_converter.cpp -o temp_converter
$ ./temp_converter
运行示例:
请输入摄氏度温度: 25.5
您输入的摄氏度 25.5°C
转换为华氏度是 77.9°F
点个赞和关注,更多知识包你进步,谢谢!!!你的支持就是我更新的最大动力