《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循环的语法:

dobodywhile(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.mzph.cn/news/691240.shtml

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

相关文章

设计模式: 建造者模式

文章目录 一、什么是建造者模式二、建造者模式的结构三、使用场景案例分析1、使用场景2、案例分析 一、什么是建造者模式 建造模式通过一步一步的去构建一个复杂的对象。该模式将对象的构建细节封装在一个独立的建造者类中&#xff0c;使得客户端代码可以根据需要定制对象的构…

cRIO9040中NI9381模块的测试

硬件准备 CompactRIO9040NI9381直流电源&#xff08;可调&#xff09;网线 软件安装 下载地址 LabVIEW Real-Time 模块 NI CompactRIO 设备驱动程序 LabVIEW FPGA 模块&#xff08;可选&#xff09; 仅以下情况需要LabVIEW FPGA模块&#xff1a; 想为CompactRIO终端设计FP…

Gitlab操作流程

阶段1-构建账户信息 1.1 管理员分配账户 方式1-推荐 企业正常使用gitlab时&#xff0c;一般由项目经理(超级管理员)手动创建开发者账户信息&#xff0c;然后将账户发送给开发者&#xff0c;以便登录使用&#xff1b; 流程如下&#xff1a; 点击创建用户按钮&#xff1b; 创…

顶顶通实时质检系统如何添加词库

文章目录 前言联系我们步骤1. 导入系统预置词库2. 手动添加词库 在实时质检时如何质检到词库 前言 本篇文章主要讲解顶顶通实时质检系统如何添加词库。 词库添加的方式&#xff1a; 导入系统预置词库手动添加词库 联系我们 有意向了解实时质检系统的用户&#xff0c;可以点击…

web基础及http协议 (二) apache

一、httpd 安装组成 http 服务基于 C/S 结构 1 .常见http 服务器程序 httpd apache&#xff0c;存在C10K&#xff08;10K connections&#xff09;问题 nginx 解决C10K问题lighttpd IIS .asp 应用程序服务器 tomcat .jsp 应用程序服务器 jetty 开源的servlet容器&#xf…

10款ai文生图软件/网站推荐

1. Ai-Chat 推荐指数&#xff1a;⭐⭐⭐⭐ 链接&#xff1a; https://mmm.aiyujiang.com/ 上传图片并输入AI提示词就能一键生成各类动漫、卡通风格头像&#xff0c;算法强大&#xff0c;风格多样&#xff0c;一键开启你的AI自由创作之旅。有电脑版和手机版&#xff0c;也是很…

大数据信用报告查询方式一般有几种?哪种比较好?

在了解这个问题之前&#xff0c;想必你对大数据信用与人行信用的区别都是比较清楚了&#xff0c;本文呢就着重讲一下大数据信用报告查询方式有几种&#xff0c;哪种比较好&#xff0c;感兴趣的朋友不妨一起去看看。 大数据信用报告常见的三种查询方式&#xff1a; 一、二维码分…

手持三防平板丨国产化加固平板丨国产三防平板发展的意义是什么?

随着现代科技的快速发展&#xff0c;平板电脑在我们的生活中扮演着越来越重要的角色。然而&#xff0c;传统的平板电脑只能在普通的环境中使用&#xff0c;而无法在恶劣的环境中使用&#xff0c;例如在高海拔、高温、高湿度、沙漠等环境中&#xff0c;传统平板电脑往往会出现故…

图的遍历(广度优先遍历BFS,深度优先遍历DFS)

目录 图的遍历概念&#xff1a; 图的广度优先遍历&#xff08;BFS&#xff09;&#xff1a; 代码实现如下&#xff1a; 测试如下&#xff1a; 注意&#xff1a; 图的深度优先遍历&#xff08;DFS&#xff09;&#xff1a; 代码实现如下&#xff1a; 测试如下&#xff1…

Web服务器基础

Web服务器基础 【一】前端概述 【1】HTML HTML&#xff08;超文本标记语言&#xff09;是用于创建网页结构的标记语言。它定义了网页的骨架&#xff0c;包括标题、段落、列表、链接等元素&#xff0c;但没有样式。可以将HTML视为网页的结构和内容的描述。 【2】CSS css&…

阿里云服务器镜像是什么?如何选择镜像?

阿里云服务器镜像怎么选择&#xff1f;云服务器操作系统镜像分为Linux和Windows两大类&#xff0c;Linux可以选择Alibaba Cloud Linux&#xff0c;Windows可以选择Windows Server 2022数据中心版64位中文版&#xff0c;阿里云服务器网aliyunfuwuqi.com来详细说下阿里云服务器操…

Go 是否有三元运算符?Rust 和 Python 是怎么做的?

嗨&#xff0c;大家好&#xff01;本文是系列文章 Go 技巧第十四篇&#xff0c;系列文章查看&#xff1a;Go 语言技巧。 今天来聊聊在 Go 语言中是否支持三元运算符。这个问题很简单&#xff0c;没有。 首先&#xff0c;什么是三元运算符&#xff1f; 在其他一些编程语言中&a…

MySQL篇之分库分表

一、为什么要分库分表 1.目的 1. 分担了访问压力 2. 解决存储压力 2.分库分表的时机 1. 前提&#xff0c;项目业务数据逐渐增多&#xff0c;或业务发展迅速&#xff0c;单表的数据量达1000W或20G以后。 2. 优化已解决不了性能问题&#xff08;主从读写分离、查询索引…&am…

数据库管理-第152期 Oracle Vector DB AI-04(20240220)

数据库管理152期 2024-02-20 数据库管理-第152期 Oracle Vector DB & AI-04&#xff08;20240220&#xff09;1 常用的向量检索方法聚类图搜索哈希量化 2 Oracle Vector DB中的索引索引&#xff08;默认&#xff09; 索引&#xff08;高级&#xff09;3 EMBEDDINGSSQL EMBE…

阿里云备案服务器买哪种?多少钱?有什么限制条件?

在阿里云备案服务器需要多少钱&#xff1f;目前符合备案条件的阿里云服务器只要30元&#xff0c;并且这台云服务器可以备案5个网站。2核4G配置&#xff0c;价格为30元3个月&#xff0c;也可以选择2核2G轻量服务器&#xff0c;61元一年&#xff0c;阿里云老用户还可以选择99元一…

通俗易懂地理解稀疏性

今天我想与大家探讨的是一个数学和工程学中的重要概念——稀疏性。这个概念可能听起来很抽象&#xff0c;但它实际上贯穿于我们生活中的许多方面。那么&#xff0c;稀疏性到底是什么呢&#xff1f;简单来说&#xff0c;在数学和信号处理领域&#xff0c;一个信号被称为稀疏&…

Eclipse - Text Editors (文本编辑器)

Eclipse - Text Editors [文本编辑器] References Window -> Preferences -> General -> Editors -> Text Editors Displayed tab witdth: 4 勾选 Insert spaces for tabs 勾选 Show line number References [1] Yongqiang Cheng, https://yongqiang.blog.csdn.n…

力扣(LeetCode)数据结构练习题(2)

今天又写了两道关于链表的练习题&#xff0c;来给大家分享一下。巩固一下上一篇学到的链表知识&#xff0c;题目可以然我们更清楚的认识链表。 目录 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 给你单链表的头结点 head &#xff0c;请…

小红书数据分析:sora爆火,为内容行业带来哪些变化

导语 春节还没过完&#xff0c;科技圈就出“大事”了~据悉&#xff0c;OpenAI发布了Sora&#xff0c;一种由文字生成视频的AI工具&#xff0c;且效果极其逼真&#xff0c;打破了多项纪录。Sora的出现&#xff0c;又让人类里通用人工智能AGI近了一步。那么。Sora的出现对于小红…

外贸人做外贸听话要听音

有人说&#xff0c;在做外贸的时候大部分的人都是充当着客服的角色&#xff0c;而且遵循的模式也是一问一答&#xff0c;凡是客户提出的问题&#xff0c;我们都会尽可能详细的回答。 但是对于如何提问客户&#xff0c;却是不知道怎么下手&#xff0c; 于是&#xff0c;在这样的…