重生之我在10天内卷赢C++ - DAY 1

坐稳了,我们的C++重生之旅现在正式发车!请系好安全带,前方高能,但绝对有趣!


🚀 重生之我在10天内卷赢C++ - DAY 1

导师寄语 :嘿,未来的编程大神!欢迎来到C++的世界。我知道,你现在可能对着黑乎乎的命令行窗口,心里犯嘀咕:"这玩意儿能干啥?" 别急,这扇黑色的门背后,是一个由你创造的、充满无限可能的奇幻世界。今天,我就带你拿到第一把钥匙,推开这扇门。记住,最牛的黑客,也是从第一行 Hello, World! 开始的。Let's Go!

🎯 今日目标

  1. 了解C++是个啥,建立基本印象。
  2. 掌握Linux基本命令行操作,成为"命令行小子"。
  3. 学会使用Vim编辑器,体验"键盘流"的快感。
  4. 成功编译并运行你的第一个C++程序!
  5. 掌握变量、输入输出,让程序"活"起来。
  6. 养成写注释的好习惯,做个有"代码品"的程序员。

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 แล้ว按回车,它会告诉你当前所在的文件夹路径。
    bash 复制代码
    $ pwd
    /home/your_username
  • ls (List):"这里有啥?"

    • 输入 ls,它会列出当前文件夹下的所有文件和文件夹。
    bash 复制代码
    $ ls
    Desktop  Documents  Downloads  Music  Pictures
  • mkdir (Make Directory):"给我造个新窝!"

    • 我们来为我们的C++学习创建一个专属文件夹。
    bash 复制代码
    $ mkdir cpp_journey
  • cd (Change Directory):"走,去那儿!"

    • 进入我们刚创建的文件夹。
    bash 复制代码
    $ cd cpp_journey
    $ pwd  # 再确认一下位置
    /home/your_username/cpp_journey

恭喜!你已经掌握了在文件系统中"瞬间移动"的能力!

2.2 Vim编辑器:键盘流的"上古神器"

Vim是一个纯键盘操作的文本编辑器。初见时可能觉得它很奇怪,但一旦熟悉,你的编码速度会起飞。

Vim的"三步走"魔法,记住它就能完成80%的工作:

  1. 打开/创建文件 :vim 文件名

    • 我们在 cpp_journey 文件夹下,创建一个叫 hello.cpp 的文件。
    bash 复制代码
    $ vim hello.cpp

    现在你进入了Vim的正常模式 (Normal Mode)。在这个模式下,你不能直接打字,按键会被当成命令。

  2. 进入编辑模式 :按一下 i 键

    • i 代表 Insert (插入) 。按下后,左下角会出现 -- INSERT -- 字样。现在,你就可以像在记事本里一样,自由地输入代码了!
  3. 保存并退出:

    • 首先,按 Esc 键,退出编辑模式,回到正常模式。
    • 然后,输入冒号 :,接着输入 wq,最后按回车。
      • w 代表 write (写入/保存)
      • q 代表 quit (退出)
      • :wq 就是 "保存并退出" 的意思。

小贴士 :如果玩坏了,想不保存就强制退出,可以按 Esc 后输入 :q!。这个 ! 就像在说:"我不管,就是要走!"

2.3 g++编译器:你的代码"翻译官"

你写的C++代码(.cpp文件),计算机是看不懂的。它只懂0和1组成的机器码。g++ 就是一个伟大的"翻译官",它能把你的代码翻译成计算机能执行的文件。

检查一下你的"翻译官"在不在:

bash 复制代码
$ g++ --version

如果显示出一大堆版本信息,说明它已经就位。如果没有,就用下面这条命令请它出山(需要输入你的系统密码):

bash 复制代码
$ sudo apt-get update
$ sudo apt-get install g++

sudo 就像是在说:"我是管理员,我说了算!"


3. 宇宙第一定律:Hello, World!

环境就绪,万事俱备!现在,让我们写下编程世界的开篇诗篇。

第一步:用Vim编写代码

bash 复制代码
$ cd ~/cpp_journey  # 确保在我们的工作目录
$ vim hello.cpp

第二步:按 i 进入插入模式,输入以下代码

cpp 复制代码
// 这是我的第一个C++程序
#include <iostream>

int main() {
    // 在屏幕上打印 "Hello, C++ World!"
    std::cout << "Hello, C++ World!" << std::endl;

    return 0; // 告诉系统,程序圆满结束
}

第三步:按 Esc,输入 :wq 保存退出

第四步:召唤 g++ 翻译官进行编译

bash 复制代码
$ g++ hello.cpp -o hello
  • g++ hello.cpp:告诉编译器去翻译 hello.cpp 文件。
  • -o hello:-o 是 output (输出) 的意思,表示请把翻译好的可执行文件命名为 hello。如果不加这个,默认会生成一个叫 a.out 的文件。

编译成功后,ls 一下,你会发现多了一个绿色的、名为 hello 的文件。它就是我们程序的"真身"!

第五步:运行你的程序!

bash 复制代码
$ ./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,把你的个人信息存起来。

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;
}

编译运行:

