IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++学习笔记25:for 循环 -> 正文阅读

[C++知识库]C++学习笔记25:for 循环

目录

一、for 循环的组成部分

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

三、组合赋值运算符

四、复合语句(语句块)

五、逗号运算符

六、关系表达式


一、for 循环的组成部分

? ? ? ? for 循环为执行重复的操作提供了循序渐进的步骤。for 循环由控制部分(初始化表达式、测试表达式和更新表达式,三个表达式用分号隔开)和循环体组成,如图所示,它们完成下面这些步骤:

? ? ? ? ①. 由初始化表达式设置初始值(仅在开始 for 循环时执行一次初始化)。?
? ? ? ? ②. 由测试表达式执行测试,看看循环是否应当继续进行。
? ? ? ? ③. 执行循环体部分的循环操作。
? ? ? ? ④. 由更新表达式更新用于测试的值。
? ? ? ?下面是 for 循环的一个示例程序:

//forloop.cpp -- introducing the for loop
#include <iostream>
using namespace std;

int main()
{
	int i;                                //创建计数器
	for ( i = 0; i < 5; i++)              //将计数器初始化为0,然后判断计数器是否<5
		cout << "C++ knows loops.\n";     //如果计数器<5,执行for循环内部语句,然后计数器递增i++,继续判断
	cout << "C++ knows when to stop.\n";  //当计数器不<5时,跳出for循环,执行for循环后面的语句
	return 0;
}

? ? ? ? 示例程序中在 for 循环之前声明了一个整型变量 i 作为 for 循环的计数器,C++中同样允许用户在初始化表达式中声明变量,如示例程序中可省略 for 循环之前的变量声明,直接在 for 循环控制部分的初始化表达式中声明:
? ? ? ? for ( int i = 0; i < 5; i++)
????????for 循环是入口条件(entry-condition)循环,即在每轮循环之前,都将计算测试表达式的值,当测试表达式为 true 时执行循环体,当测试表达式为 false 时,终止循环。

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

? ? ? ? 这两个运算符执行两种极其常见的循环操作:将循环计数加1或减1。?这两个运算符都有两种变体,前缀(prefix)版本位于操作数之前,如 ++x;后缀(postfix)版本位于操作数之后,如 x++。两个版本对操作数的影响是一样的(x=x+1),但是影响的时间不同,如下面的示例程序:

//plus_one.cpp -- 递增运算符和递减运算符
#include <iostream>

int main()
{
	using std::cout;
	int a = 20;
	int b = 20;
	cout << "a = " << a << ": b = " << b << "\n";          // a=20,b=20
	cout << "a++ = " << a++ << ": ++b = " << ++b << "\n";  // 20,21
	cout << "a = " << a << ": b = " << b << "\n";          // 21,21
	return 0;
}

? ? ? ? a++ 意味着使用 a 的当前值计算表达式,然后将 a 的值加1;而 ++b 的意思是先将 b 的值加1,然后使用新的值来计算表达式。示例:
????????x = 5,y = x++ 或 y = ++x
????????x++ 意味着先用? x的当前值计算表达式,再将 x+1,所以 y = 5,x = 6;
????????++x 意味着先将 x+1,再计算表达式,所以 y = 6,x = 6。
? ? ? ? 千万不要在同一条语句对同一个值递增或递减多次。
? ? ? ? 显然,如果变量被用于某些目的(如用作函数参数或给变量赋值),使用前缀格式和后缀格式的结果将不同;如果递增(递减)表达式的值没有被使用(如 for 循环中的更新表达式),则二者没有区别(对于用户定义的类型,前缀版本效率更高)。

? ? ? ? 可以结合递增或递减运算符和解除引用(*)运算符来修改指针指向的值。将什么解除引用、将什么递增(递减)取决于运算符的位置和优先级:
????????前缀递增、前缀递减和解除引用运算符的优先级相同,以从右到左的方式进行结合。例如:
? ? ? ? *++pt——先将 ++ 应用于 pt,然后将 * 应用于递增后的 pt;
? ? ? ? ++*pt——先取得 pt 指向的值,然后将这个值加1,此时 pt 仍指向原地址。
? ? ? ? 后缀递增和后缀递减的优先级相同,但比前缀运算符的优先级高,这两个运算符以从左到右的方式进行结合。例如:
? ? ? ? (*pt)++——先取得 pt 指向的值,然后将这个值加1,此时 pt 仍指向原地址;
? ? ? ? *pt++——先取得 pt 指向的值,然后将 pt 递增,此时 pt 指向下一个元素的地址。

三、组合赋值运算符

? ? ? ? 每个算术运算符都有其对应的组合赋值运算符,如下表所示:

组合赋值运算符
操作符作用(L为左操作数,R为右操作数)
+=将 L+R 赋给 L
-=将 L-R 赋给 L
*=将 L*R 赋给 L
/=将 L/R 赋给 L
%=将 L%R 赋给 L

四、复合语句(语句块)

? ? ? ? 前面提到 for 循环的循环体必须是一条语句,如果要在循环体中包含多条语句,C++提供了复合语句(语句块、代码块)的方式:由一对花括号和它们包含的语句组成,被视为一条语句。?如下面示例程序所示:

//block.cpp -- 复合语句(语句块)
#include <iostream>
using namespace std;

int main()
{
	cout << "The Amazing Accounto will sum and average ";
	cout << "five numbers for you.\n";
	cout << "Please enter five values:\n";
	double number;
	double sum = 0.0;
	//用两个花括号构造一条复合语句(代码块)
	for (int i = 1; i <= 5; i++)
	{                                          //语句块开始花括号
		cout << "Value " << i << ": ";         //花括号中所包含的语句被视为一条语句
		cin >> number;
		sum += number;
	}                                          //语句块结束花括号
	cout << "Five exquisite choices indeed! ";
	cout << "They sum to " << sum << endl;
	cout << "and average to " << sum / 5 << ".\n";
	cout << "The Amazing Accouto bids you adieu!\n\n";
	return 0;
}

??????????语句块的特性:在外部语句块中定义的变量在内部语句块中也是被定义了的。如果在语句块中定义了一个新的变量,则仅当程序执行该语句块中的语句时,该变量才存在,执行完该语句块后,变量将被释放,这表明此变量仅在该语句块中是可用的。示例:
????????int x = 20;
????????{
????????????????int y = 100;
????????????????cout << x << endl;
????????????????cout << y << endl;
????????}
????????cout << x << endl;? ? ? ? ? ? ? ? //x=20,因为 x 是在语句块之前声明的
????????cout << y << endl; ? ? ? ? ? ? ? ?//不能输出 y,因为 y 是在上面语句块中声明的
????????如果在一个语句块中声明一个变量,而外部语句块中也有一个这种名称的变量,则在声明位置到内部语句块结束的范围内,新变量将隐藏旧变量,然后旧变量再次可见。示例:
????????int m = 100;
????????{
????????????????cout << m << endl; ? ? ? ?//使用m的原始值,输出100
????????????????int m = 50; ? ? ? ? ? ??
????????????????cout << m << endl; ? ? ? ?//使用m的新值,输出50
????????}
????????cout << m << endl;? ? ? ? ? ? ? ? //使用m的原始值,输出100

五、逗号运算符

? ? ? ? 在C++中,可以使用逗号运算符将两个表达式放到C++句法只允许放一个表达式的地方。如下面示例程序中 for 循环控制部分的初始化表达式和更新表达式:

// forstr2.cpp -- reversing an array
#include <iostream>
#include <string>

int main()
{
	using namespace std;
	cout << "Enter a word: ";
	string word;
	getline(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.\n";
	return 0;
}

????????逗号并不总是逗号运算符,例如在声明变量时(int i, j),逗号只是一个列表分隔符。 上面的示例程序中可以去掉 int i, j;的变量声明语句,直接在 for 循环控制部分的初始化表达式中利用逗号运算符写成:int?j = 0, i = word.size() - 1; 。
? ? ? ? 逗号运算符的特性:首先,它确保先计算第一个表达式,然后计算第二个表达式。其次,C++规定,逗号表达式的值是第二部分的值。

六、关系表达式

? ? ? ? 在C++的关系表达式中,可利用关系运算符对数字、字符(不能将它们用于C-风格字符串,但可用于 string 类对象,C-风格字符串应使用库函数 strcmp()进行比较)进行比较,对于所有关系表达式,如果比较结果为真,则其值将为 true,否则为 false。C++中的关系运算符如下表所示:

关系运算符
操作符含义
<小于
<=小于等于
==等于
>大于
>=大于等于
!=不等于

? ? ? ? 注意:不要混淆关系运算符(==)和赋值运算符(=)!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:54:18  更:2021-09-27 13:56:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/19 23:27:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码