《C++ Primer Plus》《5、循环和关系表达式》

文章目录

  • 1 for循环
    • 1.1for循环的组成部分
    • 1.2回到for循环
    • 1.3修改步长
    • 1.4使用for循环访问字符串
    • 1.5递增运算符和递减运算符
    • 1.6副作用和顺序点(了解)
    • 1.7前缀格式和后缀格式
    • 1.8递增/递减运算符和指针
    • 1.9组合赋值运算符
    • 1.10复合语句(语句块)
    • 1.11 其他语法技巧——逗号运算符
    • 1.12 关系表达式
    • 1.13 赋值,比较和可能犯的错误
    • 1.14 C风格字符串的比较
    • 1.15 比较string类字符串
  • 2 while循环
    • 2.1 for与while
    • 2.2编写延时循环
  • 3do-while循环
  • 4基于范围的for循环(C++11)
  • 5循环和文本输入
    • 5.1使用原始的cin进行输入
    • 5.2使用cin.get(char)进行补救
    • 5.4文件尾条件
    • 5.5另一个cin.get()版本
  • 6嵌套循环和二维数组
    • 6.1初始化二维数组
    • 6.2使用二维数组
  • 7 总结
  • 8 参考

1 for循环

以之前的记录班级同学成绩为例,记录每个人的成绩是一个重复的操作,如果说每次记录成绩都需要一个单独的语句是十分耗时的,所以C++语言出现了循环语句来处理重复的操作。计算机在处理日常的工作时,需要执行重复的任务,为此C++提供了这样的工具:for循环,while循环,do-while循环等等来进行处理。

1.1for循环的组成部分

for循环的组成需要完成以下的步骤:
1)设置初始值
2)执行测试,看循环是否应当继续进行
3)执行循环操作
4)更新用于测试的值

for(initialization,test-expresion,update-expresion)
	body;

在这里插入图片描述

1.2回到for循环

书中给出了一个示例,让for循环完成了阶乘的求值,并打印了出来。

1.3修改步长

大多数情况下,默认步长为1,但其实步长是可以根据实际情况进行修改的。

1.4使用for循环访问字符串

书中给出了一个示例,输入一个字符串,然后逆向输出。输入的是string类型的word,为了确定循环的次数,通过word.size()获得字符串的长度,进而实现程序的功能。

1.5递增运算符和递减运算符

以自增运算符为例进行讲解,x++与++x两者表达的最终结果是一样的,但实际过程并不相通。
x++: y=x,x = x+1;
++x: x = x+1,y = x;
自减原理相同。

1.6副作用和顺序点(了解)

副作用:在计算表达式时对某些东西进行了修改;
顺序点:程序执行过程中的一个点,在这里进入下一步之前将确保对所有的副作用进行了评估。
在for循环中分号就是一个顺序点,在分号之前,执行的所有修改都必须完成。

1.7前缀格式和后缀格式

++x,x++,前者是前缀,后者是后缀,这对程序的执行没有太大的影响,执行速度可能有细微的差别。对于内置类型没有差别,对于用户定义的类型,前缀的效率会更高一些,后缀的话会有一个版本复制的问题。

1.8递增/递减运算符和指针

要搞清楚这四个表达式的含义。

//1)*++pt  2)++*pt   3)(*pt)++  4)*pt++
double arr[5]={1.0,2.0,3.0,4.0,5.0}
double *pt = arr;

在初始情况下默认pt指向的是数组的第一个元素。
1)

* ++  pt  

表示的是 *(++pt)得到的是arr数组的第二个元素;
2)

++*pt

表示的是++(*pt)指向的这个元素数值上再+1;
3)

(*pt)++

指向这个元素的数值上再+1;
4)

*pt++

获得是还是*pt的数值,但是指针已经后移了;

1.9组合赋值运算符

是表达式的一种简化的操作。
在这里插入图片描述

1.10复合语句(语句块)

