坐稳了,我们的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.pswp.cn/news/917058.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917058.shtml
英文地址,请注明出处:http://en.pswp.cn/news/917058.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[mind-elixir]Mind-Elixir 的交互增强:单击、双击与鼠标 Hover 功能实现

[mind-elixir]Mind-Elixir 的交互增强&#xff1a;单击、双击与鼠标 Hover 功能实现 功能简述 通过防抖&#xff0c;实现单击双击区分通过mousemove事件&#xff0c;实现hover效果 实现思路 &#xff08;一&#xff09;单击与双击事件 功能描述 单击节点时&#xff0c;可以触发…

c++-迭代器类别仿函数常用算法函数

C常用算法函数 1. 前置知识 1.1 迭代器的类别 C中&#xff0c;迭代器是 STL 容器库的核心组件之一&#xff0c;具有举足轻重的作用&#xff0c;它提供了一种 统一的方式来访问和遍历容器&#xff0c;而无需关心底层数据结构的具体实现。迭代器类似指针&#xff0c;但比指针更通…

Python深度学习框架TensorFlow与Keras的实践探索

基础概念与安装配置 TensorFlow核心架构解析 TensorFlow是由Google Brain团队开发的开源深度学习框架&#xff0c;其核心架构包含数据流图&#xff08;Data Flow Graph&#xff09;和张量计算系统。数据流图通过节点表示运算操作&#xff08;如卷积、激活函数&#xff09;&…

c# net6.0+ 安装中文智能提示

https://github.com/stratosblue/IntelliSenseLocalizer 1、安装tool dotnet tool install -g islocalizer 2、 安装IntelliSense 文件&#xff0c;安装其他net版本修改下版本号 安装中文net6.0采集包 islocalizer install auto -m net6.0 -l zh-cn 安装中英文双语net6.0采集包…

【建模与仿真】二阶邻居节点信息驱动的节点重要性排序算法

导读&#xff1a; 在复杂网络中&#xff0c;挖掘重要节点对精准推荐、交通管控、谣言控制和疾病遏制等应用至关重要。为此&#xff0c;本文提出一种局部信息驱动的节点重要性排序算法Leaky Noisy Integrate-and-Fire (LNIF)。该算法通过获取节点的二阶邻居信息计算节点重要性&…

指令微调Qwen3实现文本分类任务

参考文档&#xff1a; SwanLab入门深度学习&#xff1a;Qwen3大模型指令微调 - 肖祥 - 博客园 vLLM&#xff1a;让大语言模型推理更高效的新一代引擎 —— 原理详解一_vllm 原理-CSDN博客 概述 为了实现对100个标签的多标签文本分类任务&#xff0c;前期调用gpt-4o进行prom…

【机器学习-3】 | 决策树与鸢尾花分类实践篇

0 序言 本文将深入探讨决策树算法&#xff0c;先回顾下前边的知识&#xff0c;从其基本概念、构建过程讲起&#xff0c;带你理解信息熵、信息增益等核心要点。 接着在引入新知识点&#xff0c;介绍Scikit - learn 库中决策树的实现与应用&#xff0c;再通过一个具体项目的方式来…

【数字投影】折幕影院都是沉浸式吗?

折幕影院作为一种现代化的展示形式&#xff0c;其核心特点在于通过多块屏幕拼接和投影融合技术&#xff0c;打造更具包围感的视觉体验。折幕影院设计通常采用多折幕结构&#xff0c;如三折幕、五折幕等&#xff0c;利用多台投影机的协同工作&#xff0c;呈现无缝衔接的超大画面…

数据结构——图(三、图的 广度/深度 优先搜索)

一、广度优先搜索(BFS)①找到与一个顶点相邻的所有顶点 ②标记哪些顶点被访问过 ③需要一个辅助队列#define MaxVertexNum 100 bool visited[MaxVertexNum]; //访问标记数组 void BFSTraverse(Graph G){ //对图进行广度优先遍历&#xff0c;处理非连通图的函数 for(int i0;i…

直击WAIC | 百度袁佛玉:加速具身智能技术及产品研发,助力场景应用多样化落地

