C/C++之while(do-while)详细讲解

article/2025/9/15 22:31:47

目录

while循环有两个重要组成部分:

while 是一个预测试循环

无限循环

do-while 循环


while循环有两个重要组成部分:

  1. 进行 true 值或 false 值判断的表达式;
  2. 只要表达式为 true 就重复执行的语句或块;


图 1 显示了 while 循环的一般格式,右侧流程图直观地描绘了其工作原理。


图 1 while 循环的语句结构及流程图


现在来看一看 while 循环的每个部分。第一行,有时称为循环头,由关键字 while 组成,后跟待测试的条件,括在括号中。条件由任何可被判断为 true 或 false 的表达式表示。接下来是循环体,它包含一个或多个 C++语句。

循环的工作原理是,首先判断条件表达式的值,如果它是真的,则循环体中的每个语句都被执行;然后,再次测试条件,如果条件表达式仍然为 true,则循环体中的每个语句将再次被执行。如此循环往复,直到条件表达式被判断为 false。

请注意,与 if 语句一样,在有条件执行的主体中的每个语句都以分号结尾,但在括号中的条件表达式后面没有分号,这是因为 while 循环不完整,后面没有跟随的语句。而且,与 if 语句一样,当循环体包含两个或多个语句时,这些语句必须用大括号括起来。当循环的主体只包含一个语句时,可以省略括号。

基本上,while 循环就像是一个可以执行一遍又一遍的 if 语句。只要括号中的表达式为 true,则有条件执行的语句将不断重复。

下面的程序使用了 while 循环打印“Hello”字符串 5 次。

 
#include <iostream>
using namespace std;int main()
{int count = 1;while (count<= 5){cout << "Hello ";count = count + 1;}cout << "\nThat's all!\n";return 0;
}

程序输出结果:

Hello Hello Hello Hello Hello
That's all!

分析这个程序。在第 6 行中,整数变量 count 被定义并用值 1 初始化。在第 7 行中,while 循环以下面的语句开头:

while (count<= 5)

该语句测试变量 count 以确定其值是否小于或等于 5。因为它确实小于 5,所以循环体(第 9 行和第 10 行)中的语句被执行:

cout << "Hello   ";
count = count + 1;

第 9 行中的语句将显示字符串“Hello”。第 10 行中的语句则给变量 count 加上 1,使其值变成了 2。这是循环体中的最后一个语句,因此在执行之后循环又一次开始。它再次测试表达式“count<=5”,并且由于仍然为 true,循环体中的语句将再次执行,该循环不断重复,直到变量 count 等于 6,使表达式“count<=5”为 false,然后退出循环,如图 2 所示。


图 2 while 循环工作原理


循环的每一次执行称为迭代。以上示例中的循环将执行 5 次迭代,直至表达式“count<=5”被测试并且发现为 false,导致循环终止,然后程序继续执行该循环之后的语句。控制循环迭代次数的变量称为循环控制变量,在上面的例子中,count 就是循环控制变量。

while 是一个预测试循环

while 循环是一个预测试循环。这意味着它会在每次迭代之前测试其状态。如果测试表达式为 false,则循环将永远不会迭代。如果要确保一个 while 循环至少执行一次,则必须初始化相关的数据,使测试表达式一开始即为 true。

例如,注意上面程序中变量 count 的定义:

int count = 1;

count 变量被初始化为值 1。如果数字已经被初始化为大于 5 的值,则循环将永远不会执行,如下面的程序段所示:

int count = 6;
while (count <= 5)
{cout << "Hello ";count = count + 1;
}

无限循环

除极少数情况外,循环必须包括一种终止方式。这意味着循环中的某些内容必须最终使测试表达式为 false。在上面程序中,当表达式“count <= 5”变为 false 时,循环停止。

如果循环没有停止的方式,则称为无限循环。无限循环将持续重复,直到程序中断,示例如下:

int count = 1;
while (count<= 5)
{cout << "Hello ";
}

这是一个无限循环,因为它不包含更改 count 变量值的语句。每次测试表达式“count <= 5”时,count 的值都是 1。

小心分号

通过在 while 循环的第一行之后意外地放置一个分号也可以创建无限循环,示例如下:

int count = 1;
while (count <= 5) ; //该分号是一个错误
{cout << "Hello ";count = count + 1;
}

因为编译器在发现开始语句块的大括号之前看见了第一行末尾的分号,所以它会在分号的位置结束循环。尤其是它会将分号前面丢失的语句解释为空语句,也就是什么都不做的语句,然后将 while 语句和它后面的任何内容断开。

对于编译器来说,整个循环看起来就像下面这样:

while(count<= 5);

这个 while 循环将持续执行空语句,当然它永远不会执行任何操作。该程序似乎“陷入迷惘”,因为没有任何屏幕输出,也不会显示任何活动。

不要忘记大括号