C++的for循环,要求比较严格,循环体必须是一条语句,但是实际过程中,往往需要循环执行多种操作,所以可以用两个花括号来构造一条复合语句。建议在实际写代码的过程中为了避免出错,对执行语句加上一个花括号。

1.11 其他语法技巧——逗号运算符

在for循环的表达式中,除了分号运算符,是将三种情况隔绝开的,比如update-expresion中不一定只有一个操作,可能其中会涉及到多个变量的操作。
例如for(j=0,i=word.size()-1;j<i;–i,++j),其中—i与++j是两种同时进行的操作,就可以用逗号分隔。

1.12 关系表达式

在这里插入图片描述

1.13 赋值,比较和可能犯的错误

在C语言中=是赋值运算符,==才是判断是否相等的比较运算符,要注意区别。若是混淆的话,赋值运算符的结果是真的,会导致判断条件一直为真,程序会一直执行下去。

1.14 C风格字符串的比较

本小结主要引入了一个函数strcmp()函数,这是一个检测相等或排列顺序的函数。现在有字符串str1与str2.
如果str1与str2相等:strcmp(str1,str2) == 0
如果str1在str2的前面:strcmp(str1,str2) < 0
如果str1在str2的后面:strcmp(str1,str2) > 0

1.15 比较string类字符串

在上一小节是字符串数组的比较,用了strcmp,如果使用的是string对象,C++中直接对!=运算符进行了重载,来判断字符串是否相等,使用起来更加地自由。

2 while循环

while循环没有初始化和更新部分的for循环,它只有测试条件和循环体。

while(test-condition)
	body

在这里插入图片描述

2.1 for与while

for循环与while循环之间可以进行相互转换,在无法预知循环次数的前提下,通常使用while循环。

2.2编写延时循环

需要添加头文件,引入一个符号常量,CLOCK_PER_SEC,该常量等于每秒钟包含的系统时间单位数。书中给出了示例代码。

3do-while循环

do-while循环是出口条件循环,首先先执行循环体,然后再判定测试表达式,决定是否应该继续执行循环。
do-while循环的语法:

do
	body
	while(test-expresion);

在这里插入图片描述

4基于范围的for循环(C++11)

C++11增加了一种循环:基于范围的(range-based)for循环,书中给出了示例代码。这是C++11新增的内容,简化了常见的循环任务,对数组(容器类,如vector和array)的每个元素执行相同的操作,个人觉得简洁优雅且实用。

double prices[5] = {1.0,2.0.3.0,4.0,5.0};
for(double x : prices)
	cout << x<<std::endl;

5循环和文本输入

循环的一种应用:逐字符地读取来自文件或键盘的文本。

5.1使用原始的cin进行输入

书中给出了示例程序,通过cin与循环来读取来自键盘的文本输入。cin输入的字符被存入缓冲区,在用户按下回车键之后,整个字符序列才被发送给程序。书中给出了示例程序,但是这个程序存在一定的问题,他无法将空格也算在内,只能显示字符串。

5.2使用cin.get(char)进行补救

在上节代码的基础上作出改进,使用cin.get()替代cin。主要是cin.get()的功劳,cin.get(ch)读取输入中的下一个字符(即使是空格),并将其赋值给ch。因此便能够也将空格显示出来。

5.4文件尾条件

文件尾是针对文本输入输出提出来的,如果输入来自文件,可以使用功能更加强大的技术——检测文件尾(EOF)
1)EOF结束输入
cin方法检测到EOF时,将设置cin对象中一个指示EOF条件的标记;设置这个标记后,cin将不再读取输入。
2)常见的字符输入做法

while(cin.fail() == false){   //test for EOF
	…
	cin.get(ch);
}

也可以while(!cin.fail())
也可以while(cin)
或者 while(cin.get(ch))

5.5另一个cin.get()版本

C语言中的getchar()和putchar(),仍然在C++中适用。

cin = cin.get();
cout.put(ch);

6嵌套循环和二维数组

