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

C++初学(13)

13.1、for循环的组成部分

for循环的组成部分完成下面这些步骤:

(1)设置初始值。

(2)执行测试,看看循环是否应当继续。

(3)执行循环操作。

(4)更新用于测试的值。

C++循环设计中包含这要素,很容易识别,初始化、测试和更新操作工程量控制部分,这些操作由括号括起。其中每部分都是一个表达式,彼此由分号隔开。控制部分后面的语句叫作循环体,只要测试表达式为true,它便被执行:

for(initialization;text-expression;update-expression)body

循环只执行一次初始化。通常,程序使用该表达式将变量设置为初始值,然后用该变量计算循环周期。

text-expression(测试表达式)决定循环体是否被执行。通常这个表达式是关系表达式,即对两个值进行比较。例如:i<=6。i与6进行比较,看i是否小于或等于6,如果比较结果为真,程序将执行循环体。实际上,C++并没有将text-expression的值限定为只能真或假,可以使用任意表达式,C++将把结果强制转换为bool类型。因此值为0的表达式将被转换为bool值false,导致循环结束。反之则会让循环继续进行。

#include <iostream>
int main()
{using namespace std;cout << "Enter the starting countdown valus: ";int limit;cin >> limit;int i;for (i = limit; i; i--)cout << "i= " << i << endl;cout << "Done now that i= " << i << endl;return 0;
}

for循环是入口条件循环,这意味着在每轮循环之前,都将计算测试表达式得知,当测试表达式为false时,将不会执行循环体。例如上面程序,我输入0时,将不会运行循环体。

update-expression(更新表达式)在每轮循环结束时执行,此时循环体已经执行完毕。通常,它用来对跟踪循环轮次的变量的值进行增减,然而它可以是任何有效的C++表达式,还可以是其他控制表达式。

for语句看上去有些像函数调用,因为它使用一个后面跟一对括号的名称。然而for是一个C++关键字,因此编译器不会将for视为一个函数。

13.2、回到for循环

下面使用for循环完成更多的任务,例如计算前16个阶乘:

#include <iostream>
const int ArSize = 16;
int main()
{using namespace std;long long factorials[ArSize];factorials[1] = factorials[0] = 1LL;for (int i = 2; i < ArSize; i++){factorials[i] = i * factorials[i - 1];}for (int i = 0; i < ArSize; i++){cout << i << "!= " << factorials[i] << endl;}return 0;
}

该程序创建了一个数组来存储阶乘值。元素0存储0!,元素1存储1!,依次类推。由于前两个阶乘都等于1,因此将该数组的前两个元素设置为1。第一个for语句用循环将每个阶乘设置为索引号与前一个阶乘的乘积。

13.3、修改步长

我们到目前为止循环演示都是循环计数加一或减一,其实可以通过修改更新表达式来修改补偿。

下面程序没有将i++用于更新表达式,而是使用表达式i+=by,by是用户输入的步长。

#include <iostream>
int main()
{using namespace std;cout << "Enter an integer: ";int by;cin >> by;cout << "Counting by " << by << "s:" << endl;for (int i = 0; i < 100; i += by)cout << i << endl;return 0;
}



当96+16=112>100,循环终止。

13.4、使用for循环访问字符串

for循环提供了一种依次访问字符串中每个字符串的方式。例如下面这个程序,让用户能够输入一个字符串,然后按相反的方向逐个字符地显示该字符串。

#include <iostream>
#include <string>
int main()
{using namespace std;cout << "Enter a word: ";string word;cin>>word;for (int i = word.size() - 1; i >= 0; i--)cout << word[i];cout << "\nBye.\n";return 0;
}



在这个程序中,可以使用string对象,也可以使用char数组,因为它们都让我们能够使用数组表示法来访问字符串中的字符。string类的size()获得字符串中的字符数;循环在其初始化表达式中使用这个值,将i设置为字符串最后一个字符的索引。为了反向计数,程序使用递减运算符(--)。

13.5、递增运算符(++)和递减运算符(--)