在编写循环语句时,如果有条件执行的语句是一个语句块,则不要忘记将所有的语句都包含在一组大括号中。如果大括号意外被忽略,则 while 语句有条件执行的仅仅是下一个语句,请看下面的代码示例:

int count = 1;
//该循环忘记使用大括号
while (count <= 5)cout << "Hello ";count = count + 1;

在这段代码中,只有一个语句,也就是 cout 语句,是在 while 循环的主体中。给变量 count 加 1 的语句不在循环体内,所以 count 的值保持为 1,循环测试条件永远为 true。循环将一遍又一遍地打印“Hello”字符串,直到用户停止程序。

不要混清 == 与 =

循环的另一个常见陷阱是,在打算使用 == 运算符时,却意外地使用了 = 运算符。例如,以下示例就是一个无限循环,因为作为循环条件的测试表达式每次都给 remainder 赋值为 1,而不是测试 remainder 是否等于 1:

while (remainder = 1) //错误:条件表达式为赋值语句
{cout << "Enter a number: ";cin >> num;remainder = num % 2;
}

请记住,任何非零值都将被判断为 true。

do-while 循环

除了 while 循环之外,C++ 还提供了 do-while 循环。do-while 循环看起来类似于把一个 while 循环倒过来。图 3 显示了其格式和流程图,右侧流程图直观地描绘了其工作原理。


图 3 do-while-循环的语句结构及流程图


与 while 循环一样,如果循环体中只有一个有条件执行的语句,则可以省略大括号。注意,do-while 循环必须在测试表达式的右括号后用分号终止。

除了外观形式,do-while 循环和 while 循环之间的区别是 do-while 是一个后测试循环,这意味着在循环结束时,也就是在每次迭代完成后,才测试其表达式。因此,即使测试表达式在开始时为 false,do-while 也至少要执行一次迭代。

例如,在以下 while 循环中,cout 语句根本不会执行:

int x = 1;
while (x < 0)cout << x << endl;

但是在以下 do-while 循环中的 cout 语句将执行一次,因为 do-while 循环在迭代结束之前不会判断表达式 x<0:

int x = 1;
docout << x << endl;
while (x < 0);

如果要确保循环执行至少一次,则应使用 do-while 循环。

拜拜~


http://chatgpt.dhexx.cn/article/BMwZn8u6.shtml

相关文章

do{...}while(0)的用法

首发于微信公众号&#xff1a;【码农在新加坡】&#xff0c;欢迎关注。 个人博客网站&#xff1a;do{...}while(0)的用法 零.导引 第一次见到 do{...}while(0)是在学习libevent的时候&#xff0c;看到里面有很多类似 #define TT_URI(want) do { \char *ret evhttp_uri_…

if,while选择结构和while,dowhile,for循环的使用

什么是if和while选择结构 if 选择结构是根据句条件判断之后再做处理的一种语法结构&#xff0c; 语法如下&#xff1a; while是一种先判断再执行循环体的结构&#xff1b; 当while循环条件为真时才执行循环体&#xff0c;然后再判断循环条件&#xff0c;如果条件为真&#xf…

while及do while语句

编写程序时&#xff0c;许多问题都要用到循环控制。循环结构也是结构化程序设计的基本结构之一&#xff0c;因此熟练地掌握循环结构是程序设计最基本的要求。While循环、do while循环、for循环语句&#xff0c;3种循环语句在一般情况下可以相互转换 While 及dowhile语句 Whil…

代码执行顺序之循环执行:forwhiledowhile嵌套循环

代码执行顺序之循环执行 循环执行的分类 for循环while循环dowhile循环 for循环 语法&#xff1a; for(循环初始化表达式&#xff1b;循环条件表达式&#xff1b;循环后的操作表达式){ ​ // 循环体 } 执行步骤分析&#xff1a; 循环初始化表达式最先执行&#xff0c;并且只执…

dowhile的学习

dowhile的学习 dowhile 的概念及他与while的区别 package javaxunhuanjiegou; ​ public class DoWhile {public static void main(String[] args) {int a 0;int sum 0;do {sum sum a;a;} while (a < 100);System.out.println(sum);} } ​ 我们来跟直观的感受一下 于…

循环结构 --> do while循环

do while循环 do {循环体;} while(条件表达式);执行循环体 > 判断条件表达式是否成立> 若成立&#xff0c;则执行循环体 > 判断条件表达式是否成立> 若不成立&#xff0c;则循环结束do while循环主要用于至少执行一次循环体的场合中。package demo;/*编程实现do wh…

do while循环和whil循环(内含流程图)

C语言的三大循环语句除去for循环语句还剩下do while和while循环&#xff0c;因为这两个很相似所以这里放在一起讲解。希望读完本文能对你有所帮助。 do while循环和whil循环 一、do...while二、while 一、do…while do while的语法循环结构如下所示。 do while的逻辑循环结构…

SQL中join操作后面的on与where的区别