C++没有创建二维数组,但是用户可以创建每个元素本身都是数组的数组。

6.1初始化二维数组

创建二维数组时,可以初始化其所有元素。对于二维数组来说,每一维的数组元素都是一个元素,因此初始化由一系列逗号分割的一维数组初始化组成。

6.2使用二维数组

在初始化二维数组后,对这样的二维数组进行操作,通常需要一个嵌套循环,书中给出了一个示例。

7 总结

介绍了for循环,while循环,do-while循环,并介绍了如何从文本文件中读取内容。

8 参考

8.1 《C++ Primer Plus》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/395517.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Redis快速入门】深入解读哨兵模式

个人名片&#xff1a; &#x1f43c;作者简介&#xff1a;一名大三在校生&#xff0c;喜欢AI编程&#x1f38b; &#x1f43b;‍❄️个人主页&#x1f947;&#xff1a;落798. &#x1f43c;个人WeChat&#xff1a;hmmwx53 &#x1f54a;️系列专栏&#xff1a;&#x1f5bc;️…

2024年 前端JavaScript入门到精通 第一天 笔记

主要讲解JavaScript核心知识&#xff0c;包含最新ES6语法&#xff0c;从基础到API再到高级。让你一边学习一边练习&#xff0c;重点知识及时实践&#xff0c;同时每天安排大量作业&#xff0c;加深记忆&#xff0c;巩固学习成果。 1.1 基本软件与准备工作 1.2 JavaScript 案例 …

新年红包的题解

目录 原题描述&#xff1a; 题目描述 题目背景 题目描述 输入格式 输出格式 样例 Input 1 Output 1 Input 2 Output 2 数据范围 主要思路&#xff1a; 代码code&#xff1a; 原题描述&#xff1a; 题目描述 题目背景 龙飞凤舞迎跨年&#xff0c;瑞雪飘飘送祝愿…

陇剑杯 2021刷题记录

题目位置&#xff1a;https://www.nssctf.cn/上有 陇剑杯 2021 1. 签到题题目描述分析答案小结 2. jwt问1析1答案小结 问2析2答案小结 问3析3答案 问4析4答案 问5析5答案 问6析6答案 3. webshell问1析1答案 问2析2答案 问3析3答案 1. 签到题 题目描述 此时正在进行的可能是_…

【Deep Learning 5】自编码和Transformer

&#x1f31e;欢迎来到Pytorch的世界 &#x1f308;博客主页&#xff1a;卿云阁 &#x1f48c;欢迎关注&#x1f389;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f31f;本文由卿云阁原创&#xff01; &#x1f4c6;首发时间&#xff1a;&#x1f339;2024年2月19日&a…

互联网使用代理IP的作用

互联网使用代理IP主要有以下作用&#xff1a; 1. 隐私保护&#xff1a; - 使用代理IP&#xff0c;用户的原始IP地址会被代理服务器的IP地址所替代&#xff0c;从而隐藏用户的真实身份和地理位置信息&#xff0c;增加网络匿名性。 2. 安全防护&#xff1a; - 代理服务器可以作为…

基于Java (spring-boot)的校园二手交易平台

一、项目介绍 基于Java (spring-boot)的校园二手交易平台&#xff1a;前端主要包含登录注册、求购商品、发布商品、举报、评论五个核心管理模块。后端则主要包含系统设置、物品管理、学生管理、评论管理、举报管理、新闻公告六个核心管理模块。通过此模式不同属性的用户可在系统…

服务器遭受 DDoS 攻击的常见迹象有哪些?

服务器遭受 DDoS 攻击的现象很常见&#xff0c;并且有时不容易预防&#xff0c;有部分原因是它们的形式多种多样&#xff0c;而且黑客手段越来越隐蔽。如果您怀疑自己可能遭受 DDoS 攻击&#xff0c;可以寻找多种迹象。以下是 DDoS 攻击的5个常见迹象&#xff1a; 1.网络流量无…