递增运算符和递减运算符是很常见的操作:将循环计数加一或减一。但是有两种变体,前置++/--x和后置x++/--。这两种对结果的影响是一致的,但是对于运行的时间是不同的。

前置++/--是修改后使用,而后置++/--是使用后修改,例如上面程序的i--,是让循环语句的主体运行完一起才进行减一。

13.6、复合语句

前面我们的for语句都只写了一句,如果我们要运行多条语句,那不是很麻烦吗,其实我们只要用两个花括号来构造一条复合语句。

#include <iostream>
int main()
{using namespace std;cout << "The Amazing Accounto will sum and average ";cout << "five numbers for you." << endl;cout << "Please enter five values: " << endl;double number;double sum = 0;for (int i = 1; i <= 5; i++){cout << "Value " << i << " : ";cin >> number;sum += number;}cout << "Five exquistite choices inded! ";cout << "They sum to " << sum << endl;cout << "and average to " << sum / 5 << "." << endl;cout << "The Amazing Accounto bids you adieu!";return 0;
}

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

语句块允许把两条或更多条语句放到按C++句法只能放一条语句的地方。逗号运算符对表达式完成同样的工作,允许将两个表达式放到C++句法只允许放一个表达式的地方。假设有一个循环,每轮让一个变量加一,另一个变量减一,在for循环控制部分的更新部分中完成这两项工作将非常方便。

#include <iostream>
#include <string>
int main()
{using namespace std;cout << "Enter a word:";string word;cin >> word;char temp;int i, j;for (j = 0, i = word.size() - 1; j < i; i--, j++){temp = word[i];word[i] = word[j];word[j] = temp;}cout << word << "\nDone." << endl;return 0;
}

在循环体中,程序将数组第一个元素和最后一个元素调换,从而将单词反转过来。然后再将j加一,i减一,让它们分别指向第2个元素和倒数第2个元素调换。直到j>=i循环才停止。

13.8、关系表达式

13.9、比较string类字符串

#include <iostream>
#include <string>
int main()
{using namespace std;string word = "?urina";for (char ch = 'a'; word != "furina"; ch++){cout << word << endl;word[0] = ch;}cout << "After loop ends,word is " << word << endl;return 0;}

上面程序使用了一个关系运算符,该运算符左边的是一个string对象,右边是一个C风格字符串:

string word = "?urina";

string类重载运算符!=的方式让你能够在下述的条件下使用它:至少一个操作数为string对象,另一个可以是string对象,或者C风格字符串。

该for循环不是计数循环,而是根据情况(word是否为furina)来确定是否停止。

相关文章:

C++初学(13)

13.1、for循环的组成部分 for循环的组成部分完成下面这些步骤&#xff1a; (1)设置初始值。 (2)执行测试&#xff0c;看看循环是否应当继续。 (3)执行循环操作。 (4)更新用于测试的值。 C循环设计中包含这要素&#xff0c;很容易识别&#xff0c;初始化、测试和更新操作工…...

目标检测之数据增强

一、概述 数据增强是一种通过人工或自动方式对数据进行修改或变换&#xff0c;以增加数据集规模和多样性的技术。在机器学习中&#xff0c;数据增强被广泛应用于解决数据稀缺、数据不平衡、数据噪声等问题&#xff0c;提高模型的泛化能力和鲁棒性。 二、为什么需要数据增强 …...

本地下载安装WampServer结合内网穿透配置公网地址远程访问详细教程

文章目录 前言1.WampServer下载安装2.WampServer启动3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 前言 Wamp 是一个 Windows系统下的 Apache PHP Mysql 集成安装环境&#xff0c;是一组常用来…...

一篇文章理清Java持久化脉络(关于JDBC、JPA、Hibernate、Spring Data JPA)

Java持久化 一、JDBC、JPA、Spring Data JPA 的定义及关系二、JDBC&#xff08;古老的东西&#xff0c;只需简单知道是啥&#xff09;1.1 JDBC概念1.2 JDBC示例 三、JPA&#xff08;第二代持久化&#xff0c;代表是Hibernate等框架&#xff09;3.1 JPA概念3.2 JPA示例 四、Spri…...