join关键字的作用是将多个表按一定的条件联合起来&#xff0c;从而可以实现从多个表中获取数据 在join后面可以接on条件和where条件&#xff0c;在这里我主要就是说这两者之间的差别 建立两张简单的用来测试的表并添加数据&#xff0c;如下所示&#xff0c;一张表名为id_name…

MySql 各种join的使用方法

具体详解如下 1 INNER JOIN(内连接) SELECT * FORM TABLE_A A INNER JOIN TABLE_B B ON A.KEY B.KEY 2 LEFT JOIN (左连接) SELECT * FORM TABLE_A A LEFT JOIN TABLE_B B ON A.KEY B.KEY 3 RIGHT JOIN (右连接) SELECT * FROM TABLE_A A RIGHT TABLE_B B ON A.KE…

SQL 中JOIN ON 的AND条件设置

关于在A LEFT JOIN B ON A.id B.id 后面跟AND 条件的测试。 有如下的结构数据&#xff1a; 注意此LEFT ON 跟AND 限制A表的场景&#xff1b; dat a.sql 1.43KB 有如下的表结构 使用SQL进行查询&#xff1a; &#xff08;1&#xff09;SELECT * FROM table_name a LEFT J…

简单说说SQL中Join的使用

最近工作中&#xff0c;遇到了一起由于慢SQL引起DB CPU > 90% &#xff0c;数据库hang住。。最终导致其他业务查询统统失败。 细看下来是由于几张大表Join关联查询引起的&#xff0c;故障本身很常见&#xff0c;不过让我想到有必要讲讲如何规避Join的问题。 以下的讨论都是基…

SQL-JOIN全解析

SQL-JOIN全解析 一、SQL JOIN的作用是什么&#xff1f;二、四种JOIN的区别三、如何使用各种join&#xff08;一&#xff09;准备测试数据&#xff08;二&#xff09;左连接&#xff08;三&#xff09;右连接&#xff08;四&#xff09;内连接&#xff08;五&#xff09;外连接 …

SQL中join语句详解

1.inner join(内连接) 只返回匹配的行。 select * from table_a a inner join table_b b on a.name b.name 2.left join(左外连接) 返回左表的全部数据&#xff0c;和右表中满足on条件的行&#xff0c;如果左表的行在右表中没有匹配的数据&#xff0c;那么这一行中右表对应…

SQL Server 数据库常用操作:多表联查(JOIN...ON语句的使用)

1.使用传统连接方式查询 (1). 有两张表Book(BookID,BookName,TypeID,AuthorID,…)&#xff0c;BookType(TypeID,TypeName)&#xff0c;查询每本书的书名和图书类型。 SELECT BookName, TypeName FROM Book, BookType WHERE Book.TypeID BookType.TypeID(2). 有三张表Book(Boo…

Oracle SQL中join方式总结

在ORACLE数据库中&#xff0c;表与表之间的SQL JOIN方式有多种&#xff08;不仅表与表&#xff0c;还可以表与视图、物化视图等联结&#xff09;。SQL JOIN其实是一个逻辑概念&#xff0c;像NEST LOOP JOIN、 HASH JOIN等是表连接的物理实现方式。 为了更直观的了解以上join方式…

SQL语句中的join用法

SQL中join的各种用法 1.自然连接&#xff08;natural join&#xff09; 自然连接将表中具有相同名称的列自动进行匹配&#xff0c;自然连接不必指定任何同等连接条件也不能认为指定哪些列需要被匹配&#xff0c;自然连接得到的结果表中&#xff0c;两表中名称相同的列只出现一次…

sql中join的各种用法

sql中join的用法 sql中join的含义可以理解为单词“join”&#xff0c;用来连接两张表&#xff0c;join所有连接方式可以分为&#xff1a; 内连接&#xff0c;外连接&#xff0c;右连接&#xff0c;左连接&#xff0c;自然连接 上面这张图已经很清晰的表明了各种连接方式的语法…

SQL Server中JOIN的使用方法总结

JOIN 分为&#xff1a;内连接&#xff08;INNER JOIN&#xff09;、外连接&#xff08;OUTER JOIN&#xff09;。 其中&#xff0c;外连接分为&#xff1a;左外连接&#xff08;LEFT OUTER JOIN&#xff09;、右外连接&#xff08;RIGHT OUTER JOIN&#xff09;、全外连接&…

sql 语法中 join 的所有用法总结(简单例子)

join 常见的用法有&#xff1a; 目录 left join (left outer join) right join (right outer join) join (inner join) full join&#xff08;full outer join 、outer join&#xff09; cross join 说明&#xff1a;left join 就是 left outer join、 right join 就是 r…

SQL语句各种join用法(图文)

1、INNER JOIN(内连接) select * from table A A inner join table B B on A.key B.key //内连接 2、LEFT JOIN(左连接) select * from table A A left join table B B on A.key B.key //左连接 3、RIGHT JOIN(右连接) select * from table A A right join table B B on A…