7月26日&#xff0c;2025世界人工智能大会暨人工智能全球治理高级别会议&#xff08;WAIC&#xff09;在上海开幕。同期&#xff0c;由国家地方共建人形机器人创新中心&#xff08;以下简称“国地中心”&#xff09;与中国电子学会联合承办&#xff0c;百度智能云、中国联通上海…

2025年人形机器人动捕技术研讨会将在本周四召开

2025年7月31日爱迪斯通所主办的【2025人形机器动作捕捉技术研讨会】是携手北京天树探界公司线下活动结合线上直播的形式&#xff0c;会议将聚焦在“动作捕捉软硬件协同&#xff0c;加速人形机器人训练”&#xff0c;将深度讲解多项核心技术&#xff0c;包含全球知名的惯性动捕大…

Apple基础(Xcode①-项目结构解析)

要运行设备之前先选择好设备Product---->Destination---->选择设备首次运行手机提示如出现 “未受信任的企业级开发者” → 手机打开 设置 ▸ 通用 ▸ VPN与设备管理 → 信任你的 Apple ID 即可ContentView 是 SwiftUI 项目里 最顶层、最主界面 的那个“页面”&#xff0…

微服务 02

一、网关路由网关就是网络的关口。数据在网络间传输&#xff0c;从一个网络传输到另一网络时就需要经过网关来做数据的路由和转发以及数据安全的校验。路由是网关的核心功能之一&#xff0c;决定如何将客户端请求映射到后端服务。1、快速入门创建新模块&#xff0c;引入网关依赖…

04动手学深度学习笔记(上)

04数据操作 import torch(1)张量表示一个数据组成的数组&#xff0c;这个数组可能有多个维度。 xtorch.arange(12) xtensor([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])(2)通过shape来访问张量的形状和张量中元素的总数 x.shapetorch.Size([12])(3)number of elements表…

MCU中的RTC(Real-Time Clock,实时时钟)是什么?

MCU中的RTC(Real-Time Clock,实时时钟)是什么? 在MCU(微控制器单元)中,RTC(Real-Time Clock,实时时钟) 是一个独立计时模块,用于在系统断电或低功耗状态下持续记录时间和日期。以下是关于RTC的详细说明: 1. RTC的核心功能 精准计时:提供年、月、日、时、分、秒、…

Linux 进程调度管理

进程调度器可粗略分为两类&#xff1a;实时调度器(kernel)&#xff0c;系统中重要的进程由实时调度器调度&#xff0c;获得CPU能力强。非实时调度器(user)&#xff0c;系统中大部分进程由非实时调度器调度&#xff0c;获得CPU能力弱。实时调度器实时调度器支持的调度策略&#…

基于 C 语言视角:流程图中分支与循环结构的深度解析

前言&#xff08;约 1500 字&#xff09;在 C 语言程序设计中&#xff0c;控制结构是构建逻辑的核心骨架&#xff0c;而流程图作为可视化工具&#xff0c;是将抽象代码逻辑转化为直观图形的桥梁。对于入门 C 语言的工程师而言&#xff0c;掌握流程图与分支、循环结构的对应关系…

threejs创建自定义多段柱

最近在研究自定义建模&#xff0c;有一个多断柱模型比较有意思&#xff0c;分享下&#xff0c;就是利用几组点串&#xff0c;比如上中下&#xff0c;然后每组点又不一样多&#xff0c;点续还不一样&#xff0c;(比如第一个环的第一个点在左边&#xff0c;第二个环在右边)&#…

Language Models are Few-Shot Learners: 开箱即用的GPT-3(四)

Result续 Winograd-Style Tasks Winograd-Style Tasks 是自然语言处理中的一类经典任务。它源于 Winograd Schema Challenge(WSC),主要涉及确定代词指的是哪个单词,旨在评估模型的常识推理和自然语言理解能力。 这个任务中的具体通常包含高度歧义的代词,但从语义角度看…

BGP高级特性之认证

一、概述BGP使用TCP作为传输协议&#xff0c;只要TCP数据包的源地址、目的地址、源端口、目的端 口和TCP序号是正确的&#xff0c;BGP就会认为这个数据包有效&#xff0c;但数据包的大部分参数对于攻击 者来说是不难获得的。为了保证BGP免受攻击&#xff0c;可以在BGP邻居之间使…