微信美容预约小程序开发实战教程,快速上手的技术解析

随着移动设备的普及和互联网技术的不断发展&#xff0c;小程序成为了一种越来越受欢迎的轻量级应用程序。特别是在美容美发行业&#xff0c;小程序可以提供便捷的服务&#xff0c;吸引更多的客户。本文将为您提供一份详细的美容美发小程序开发搭建指南。 注册并登录乔拓云平台&…

扫码即可快速协作:草料二维码底部协作面板功能详解

功能介绍 在二维码上添加 底部协作面板 功能后 &#xff0c;扫码后不仅可以阅读设备信息、产品资料等基本信息&#xff0c;还可以在二维码底部输入内容评论并他人快速协作&#xff0c;支持添加图文、语言、手写签名等操作。 底部协作面板是提供给组织内部成员快速协作的功能&…

机器学习之梯度下降法直观理解

形象化举例&#xff0c;由上图所示&#xff0c;假如最开始&#xff0c;我们在一座大山上的某处位置&#xff0c;因为到处都是陌生的不知道下山的路&#xff0c;所以只能摸索着根据直觉&#xff0c;走一步算一步。在此过程中&#xff0c;每走到一个位置的时候&#xff0c;都会求…

2024热门韩剧推荐

《与恶魔有约》详情介绍_与恶魔有约已完结在线观看_与恶魔有约迅雷下载_连续剧_萌番(゜-゜)つロ 年轻人都在用~-BILFUN - www.bilfun.cc 《杀人者的难堪》详情介绍_杀人者的难堪已完结在线观看_杀人者的难堪迅雷下载_连续剧_萌番(゜-゜)つロ 年轻人都在用~-BILFUN - www.bilfun…

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径

※【回溯】【深度优先前序】Leetcode 257. 二叉树的所有路径 解法0 迭代法解法1 深度优先 前序解法2 深度优先 前序 添加了StringBulider ---------------&#x1f388;&#x1f388;257. 二叉树的所有路径 题目链接&#x1f388;&#x1f388;------------------- 解法0 迭代法…

CI/CD部署

什么是CI&#xff0c;什么是CD CI和CD是软件开发中持续集成和持续交付的缩写。 CI代表持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;是一种实践&#xff0c;旨在通过自动化构建、测试和代码静态分析等过程&#xff0c;频繁地将代码变更合并到共享存储…

探索Linux系统中HTTP隧道技术的原理与实践

在Linux的世界里&#xff0c;HTTP隧道技术就像是一个神秘的魔法师&#xff0c;它能让你的网络请求穿越重重障碍&#xff0c;安全地到达目的地。今天&#xff0c;我们就来一起探索这个魔法师的奥秘&#xff0c;看看它是如何在Linux系统中施展魔法的。 首先&#xff0c;我们要明…

如何通过AI作画?

网址&#xff1a;https://huggingface.co/spaces/prodia/fast-stable-diffusion 模板网址&#xff1a;https://prompthero.com/prompt/96ee86ae9e2 打开模板网址&#xff0c;选择Stable Diffusion 选择图片&#xff0c;复制prompt和Negative prompt 打开https://huggingface.…

代码随想录算法训练营第54天 | 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

买卖股票的最佳时机III 最多只能完成两笔交易&#xff0c;那么对于每一天的股票可以有5种状态&#xff1a; 没有操作第一次持有股票第一次不持有股票第二次持有股票第二次不持有股票 所以设计的 dp 数组应该有5个维度&#xff0c;分别计算可能得到的最大利润。对于如何递推&a…

leetcode(算法) 70.爬楼梯(python版)

需求 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到楼顶。 1 阶 1 阶2 阶 示例 2&#xff1…

Vue的个人笔记

Vue学习小tips ctrl s ----> 运行 alt b <scrip> 链接 <script src"https://cdn.jsdelivr.net/npm/vue2.7.16/dist/vue.js"></script> 插值表达式 指令