【数学分析笔记】第2章第1节实数系的连续性(1)

2. 数列极限 2.1 实数系的连续性 人类对数系认识的历史&#xff1a; 人类最早对数系的认识是自然数集合 N \mathbb{N} N&#xff0c;自然数系对加法和乘法是封闭的&#xff08;这里的封闭是指&#xff1a;若 m ∈ N , n ∈ N ⇒ m n ∈ N , m n ∈ N m\in\mathbb{N},n\in\ma…...

Speech Synthesis (LASC11062)

大纲 Module 1 – introductionModule 2 - unit selectionModule 3 - unit selection target cost functionsModule 4 - the databaseModule 5 - evaluationModule 6 - speech signal analysis & modellingModule 7 - Statistical Parametric Speech Synthesis (SPSS)Modu…...

拟合与插值|线性最小二乘拟合|非线性最小二乘拟合|一维插值|二维插值

挖掘数据背后的规律是数学建模的重要任务&#xff0c;拟合与插值是常用的分析方法 掌握拟合与插值的基本概念和方法熟悉Matlab相关程序实现能够从数据中挖掘数学规律 拟合问题的基本提法 拟合问题的概念 已知一组数据(以二维为例)&#xff0c;即平面上n个点 ( x i , y i ) …...

《python语言程序设计》2018版第7章第05题几何:正n边形,一个正n边形的边都有同样的长度。角度同样 设计RegularPolygon类

结果和代码 这里只涉及一个办法 方法部分 def main():rX, rY eval(input("Enter regular polygon x and y axis:"))regular_num eval(input("Enter regular number: "))side_long eval(input("Enter side number: "))a exCode07.RegularPol…...

使用Virtio Driver实现一个计算阶乘的小程序——QEMU平台

目录 一、概述 二、代码部分 1、Virtio 前端 (1) User Space (2) Kernel Space 2、Virtio 后端 三、运行 QEMU Version&#xff1a;qemu-7.2.0 Linux Version&#xff1a;linux-5.4.239 一、概述 本篇文章的主要内容是使用Virtio前后端数据传输的机制实现一个计算阶乘的…...

【PyCharm】配置“清华镜像”地址

文章目录 前言一、清华镜像是什么&#xff1f;二、pip是什么&#xff1f;三、具体步骤1.复制镜像地址2.打开PyCharm&#xff0c;然后点击下图红框的选项3.在弹出的新窗口点击下图红框的选项进行添加4.在URL输入框中粘贴第一步复制的地址&#xff0c;名字可以不更改&#xff0c;…...

IO器件性能评估

整体逻辑&#xff1a;需要先了解到读写速率的差异&#xff0c;在明确使用场景。比如应用启动过程中的IO主要是属于随机读的io 评估逻辑&#xff1a; UFS 与 eMMC主要差别在io读写能力&#xff1a; 1&#xff0c;对比UFS、eMMC的规格书标注的io读写能力 ufs spec : sequentia…...

在js中判断对象是空对象的几种方法

使用 Object.keys() 方法 Object.keys() 方法返回对象自身的可枚举属性名称组成的数组。如果数组的长度为 0&#xff0c;那么对象是空的。 function isEmptyObject(obj) {return Object.keys(obj).length 0 && obj.constructor Object; }const obj1 {}; const obj2…...

【整理】后端接口设计和优化相关思路汇总

文章目录 明确的接口定义和文档化使用RESTful设计规范分页和过滤合理使用缓存限流与熔断机制安全性设计异步处理与后台任务接口参数校验&#xff08;入参和出参&#xff09;接口扩展性考虑核心接口&#xff0c;线程池隔离关键接口&#xff0c;日志打印接口功能单一性原则接口查…...

docker 部署 sql server

