当前位置: 首页 > news >正文

重生之我在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 แล้ว按回车,它会告诉你当前所在的文件夹路径。
    $ 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%的工作:

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

    • 我们在 cpp_journey 文件夹下,创建一个叫 hello.cpp 的文件。
    $ 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++ 就是一个伟大的“翻译官”,它能把你的代码翻译成计算机能执行的文件。

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

$ 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) 就是程序用来存放数据的“小盒子”。

每个盒子都有类型,规定了它能装什么东西,以及盒子有多大。

类型名字能装啥例子
intinteger整数int age = 18;
doubledouble-precision小数(浮点数)double price = 19.99;
charcharacter单个字符char grade = 'A'; (注意是单引号)
boolboolean真或假bool is_handsome = true;
std::stringstring一串字符(字符串)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::,好麻烦!stdstandard (标准) 的缩写,表示这些工具都来自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. 成为有“素质”的程序员:注释

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

两种注释方式:

  1. 单行注释 //

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

    • /**/ 之间的所有内容,不管多少行,都是注释。
    /*这是一个多行注释。通常用来写一些比较详细的说明,比如函数的用途、作者信息等等。作者:卷王导师日期:2024-01-01
    */
    int b = 20;
    

总结与小贴士

呼!第一天信息量有点大,但你坚持下来了!我们来回顾一下:

  • 你认识了C++,你的新朋友。
  • 你学会了用ls, cd, mkdir在Linux里“横行霸道”。
  • 你用Vim写下了神圣的Hello, World!
  • 你用g++编译并运行了它,感受到了创造的乐趣。
  • 你学会了用变量存东西,用cincout和程序聊天。

卷王小贴士
编程遇到问题是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

#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

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

http://www.lryc.cn/news/604279.html

相关文章:

  • 红绿多空策略
  • 华为昇腾×绿算全闪存缓存释放澎湃潜能
  • 【C++详解】深入解析多态 虚函数、虚函数重写、纯虚函数和抽象类、多态原理、重载/重写/隐藏的对⽐
  • 基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(六)
  • ‌CASE WHEN THEN ELSE END‌
  • 分布式系统:一致性
  • Linux常用基础命令
  • 【大语言模型入门】—— Transformer 如何工作:Transformer 架构的详细探索
  • 【C语言】指针深度剖析(一)
  • LeetCode 11 - 盛最多水的容器
  • VUE进阶案例
  • RabbitMQ 消息持久化的三大支柱 (With Spring Boot)
  • Hyperchain账本数据存储机制详解
  • C++:stack与queue的使用
  • AI应用:电路板设计
  • [mcp: JSON-RPC 2.0 规范]
  • Excel文件批量加密工具
  • 【LeetCode 随笔】
  • flask使用celery通过数据库定时
  • 【C语言进阶】题目练习
  • 深入理解 Qt 元对象系统 (Meta-Object System)
  • 最新优茗导航系统源码/全开源版本/精美UI/带后台/附教程
  • Linux定时器和时间管理源码相关总结
  • 进阶向:Manus AI与多语言手写识别
  • Python 程序设计讲义(27):字符串的用法——字符串的常用操作
  • 快速了解逻辑回归
  • Kubernetes自动扩容方案
  • Linux 系统启动与 GRUB2 核心操作指南
  • BreachForums 黑客论坛强势回归
  • 【数据结构】用堆实现排序