网站首页 > 基础教程 正文
循环语句(loop statement)根据一个表达式的计算结果是否为true,决定是否重复地执行一个语句块。主要有三种循环语句:for语句、while语句和do while语句。(建议先学习《语句和条件语句介绍》)
(1) for语句
for语句的语法形式如下:
for(初始语句; 循环判断条件; 迭代表达式)
{
语句块
}
“初始化语句”一般用来对循环控制变量进行初始化赋值,可以为空语句。
“循环判断条件”在每次循环开始前均执行一次,仅当其计算结果为true时才可以执行“语句块”。一旦其计算结果为false,则循环终止,该循环语句执行结束。所以循环执行次数一般等于该判断计算为true的次数。
“迭代表达式”在每轮循环完成后(即“语句块”执行完后)执行一次,该表达式一般用来修改循环控制变量。如果循环判断条件首次计算结果为false,则它永远不会被执行。
举个例子,如下for语句:
for(int iIndex=0; iIndex<2; ++iIndex)
{
std::cout << iIndex << std::endl;
}
则该语句执行过程完整步骤如下:
1. 执行初始化语句,即int iIndex=0;
2. 首次执行循环判断条件,即iIndex<2;此时变量iIndex值为0,该表达式结果为true,则进入循环体
3. 执行循环体语句块,即std::cout << iIndex << std::endl;
4. 执行迭代表达式,即++iIndex。变量iIndex值变化为1
5. 第二次执行循环判断条件,即iIndex<2;此时变量iIndex值为1,该表达式结果为true,则进入循环体
6. 执行循环体语句块,即std::cout << iIndex << std::endl;
7. 执行迭代表达式,即++iIndex。变量iIndex值变化为2
8. 第三次执行循环判断条件,即iIndex<2;此时变量iIndex值为2,该表达式结果为false。整个for语句结束
可参见MFC库文件“vector”里如下代码的用法:
(2) while语句
while语句的语法形式如下:
while(循环判断条件)
{
语句块
}
其语句含义为:当循环判断条件结果为true时,循环执行语句块,直至循环判断条件结果为false为止。
对比for语句,while语句语法结构未显式设置“初始化语句”和“迭代表达式”。该语句在实际使用时,一般将“初始化语句”仿真循环语句前,将“迭代表达式”包含在语句块里,即:
初始化语句
while(循环判断条件)
{
语句块
迭代表达式
}
显而易见,for语句和while语句可以很方便地互相转化。
可参见MFC库文件“wincore.cpp”里如下代码的用法:
(3) do while语句
do while语句的语法形式如下:
do
{
语句块
}
while(循环判断条件);
注意:do while语句需以分号(;)结束
其语句含义为:循环执行语句块,直至循环判断条件结果为false为止。
对比while语句,do while语句特点是其循环语句块至少会被执行一次。
可参见MFC库文件“afxwin.h”里如下代码的用法:
(4)break语句
break语句可用来终止整个循环语句。当循环语句多层嵌套时,break仅能跳出包含该语句的最里面循环语句。如:
for(int iIndex=0; iIndex<10; ++iIndex)
{
for(int iIndex2=10; iIndex2>0; --iIndex2)
{
if (iIndex > iIndex2)
{
break;
}
}
}
该break语句每次执行均会终止iIndex2变量所在的for循环语句。
(5)continue语句
continue语句可用来跳过当前正在执行的循环体语句块里的后续语句,但不能终止整个循环语句。如:
for(int iIndex=0; iIndex<10; ++iIndex)
{
if (5 == iIndex)
{
continue;
}
std::cout << iIndex << std::endl;
}
该continue语句会在第6次执行循环语句块时跳过,导致下方的std::cout打印语句不被执行。但后续的第7~10次循环依然会执行打印。
(6) 实用说明
- for语句的“初始化语句”应避免使用空语句,且尽量仅初始化一个循环控制变量。
- “迭代表达式”应尽量简单,一般使用自增、自减操作符。
- 复杂的循环语句应设置合理的防护,避免死循环。
- 多层循环嵌套应计算时间复杂度,避免程序执行效率过低。
- 多使用STL提供的算法来替代循环语句。
学习目标“最简单的循环语句介绍”已完成[再见]
猜你喜欢
- 2024-11-11 C++经典算法问题:背包问题(迭代+递归算法)!含源码示例
- 2024-11-11 C++进阶教程:C#嵌套循环 c++嵌套循环break
- 2024-11-11 C++经典算法 穷举法 穷举算法的优点
- 2024-11-11 C++数据结构-- 递归 排序 c++使用递归函数实现全排列
- 2024-11-11 如何使用c++发送window消息通知 c++怎么发给别人
- 2024-11-11 C++ replace函数-C++字符串替换函数
- 2024-11-11 C++学习:循环练习题(一) c++循环结构例题解析
- 2024-11-11 C/C++最细循环解析 c++循环结构23道题
- 2024-11-11 网络编程——C++实现socket通信(TCP)
- 2024-11-11 C++ GESP 2023年6月真题 c++历年真题解析
- 最近发表
- 标签列表
-
- gitpush (61)
- pythonif (68)
- location.href (57)
- tail-f (57)
- pythonifelse (59)
- deletesql (62)
- c++模板 (62)
- css3动画 (57)
- c#event (59)
- linuxgzip (68)
- 字符串连接 (73)
- nginx配置文件详解 (61)
- html标签 (69)
- c++初始化列表 (64)
- exec命令 (59)
- canvasfilltext (58)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- node教程 (59)
- console.table (62)
- c++time_t (58)
- phpcookie (58)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)