C++ 入门完全指南-(一)--编程基础与环境搭建

C++ 入门完全指南-(一)--编程基础与环境搭建

文章目录

第1章 C++入门准备(可略过)

1.1 什么是编程语言

编程语言是人与计算机沟通的桥梁,它是一套用于定义计算机程序的语法规则。就像人类使用语言交流一样,编程语言让开发者能够"告诉"计算机要执行什么任务。

编程语言的层次:

  • 机器语言:计算机直接理解的二进制代码(0和1)
  • 汇编语言:使用助记符的低级语言
  • 高级语言:接近人类语言的编程语言,如C++、Python、Java

为什么选择C++作为第一门编程语言?

  1. 理解计算机原理:C++让你更接近硬件,理解内存管理
  2. 广泛的应用领域:游戏开发、系统软件、高频交易等
  3. 强大的性能:执行效率高,资源消耗可控
  4. 良好的就业前景:工业界需求稳定,薪资水平较高

1.2 C++的发展历史与特点

C++的历史时间线:

  • 1979年:Bjarne Stroustrup在贝尔实验室开始开发"C with Classes"
  • 1983年:正式更名为C++
  • 1985年:第一个商业版本发布
  • 1998年:C++98成为第一个ISO标准
  • 2011年:C++11标准发布,带来重大更新
  • 2020年:C++20标准发布

C++的主要特点:

  1. 面向对象:支持封装、继承、多态
  2. 系统级编程:可以直接操作内存和硬件
  3. 高效性能:接近C语言的执行效率
  4. 标准库丰富:提供大量可重用的组件
  5. 兼容C语言:大多数C程序可以直接在C++中运行

1.3 C++的应用领域

应用领域具体应用为什么选择C++
游戏开发游戏引擎(Unreal Engine)、游戏逻辑高性能、硬件控制能力强
系统软件操作系统、数据库、编译器底层访问能力、高效
嵌入式系统物联网设备、汽车电子资源消耗可控、实时性强
金融服务高频交易、金融建模执行速度快、延迟低
科学计算物理模拟、数值分析计算性能强
图形处理图像处理、计算机视觉与硬件结合紧密

第2章 开发环境配置

2.1 编译器选择

编译器是将C++源代码转换为计算机可执行程序的工具。

主流C++编译器:

  1. GCC/G++(GNU Compiler Collection)
    • 开源免费,跨平台
    • Linux系统默认编译器
    • 命令:g++ filename.cpp -o program
  2. Clang/LLVM
    • 苹果公司主导开发
    • 编译速度快,错误信息友好
    • 命令:clang++ filename.cpp -o program
  3. MSVC(Microsoft Visual C++)
    • Windows平台主要编译器
    • Visual Studio集成
    • 功能强大,调试方便
    • 通过 Microsoft 直接下载使用

2.2 Windows环境搭建(推荐新手)

Visual Studio 详细教程可参考:

环境配置验证

验证脚本:
创建一个简单的测试程序验证环境是否正确配置:

// test_environment.cpp#include<iostream>#include<cstdlib>// 用于system函数intmain(){ std::cout <<"=== 环境测试 ==="<< std::endl; std::cout <<"1. 编译器版本测试:"<< std::endl;// 不同编译器的预定义宏#ifdef__GNUC__ std::cout <<" 使用GCC/G++编译器,版本:"<< __GNUC__ <<"."<< __GNUC_MINOR__ << std::endl;#endif#ifdef_MSC_VER std::cout <<" 使用MSVC编译器,版本:"<< _MSC_VER << std::endl;#endif#ifdef__clang__ std::cout <<" 使用Clang编译器"<< std::endl;#endif std::cout <<"\n2. 基本功能测试:"<< std::endl; std::cout <<" 算术运算:3 + 5 * 2 = "<<3+5*2<< std::endl; std::cout <<"\n3. 环境信息:"<< std::endl; std::cout <<" int类型大小:"<<sizeof(int)<<" 字节"<< std::endl; std::cout <<" char类型大小:"<<sizeof(char)<<" 字节"<< std::endl; std::cout <<"\n=== 测试完成 ==="<< std::endl;return0;}

2.3 学习资源与社区

官方资源:

选择一个OI练习网站

中文学习网站:

  • 菜鸟教程C++教程
  • 慕课网C++课程
  • B站C++教学视频

推荐书籍:

  • 入门:《C++ Primer Plus》
  • 进阶:《C++ Primer》
  • 深入:《Effective C++》

2.4 第一个C++程序:Hello World

步骤1:创建源代码文件

// hello.cpp#include<iostream>usingnamespace std;intmain(){ cout <<"Hello, World!"<<endl;return0;}

代码解释:

  • // hello.cpp:注释,说明文件名
  • #include <iostream>:引入输入输出库
  • using namespace std;: C++命名空间指令
  • int main():程序的主函数,所有C++程序从这里开始执行
  • cout:标准输出,用于在屏幕显示文本
  • <<:输出运算符
  • "Hello, World!":要输出的字符串
  • endl:换行并刷新缓冲区
  • return 0;:程序正常结束

步骤2:编译程序
在命令行中执行:

# 使用g++ g++ hello.cpp -o hello # 使用clang clang++ hello.cpp -o hello 

步骤3:运行程序

# Windows hello.exe # Linux/Mac ./hello 

VScode 搭建完成后可以直接编译运行更适合新手

2.5 编译与运行流程详解(可略过)

完整编译过程:

源代码 (.cpp) → 预处理器 → 编译器 → 汇编器 → 链接器 → 可执行文件 

详细步骤:

链接:将目标文件和库文件链接为可执行文件

g++ hello.o -o hello # 生成可执行文件

汇编:将汇编代码转换为机器码(目标文件)

g++ -c hello.s -o hello.o # 生成目标文件

编译:将C++代码转换为汇编代码

g++ -S hello.i -o hello.s # 生成汇编文件

预处理:处理#include#define等指令

g++ -E hello.cpp -o hello.i # 生成预处理文件

第3章 C++程序结构

3.1 基本程序框架

最简单的C++程序:

// 示例:空程序的最小结构#include<iostream>usingnamespace std;intmain(){return0;}

完整的程序结构示例:

/* * 文件名:program_structure.cpp * 功能:展示C++程序的基本结构 * 作者:学习者 * 日期:2024年 */// 1. 预处理指令(引入头文件)#include<iostream>// 标准输入输出#include<cmath>// 数学函数....//可根据需求调用其他函数// 2. 命名空间声明(简化代码)usingnamespace std;// 3. 全局常量定义(可选)constdouble PI =3.1415926;constint MAX_SIZE =100;// 4. 函数声明(可选)doublecalculateArea(double radius);// 5. 主函数 - 程序入口intmain(){// 6. 局部变量声明int age =20;double score =95.5;char grade ='A';// 7. 程序逻辑 cout <<"=== 学生信息 ==="<< endl; cout <<"年龄:"<< age <<" 岁"<< endl; cout <<"分数:"<< score <<" 分"<< endl; cout <<"等级:"<< grade << endl;// 8. 函数调用double area =calculateArea(5.0); cout <<"半径为5的圆面积:"<< area << endl;// 9. 返回值return0;}// 10. 函数定义doublecalculateArea(double radius){return PI * radius * radius;}

3.2 预处理指令详解

常用预处理指令:

条件编译

#ifdefWINDOWS#include<windows.h>#elifdefined(LINUX)#include<unistd.h>#endif#ifndefMY_HEADER_H#defineMY_HEADER_H// 头文件内容#endif

#define:宏定义

#defineMAX_SIZE100// 定义常量#defineSQUARE(x)((x)*(x))// 带参数的宏#defineDEBUG// 条件编译标记

#include:包含头文件

#include<iostream>// 系统头文件,使用尖括号#include"myheader.h"// 用户头文件,使用双引号

3.3 main函数详解

main函数的几种形式:

// 形式1:标准形式intmain(){return0;// 0表示成功,非0表示错误代码}// 形式2:带命令行参数intmain(int argc,char* argv[]){// argc: 参数个数(至少为1,第一个是程序名)// argv: 参数数组return0;}// 形式3:带环境变量(不常用)intmain(int argc,char* argv[],char* envp[]){return0;}

命令行参数示例:

#include<iostream>usingnamespace std;intmain(int argc,char* argv[]){ cout <<"程序名:"<< argv[0]<< endl; cout <<"参数个数:"<< argc -1<< endl;for(int i =1; i < argc; i++){ cout <<"参数"<< i <<": "<< argv[i]<< endl;}return0;}

编译运行:./program arg1 arg2 arg3

3.4 语句与代码块

语句类型:

跳转语句:改变执行顺序

return0;break;continue;

控制语句:流程控制

if(x >0){/* ... */}while(x <10){/* ... */}

表达式语句:计算表达式

x =5+3; y =sqrt(25.0);

声明语句:定义变量

int x;double y =3.14;

代码块:

{// 代码块开始int x =10;// 块内变量,外部无法访问 cout << x << endl;}// 代码块结束,x被销毁// 错误:x在此处不可见// cout << x << endl;

3.5 注释的使用

注释的重要性:

  • 解释代码意图
  • 标记待办事项
  • 临时禁用代码
  • 提高代码可读性

注释类型:

// 1. 单行注释// 这是一个单行注释int age =20;// 年龄变量// 2. 多行注释(C风格)/* * 这是一个多行注释 * 可以跨越多行 * 用于函数说明或大段注释 */// 3. 条件编译注释(临时禁用代码)#if0// 这段代码不会被编译 cout <<"这段代码被禁用"<< endl;#endif// 4. 文档注释(Doxygen风格)/** * @brief 计算圆的面积 * @param radius 圆的半径 * @return 圆的面积 */doublecalculateArea(double radius){return PI * radius * radius;}

良好的注释实践:

// 不好的注释int x =10;// 设置x为10// 好的注释int timeout =30;// 超时时间(秒),默认30秒// 更好的注释(说明为什么)// 需要30秒超时是因为第三方API响应较慢// 测试表明少于30秒会导致请求失败率增加15%int api_timeout =30;

3.6 空白字符与代码格式

空白字符的作用:

  • 提高代码可读性
  • 不影响程序逻辑
  • 包括空格、制表符、换行符

良好的格式示例:

// 不好的格式intmain(){int x=5;int y=10;if(x>y){cout<<"x更大"<<endl;}else{cout<<"y更大"<<endl;}return0;}// 好的格式intmain(){int x =5;int y =10;if(x > y){ cout <<"x更大"<< endl;}else{ cout <<"y更大"<< endl;}return0;}

代码格式化建议:

  1. 使用一致的缩进(推荐4个空格)
  2. 运算符前后添加空格
  3. 逗号后添加空格
  4. 大括号单独一行
  5. 合理使用空行分隔逻辑块

3.7 实践练习

练习1:程序结构分析

// 分析以下程序的输出#include<iostream>usingnamespace std;int global_var =100;// 全局变量voidtestFunction(){int local_var =50;// 局部变量 cout <<"局部变量:"<< local_var << endl; cout <<"全局变量:"<< global_var << endl;}intmain(){ cout <<"程序开始"<< endl;int main_var =200;// main函数的局部变量 cout <<"main函数的变量:"<< main_var << endl;testFunction();// 错误:无法访问testFunction的局部变量// cout << local_var << endl; cout <<"程序结束"<< endl;return0;}

练习2:创建完整的程序

/* * 作业:个人信息展示程序 * 要求: * 1. 包含适当的注释 * 2. 使用至少3种不同的变量类型 * 3. 有清晰的结构(预处理、声明、逻辑、输出) * 4. 格式化良好 */// 在这里编写你的代码

常见错误总结:

// 错误1:缺少分号int x =5// 错误!缺少分号// 错误2:拼写错误intmain(){// 正确 Int main(){// 错误!I大写// 错误3:头文件错误#includ<iostream>// 错误!拼写错误#include<iostream>// 正确// 错误4:缺少main函数// 必须有int main()函数作为程序入口// 错误5:使用未声明的标识符intmain(){ cout << x << endl;// 错误!x未声明return0;}

本章小结

通过第一部分的学习,你应该掌握:

  1. ✓ 了解C++的基本概念和应用领域
  2. ✓ 成功搭建开发环境并运行第一个程序
  3. ✓ 理解C++程序的基本结构
  4. ✓ 能够编写、编译和运行简单的C++程序
  5. ✓ 掌握基本的代码格式和注释规范

下一步: 在掌握基本结构后,我们将进入第二部分,学习C++的数据类型和运算符,开始编写更有意义的程序。

学习检查清单:

  • 成功安装并配置开发环境
  • 能够编译运行Hello World程序
  • 理解main函数的作用
  • 知道如何添加注释
  • 了解基本的程序结构

Read more

Python开发从入门到精通:异步编程与协程

Python开发从入门到精通:异步编程与协程

《Python开发从入门到精通》设计指南第二十一篇:异步编程与协程 一、学习目标与重点 💡 学习目标:掌握Python异步编程的基本概念和方法,包括协程、任务调度、事件循环等;学习asyncio、aiohttp等核心库的使用;通过实战案例开发异步应用程序。 ⚠️ 学习重点:协程的定义与使用、任务调度、事件循环、asyncio库、aiohttp库、异步编程实战。 21.1 异步编程概述 21.1.1 什么是异步编程 异步编程是一种并发编程方式,通过非阻塞的操作提高程序的执行效率。在异步编程中,程序可以在等待I/O操作完成时继续执行其他任务,而不需要阻塞等待。 21.1.2 异步编程的优势 * 提高执行效率:在等待I/O操作完成时,程序可以继续执行其他任务。 * 降低资源消耗:减少了线程切换的开销。 * 简化代码结构:通过协程和任务调度,代码结构更加简洁。 21.1.3 异步编程的应用场景

By Ne0inhk

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的快递包裹检测系统(Python+PySide6界面+训练代码)

摘要 随着电子商务的迅猛发展,快递物流行业面临着日益增长的包裹处理需求。传统的人工分拣方式效率低下、成本高昂且容易出错,无法满足现代物流行业的需求。本文提出了一种基于深度学习的快递包裹检测系统,该系统采用先进的YOLO系列目标检测算法(包括YOLOv5、YOLOv6、YOLOv7和YOLOv8),能够实时、准确地检测和定位快递包裹。系统结合Python编程语言和PySide6图形用户界面,提供了一个用户友好、功能完整的解决方案。本文详细介绍了系统架构、算法原理、实现细节以及训练过程,并提供了完整代码和参考数据集。 目录 摘要 1. 引言 1.1 背景与意义 2. 相关工作 2.1 目标检测算法综述 2.2 快递包裹检测研究现状 3. 系统设计 3.1 系统架构 3.2 技术选型 4. 算法原理 4.1 YOLO系列算法核心思想 4.2

By Ne0inhk
微分的本质:从“变化率”到“线性映射”的飞跃 —— 可视化 Python 教程

微分的本质:从“变化率”到“线性映射”的飞跃 —— 可视化 Python 教程

引言 微积分是科学的语言,而微分是其灵魂。从一维导数到流形上的切映射,微分的本质始终是一个线性映射。本文将从这一核心观点出发,系统梳理微积分中一系列重要概念:导数、微分、雅可比矩阵、方向导数、梯度、链式法则、Hessian、切映射、拉回等,揭示它们背后的统一结构。更重要的是,我们将用 Python 代码可视化这些概念,让你直观地看到微分如何“线性化”非线性函数。 本文所有代码均使用 Python 3 + NumPy + Matplotlib 编写,你可以复制到自己的环境中运行,观察图形变化。 1. 一维导数的重新解读——从“数”到“线性映射” 1.1 传统定义的局限 对于一元函数 (f:\mathbb{R}\to\mathbb{R}),导数定义为 [ f’

By Ne0inhk
2026 Python+AI 学习方向拆解:3 个高性价比赛道,新手优先学

2026 Python+AI 学习方向拆解:3 个高性价比赛道,新手优先学

欢迎文末添加好友交流,共同进步! “ 俺はモンキー・D・ルフィ。海贼王になる男だ!” * 前言 * 一、AI数据处理与分析赛道 * 1.1 为什么选择这个方向? * 1.2 核心技能树 * 1.3 实战代码示例 * 数据清洗与预处理 * 1.4 学习路线图 * 二、AI应用开发赛道(LLM + RAG) * 2.1 为什么选择这个方向? * 2.2 RAG技术架构流程 * 2.3 实战代码:构建RAG问答系统 * 2.4 学习路线图 * 三、AI自动化办公赛道 * 3.1 为什么选择这个方向? * 3.2 自动化办公应用场景 * 3.3 实战代码示例

By Ne0inhk