bash 复制代码
$ g++ variables.cpp -o vars
$ ./vars

看看输出是不是你的个人信息?


5. 与程序互动:标准输入与输出

你的程序现在会"说"了,我们再教它怎么"听"。

  • std::cout 是输出(说)。
  • std::cin 是输入(听)。

cin (see-in) 使用 >> 运算符,方向和 cout 相反,表示把从键盘输入的数据"灌"进变量里。

示例:一个会聊天的机器人

创建 chat.cpp:

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    std::string user_name;
    int user_age;

    std::cout << "你好! 我是你的AI助手,请问你叫什么名字呀? " << std::endl;
    std::cin >> user_name; // 等待用户输入名字,并存入user_name

    std::cout << "哇," << user_name << ",真是个好名字!你今年多大了呢?" << std::endl;
    std::cin >> user_age; // 等待用户输入年龄,并存入user_age

    std::cout << "酷!" << user_age << "岁正是学习编程的黄金年龄!加油哦!" << std::endl;

    return 0;
}

编译运行,和它聊聊看!

偷懒的艺术:using namespace std;

你可能已经注意到了,每次用 cout, cin, string, endl 都要在前面加上 std::,好麻烦!std 是 standard (标准) 的缩写,表示这些工具都来自C++的"标准库命名空间"。

命名空间 (Namespace) 就像一个姓氏。张家的"三"叫张三,李家的"三"叫李三,可以避免重名冲突。std::cout 就是"std"家的cout。

如果我们确定今天只和"std"一家人打交道,就可以在程序开头声明一下:

cpp 复制代码
#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. 成为有"素质"的程序员:注释

注释是写给"人"看的,不是给机器看的。 几个月后,当你回头看自己写的代码,你会感谢今天写下注释的自己。

两种注释方式:

  1. 单行注释 //

    • 从 // 开始,直到这一行结束,都是注释。
    cpp 复制代码
    // 这是一个单行注释,用来解释下面这行代码的作用
    int a = 10;
  2. 多行注释 /* ... */

    • /* 和 */ 之间的所有内容,不管多少行,都是注释。
    cpp 复制代码
    /*
      这是一个多行注释。
      通常用来写一些比较详细的说明,
      比如函数的用途、作者信息等等。
      作者:卷王导师
      日期: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 作业

  1. 个人名片生成器 :

    • 编写一个程序 my_card.cpp。

    • 程序依次询问用户的 姓名(string) 、城市(string) 和 幸运数字(int)。

    • 最后,程序将这些信息格式化输出,类似下面这样:

      复制代码
      ********************
      * 姓名: 张三
      * 城市: 北京
      * 幸运数字: 8
      ********************
  2. 温度转换器 :

    • 编写一个程序 temp_converter.cpp。
    • 程序提示用户输入一个摄氏度(Celsius)温度(可以是小数,所以用 double 类型)。
    • 程序计算出对应的华氏度(Fahrenheit)温度并输出。
    • 转换公式 :F = C * 9.0 / 5.0 + 32。(注意:要用 9.0 / 5.0 而不是 9 / 5,否则整数相除会丢失精度!)

💡 作业答案与解析

1. 个人名片生成器

文件:my_card.cpp

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;
}

编译与运行:

bash 复制代码
$ g++ my_card.cpp -o my_card
$ ./my_card

运行示例:

复制代码
欢迎使用个人名片生成器!
请输入您的姓名: 卷王
请输入您所在的城市: 上海
请输入您的幸运数字: 666

--- 这是您的专属名片 ---
********************
* 姓名: 卷王
* 城市: 上海
* 幸运数字: 666
********************
------------------------

2. 温度转换器

文件:temp_converter.cpp

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;
}

编译与运行:

bash 复制代码
$ g++ temp_converter.cpp -o temp_converter
$ ./temp_converter

运行示例:

复制代码
请输入摄氏度温度: 25.5
您输入的摄氏度 25.5°C
转换为华氏度是 77.9°F

点个赞和关注,更多知识包你进步,谢谢!!!你的支持就是我更新的最大动力

相关推荐
CodeYp201919 分钟前
第13讲:HTTPS 协议原理
linux·https
德思特27 分钟前
如何提升 5G 移动性切换验证效率?德思特 Amarisoft Callbox 新增 NR SA LTM 测试功能详解
经验分享·无线通信·车载通信
一条破秋裤1 小时前
【1112】Linux中断【整理】
linux·运维·服务器
SomeOtherTime1 小时前
Rust生命周期介绍(AI回答)
开发语言·后端·rust
程序猿打工仔1 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
喵本喵叁肆2 小时前
Rényi 差分隐私:把隐私损失看成一族矩(英文原题:Rényi Differential Privacy (CSF 2017))
开发语言·r语言
CodeYp20193 小时前
第14讲:传输层协议 UDP
linux·udp
北京迅为3 小时前
案例分享 | RK182X算力卡:多路视频VLM监控,四路画面AI同时看懂,一句人话说清现场
linux·人工智能·嵌入式·rk3588·算力卡·rk182x
Hvitur3 小时前
Java - Lambda
java·开发语言·python
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite