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

从零开始学习c++全套通关系列(第二章)万字总结,建议收藏!

if逻辑判断语句

C++ 中的 if 语句是一种条件语句,用于根据条件决定是否执行特定的代码块。

基本格式:

if (condition) {// 如果条件为真,执行这里的代码块
}
  • condition 是一个返回 true 或 false 的表达式。
  • 如果 condition 为 true,则执行 if 后面的代码块。
  • 如果 condition 为 false,则跳过 if 后面的代码块,继续执行下一个语句。

示例:

AI大模型辅助编程

AI大模型在辅助编程方面有着广泛的应用和潜力,在编程领域的应用不仅限于提供语法分析和简单的代码提示,还包括了更深层次的智能辅助功能,能够显著提升开发效率和代码质量。

优势:

1. 代码补全和自动建议

AI大模型可以分析已有的代码片段和用户输入,提供智能的代码补全和建议。它可以根据上下文理解变量、函数、类等的名称,并推荐可能的方法、函数调用或变量名。

2. 错误检测和修复

AI大模型可以帮助检测常见的编程错误,如语法错误、变量未定义、类型不匹配等,并提供修复建议。通过模型对语法和语义的理解,可以更精准地定位和修复问题。

3. 文档生成和注释

AI大模型可以生成函数、类和模块的文档,帮助开发人员快速理解代码的结构和功能。它还可以自动生成注释,提高代码的可读性和可维护性。

4. 代码翻译和跨语言支持

AI大模型能够辅助进行代码翻译,将一种编程语言的代码转换为另一种语言,帮助开发者进行跨平台或跨语言的开发和移植。

5. 代码生成和原型设计

在需要快速原型设计或者生成大量代码时,AI大模型可以根据用户提供的输入,生成符合功能要求的代码框架或者初步实现,加快开发进程。

6. 智能调试和性能优化

AI大模型可以分析代码的运行情况和性能瓶颈,提供调试建议和性能优化策略,帮助开发者改进代码质量和执行效率。

7. 自动化测试和质量保证

AI大模型可以自动生成测试用例、执行自动化测试,并帮助评估代码的覆盖率和质量,提高软件开发过程中的测试效率和结果准确性。

8. 自适应学习和个性化开发支持

AI大模型可以根据开发者的偏好和编码风格进行个性化学习,并提供定制化的开发支持和建议,帮助开发者提升编程技能和效率。

在clion上安装

插件->Marketplace->搜索TONGYI->点击安装

注:安装完成之后重启clion才会生效 

记得要去登录一下,用支付宝就可以去登录

功能也是十分的强大,可以很好的去帮助我们写代码。不过在初学阶段不建议大家使用ai,因为学习阶段主要就是练习,ai再强大终究只是工具,自身的实力才是根本!!!

if else语句

在C++中,if else语句用于执行基于某个条件的代码块。

基本格式:

if (condition) {// 执行当条件为真时的代码块
} else {// 执行当条件为假时的代码块
}

示例: 

cout<<"今年多少岁了"<<endl;int age;cout<<"请输入你的年龄"<<endl;cin>>age;if(age>=18){// 满足条件会执行cout<<"你已经成年了";}else{// 不满足条件会执行cout<<"你还是太年轻了";}

else if语句 

在C++中,else if语句允许你在if语句之后检查多个条件。当第一个if语句的条件不满足时,程序会继续检查下一个else if语句的条件,直到找到一个条件满足为止。如果所有的条件都不满足,则执行else语句中的代码(如果有的话)。

基本格式:

if (condition1) {// 当 condition1 为 true 时执行的代码
} else if (condition2) {// 当 condition1 为 false 且 condition2 为 true 时执行的代码
} else if (condition3) {// 当 condition1 和 condition2 均为 false 且 condition3 为 true 时执行的代码
} else {// 当所有条件都为 false 时执行的代码
}

示例: 

if (outer_condition) {// 当 outer_condition 为 true 时执行的代码if (inner_condition1) {// 当 inner_condition1 为 true 时执行的代码} else {// 当 inner_condition1 为 false 时执行的代码}
} else {// 当 outer_condition 为 false 时执行的代码
}

逻辑判断语句的嵌套

在C++中,if语句可以被嵌套在另一个if语句或else语句中,这被称为嵌套if语句。嵌套if语句允许你根据多个条件来控制程序流程,其中每个条件可能依赖于前一个条件的结果。

基本格式:

if (outer_condition) {// 当 outer_condition 为 true 时执行的代码if (inner_condition1) {// 当 inner_condition1 为 true 时执行的代码} else {// 当 inner_condition1 为 false 时执行的代码}
} else {// 当 outer_condition 为 false 时执行的代码
}

示例: 

 

switch控制语句

switch 控制语句是 C++ 中用来根据表达式的值选择执行路径的一种结构。它通常用于处理多个条件分支的情况,比如根据不同的输入值执行不同的代码块。

基本格式:

switch (expression) {case value1:// 当 expression == value1 时执行这里的代码break;case value2:// 当 expression == value2 时执行这里的代码break;// 可以有更多的 case 分支default:// 如果 expression 与所有 case 值都不匹配,则执行这里的代码
}

示例: 

 

 当满足case后面的条件时,就会break跳出switch语句。进而结束进程。

思考:如果不加break会怎样呢?

这是去掉break后的结果,无论输入几,他都会全部执行,因为即使满足case后面的条件switch语句也不会停止。所以使用switch语句的时候千万别忘了break!!!

枚举类型

在C++中,枚举(enumeration)是一种用户定义的数据类型,用于定义一个由一组命名常量组成的集合。枚举通过为每个常量赋予一个唯一的整数值(默认从0开始递增)来实现。枚举类型有助于增加代码的可读性,使代码更加清晰和易于维护。

基本格式:

enum EnumName {Constant1,Constant2,Constant3 = value,// 可以定义更多的常量
};
  • enum 关键字用于定义枚举类型。
  • EnumName 是枚举类型的名称。
  • 在大括号 {} 内部列出枚举常量,每个常量用逗号分隔。
  • 每个常量可以有一个可选的赋值,默认情况下,第一个常量的值为0,后续常量的值依次递增。
  • 如果需要,可以显式地为某个常量赋予一个特定的值 value

示例:

因为枚举类型的下标是从0开始的,这点大家不要忘记。

枚举类型和枚举常量的作用域为整个程序,可以在任何地方使用,不受限于定义的位置。

while循环语句

在C++中,while 循环是一种常用的迭代结构,用于根据条件重复执行一段代码,直到条件不再满足为止。 

 基本格式:

while (condition) {// 循环体// 在满足条件时执行的代码
}

示例:

声明一下,注释是通义千问添加的。

 while循环语句的嵌套

当我们需要在程序中处理复杂的逻辑或重复性任务时,使用循环嵌套是一种常见的方法。在 C++ 中,我们可以嵌套多个 while 循环来实现复杂的迭代控制流程。

经典的案例,九九乘法表。

外层循环没进行一次,内层循环就进行i次。

AI:这段代码是一个嵌套循环,用于打印乘法表。外层循环控制行数,内层循环控制列数。通过不断迭代i和j的值,完成整个乘法表的打印。 

for循环语句

在C++中,for 循环是一种常见的迭代结构,用于根据指定的条件重复执行代码块。for 循环通常用于已知迭代次数的情况下,它比 while 循环更加紧凑和可控。

基本格式:

for (循环因子的初始化语句; 条件判断; 循环因子变换语句) {// 循环体// 在满足条件时执行的代码
}

 示例:

执行顺序:

循环初始化语句->条件判断->循环体->循环因子变换语句

for循环语句的嵌套

 对于 for 循环语句的嵌套,指的是在一个 for 循环的循环体中再使用另一个 for 循环。这种结构通常用于处理需要多层迭代的复杂问题。


// 打印九九乘法表
for (int i = 1; i <= 9; ++i) {for (int j = 1; j <= i; ++j) {cout << j << " * " << i << " = " << (i * j) << "\t";}cout << endl;}
  • 外层 for 循环 i 控制乘法表的行数,i 从1到9。
  • 内层 for 循环 j 控制每行打印的乘法表达式,j 从1到 i

最后的效果和while循环的一样,逻辑都是一样的,只是看读者们怎么去选择了,我个人还是喜欢用for循环的嵌套。

变量的作用域

在编程中,变量的作用域定义了变量在程序中可见和可访问的区域。作用域规定了在程序的哪些部分可以引用变量以及在何处变量会被销毁或不再可用。

局部作用域 (Local Scope)

局部作用域中声明的变量只在其定义的代码块内部可见和有效。一旦执行流离开了这个代码块,这些变量就会被销毁。

void function() {int localVar = 10; // localVar 在 function 函数内的局部作用域内// 其他代码{int innerVar = 20; // innerVar 在这个代码块内的局部作用域内// 可以访问 localVar 和 innerVar}// 无法访问 innerVar,因为它超出了其定义的代码块作用域
}

全局作用域 (Global Scope)

全局作用域中声明的变量可以在整个程序中访问。它们通常在所有函数之外定义,并且在程序启动时创建,在程序结束时销毁。

#include <iostream>int globalVar = 100; // 在全局作用域内定义的全局变量void function() {// 可以访问 globalVarstd::cout << globalVar << std::endl;
}int main() {// 可以访问 globalVarstd::cout << globalVar << std::endl;return 0;
}

命名空间作用域 (Namespace Scope)

命名空间作用域用于将一组全局对象、函数和变量组织在一起,以避免全局作用域中的命名冲突。在特定的命名空间中声明的变量可以被命名空间内的所有代码访问。

// 声明一个命名空间
namespace MyNamespace {int x = 5; // 在 MyNamespace 命名空间中的全局变量 x
}int main() {// 可以通过限定名称访问命名空间中的变量std::cout << MyNamespace::x << std::endl;return 0;
}

类作用域 (Class Scope)

在类中声明的成员变量(包括静态成员变量和非静态成员变量)具有类作用域。它们只能通过类的实例或者类名访问。

class MyClass {
public:static int staticVar; // 类作用域内的静态成员变量void method() {int localVar = 10; // 方法内的局部变量// 可以访问 staticVar 和 localVar}
};int MyClass::staticVar = 100; // 静态成员变量的定义int main() {MyClass obj;obj.method();std::cout << MyClass::staticVar << std::endl; // 通过类名访问静态成员变量return 0;
}

块作用域 (Block Scope)

在某些特定的语句块内部(比如 for 循环、if 条件语句等),可以声明变量,这些变量的作用域仅限于该语句块内部。

int main() {int x = 10; // 局部变量 xif (x == 10) {int y = 20; // 块作用域内的局部变量 y// 可以访问 x 和 y}// 无法访问 y,因为它超出了其定义的块作用域return 0;
}

注意事项

  • 变量遮蔽 (Shadowing): 当在内部作用域中声明与外部作用域相同名称的变量时,内部作用域的变量会隐藏外部作用域的同名变量。这种情况下,访问变量将优先选择内部作用域的变量。

  • 作用域解析运算符 (::): 在 C++ 中,作用域解析运算符可以用来指定访问全局变量、命名空间变量或类的静态成员变量。

循环中断语句continue和break

break 语句

break 语句用于立即终止当前所在的循环,并跳出循环体执行循环后面的代码。它通常用于在满足某个条件时强制退出循环,而不必等待循环条件正常结束。

只输出了一次i的值,break就将整个循环中断了。 

continue 语句

continue 语句用于立即终止当前循环迭代,并开始下一轮循环迭代。它通常用于跳过当前循环迭代中的某些操作,直接进入下一次循环。

注意事项:

  • break 和 continue 只对最内层的循环起作用,如果它们被嵌套在多个循环中,它们仅影响当前所在的最内层循环。
  • 使用 break 可以立即终止整个循环,而 continue 只是跳过当前循环迭代中的部分代码,进入下一次迭代。
  • 在 switch 语句中,break 也用于跳出 switch 块,防止执行下一个 case。(switch语句中一定要加break)

goto语句

在 C++ 中,goto 是一种控制流语句,用于无条件地将程序的控制转移到程序内的另一个标记(label)处。goto 语句通过标记和标签实现跳转。

基本格式:

goto label;// 在代码的其他位置
label:// 语句序列
  • goto label; 表示程序将跳转到标记为 label 的位置。
  • label: 是一个标签,它标识了程序中的一个位置,后面可以紧跟一系列语句。

示例:

i从0开始进入循环,没进行一次循环都会打印“作者真帅”并且i的值会+1,。

当i的值为10时不会进入循环,所以循环一共进行了10次。

注意事项:

  1. 避免滥用: goto 语句可能会导致程序逻辑变得混乱和难以理解,因此通常不建议频繁使用。更常见的是使用结构化的控制语句(如 for 循环、while 循环、if-else 语句)来实现相同的逻辑。

  2. 跨越作用域的限制: goto 语句只能在同一函数内部进行跳转,不能跳转到另一个函数内部。

  3. 可能导致难以维护的代码: 长时间和大规模使用 goto 可能会使得代码变得难以维护和理解,因此应该慎重使用,确保使用场景合理且易于理解。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 混合贪心算法求解地铁线路调度
  • 结合C++智能指针聊聊观察者模式
  • WPF 框架 Prism IActiveAware接口使用
  • 前端项目本地的node_modules直接上传到服务器上无法直接使用(node-sasa模块报错)
  • boost::regex_replace的使用
  • 海外ASO:iOS与谷歌优化的相同点和区别
  • LabVIEW电子水泵性能测试平台
  • 四个“一体化”——构建数智融合时代下的一站式大数据平台
  • 印尼Facebook直播网络需要达到什么要求?
  • 微信小程序毕业设计-汽车维修项目管理系统项目开发实战(附源码+论文)
  • 图——图的遍历(DFS与BFS)
  • Go 语言 UUID 库 google/uuid 源码解析:UUID version4 的实现
  • Apache功能配置:访问控制、日志分割; 部署AWStats日志分析工具
  • MySQL 面试真题(带答案)
  • pxe高效网络批量装机
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • Android开源项目规范总结
  • Angular 响应式表单之下拉框
  • C# 免费离线人脸识别 2.0 Demo
  • exports和module.exports
  • JAVA之继承和多态
  • python 学习笔记 - Queue Pipes,进程间通讯
  • 关于for循环的简单归纳
  • 缓存与缓冲
  • 技术胖1-4季视频复习— (看视频笔记)
  • 码农张的Bug人生 - 初来乍到
  • 如何用vue打造一个移动端音乐播放器
  • 实战|智能家居行业移动应用性能分析
  • 赢得Docker挑战最佳实践
  • 智能合约开发环境搭建及Hello World合约
  • AI算硅基生命吗,为什么?
  • 选择阿里云数据库HBase版十大理由
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (C++)八皇后问题
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Matalb时序预测)WOA-BP鲸鱼算法优化BP神经网络的多维时序回归预测
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (五)activiti-modeler 编辑器初步优化
  • (原)Matlab的svmtrain和svmclassify
  • (转)编辑寄语:因为爱心,所以美丽
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • **PHP二维数组遍历时同时赋值
  • .chm格式文件如何阅读
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net core 控制台应用程序读取配置文件app.config
  • .net/c# memcached 获取所有缓存键(keys)
  • .net2005怎么读string形的xml,不是xml文件。
  • .Net6使用WebSocket与前端进行通信
  • .netcore 如何获取系统中所有session_ASP.NET Core如何解决分布式Session一致性问题
  • /usr/bin/python: can't decompress data; zlib not available 的异常处理
  • @html.ActionLink的几种参数格式
  • @param注解什么意思_9000字,通俗易懂的讲解下Java注解