众所周知&#xff0c;sql server不好装&#xff0c;本人之前装了两次&#xff0c;这个数据库简直是恶心。 突然想到&#xff0c;用docker容器吧 果然可以 记得放开1433端口 还有 记得docker加速&#xff0c;不然拉不到镜像的最后工具还是要装的&#xff0c;这个就自己研究吧。 …...

微信云开发云存储 下载全部文件

一、安装 首先按照这个按照好依赖&#xff0c;打开cmd 安装 | 云开发 CloudBase - 一站式后端云服务 npm i -g cloudbase/cli 安装可能遇到的问题 ‘tcb‘ 不是内部或外部命令&#xff0c;也不是可运行的程序或批处理文件。-CSDN博客 二、登录 在cmd输入 tcb login 三、…...

1、巡线功能实现(7路数字循迹)

一、小车运行 1.PWM初始化函数 (pwm.c中编写) 包括四个轮子PWM通道使用的GPIO接口初始化、定时器初始化、PWM通道初始化。 void PWM_Init(uint16_t arr,uint16_t psc); 2.PWM占空比设置函数 (pwm.c中编写) 此函数调用了四个通道设置占空比的函数&#xff0c;作用是方便修改四…...

来了...腾讯内推的软件测试面试PDF 文档(共107页)

不多说&#xff0c;直接上干货&#xff08;展示部分以腾讯面试纲要为例&#xff09;完整版文末领取 通过大数据总结发现&#xff0c;其实软件测试岗的面试都是差不多的。常问的有下面这几块知识点&#xff1a; 全网首发-涵盖16个技术栈 第一部分&#xff0c;测试理论&#x…...

Android大脑--systemserver进程

用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章&#xff0c;技术文章也可以有温度。 本文摘要 系统native进程的文章就先告一段落了&#xff0c;从这篇文章开始写Java层的文章&#xff0c;本文同样延续自述的方式来介绍systemserver进程&#xff0c;通过本文您将…...

python项目部署:Nginx和UWSGI认识

Nginx: HTTP服务器&#xff0c;反向代理&#xff0c;静态资源转发&#xff0c;负载均衡&#xff0c;SSL终端&#xff0c;缓存&#xff0c;高并发处理。 UWSGI: Python应用程序服务器&#xff0c;WSGI兼容&#xff0c;多进程管理&#xff0c;快速应用部署&#xff0c;多种协议支…...

【区块链+金融服务】农业大宗供应链线上融资平台 | FISCO BCOS应用案例

释放数据要素价值&#xff0c;FISCO BCOS 2024 应用案例征集 粮食贸易受季节性影响显著。每年的粮收季节&#xff0c;粮食收储企业会根据下游订单需求&#xff0c;从上游粮食贸易商或粮农手 里大量采购粮食&#xff0c;并分批销售给下游粮食加工企业&#xff08;面粉厂、饲料厂…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

边缘计算医疗风险自查APP开发方案

核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

云原生安全实战:API网关Kong的鉴权与限流详解

&#x1f525;「炎码工坊」技术弹药已装填&#xff01; 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关&#xff08;API Gateway&#xff09; API网关是微服务架构中的核心组件&#xff0c;负责统一管理所有API的流量入口。它像一座…...

08. C#入门系列【类的基本概念】:开启编程世界的奇妙冒险

C#入门系列【类的基本概念】&#xff1a;开启编程世界的奇妙冒险 嘿&#xff0c;各位编程小白探险家&#xff01;欢迎来到 C# 的奇幻大陆&#xff01;今天咱们要深入探索这片大陆上至关重要的 “建筑”—— 类&#xff01;别害怕&#xff0c;跟着我&#xff0c;保准让你轻松搞…...

【 java 虚拟机知识 第一篇 】

目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...

命令行关闭Windows防火墙

命令行关闭Windows防火墙 引言一、防火墙:被低估的"智能安检员"二、优先尝试!90%问题无需关闭防火墙方案1:程序白名单(解决软件误拦截)方案2:开放特定端口(解决网游/开发端口不通)三、命令行极速关闭方案方法一:PowerShell(推荐Win10/11)​方法二:CMD命令…...