【C++基础】7. 控制语句

本文详细介绍了C++中的循环结构(for、while、do...while以及控制语句break和continue),包括它们的用法和无限循环的实现。同时,还讲解了选择语句如if、else、switch和ternary操作符(?...:)的应用。
摘要由CSDN通过智能技术生成

【 1. 循环 】

1.1 循环类型

循环类型描述
for 循环多次执行一个语句序列,简化管理循环变量的代码。
while 循环当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
do…while 循环除了它是在循环主体结尾测试条件外,其他与 while 语句类似。
嵌套循环我们可以在 while、for 或 do…while 循环内使用一个或多个循环。
  • for 循环
/*
1、init 会首先被执行,且只会执行一次。这一步允许您声明并初始化任何循环控制变量。您也可以不在这里写任何语句,只要有一个分号出现即可。
2、接下来,会判断 condition。如果为真,则执行循环主体。如果为假,则不执行循环主体,且控制流会跳转到紧接着 for 循环的下一条语句。
3、在执行完 for 循环主体后,控制流会跳回上面的 increment 语句。该语句允许您更新循环控制变量。该语句可以留空,只要在条件后有一个分号出现即可。
4、条件再次被判断。如果为真,则执行循环,这个过程会不断重复(循环主体,然后增加步值,再然后重新判断条件)。在条件变为假时,for 循环终止。
*/
for ( init; condition; increment )
{
   // 这里放代码块 
}
  • while 循环
while(condition) //condition 可以是任意的表达式,当为任意非零值时都为真。当条件为真时执行循环。当条件为假时,程序流将继续执行紧接着循环的下一条语句。
{
   // 这里放代码块 
}
  • do…while 循环
/*
条件表达式出现在循环的尾部,所以循环中的 代码块 会在条件被测试之前至少执行一次。
如果条件为真,控制流会跳转回上面的 do,然后重新执行循环中的 代码块 。这个过程会不断重复,直到给定条件变为假为止。
*/
do
{
   // 这里放代码块 

}while( condition );

1.2 循环控制语句

  • 循环控制语句更改执行的正常序列。当执行离开一个范围时,所有在该范围中创建的自动对象都会被销毁。C++ 提供了下列的控制语句。
控制语句描述
break 语句终止 loop 或 switch 语句,程序流将继续执行紧接着 loop 或 switch 的下一条语句。
continue 语句引起循环跳过主体的剩余部分,立即重新开始测试条件。
goto 语句将控制转移到被标记的语句,但是不建议在程序中使用 goto 语句,易出错。

break 语句

  • 当 break 语句出现在一个循环内时,循环会立即终止,且程序将继续执行循环外面紧接着的下一条语句。
  • 可用于终止 switch 语句中的一个 case。
  • 当使用的是嵌套循环(即一个循环内嵌套另一个循环), break 语句会停止执行最内层的循环,然后开始执行该块之后的下一行代码。
#include <iostream>
using namespace std;

int main ()
{
   // 局部变量声明
   int a = 10;

   // do 循环执行
   do
   {
       cout << "a 的值:" << a << endl;
       a = a + 1;
       if( a > 15)
       {
          // 终止循环
          break;
       }
   }while( a < 20 );

   return 0;
}

在这里插入图片描述

continue 语句

  • continue 会跳过当前循环中后面的代码,强迫开始下一次循环
  • 对于 while 和 do…while 循环,continue 语句会导致程序控制回到条件测试上。

对于下述代码,当 a=15时,执行到 continue语句 将不再执行循环内该语句后面的代码,会直接 跳转到 条件测试语句 while( a < 20 )上。

#include <iostream>
using namespace std;

int main ()
{
   // 局部变量声明
   int a = 10;

   // do 循环执行
   do
   {
       if( a == 15)
       {
          // 跳过迭代
          a = a + 1;
          continue;
       }
       cout << "a 的值:" << a << endl;
       a = a + 1;
   }while( a < 20 );

   return 0;
}

在这里插入图片描述

  • 对于 for 循环,continue 语句会导致执行 循环增量和条件测试 部分

对于下述代码,当 a=15时,执行到 continue语句 将不再执行循环内该语句后面的代码,会直接 跳转到 a++ 语句,然后再执行 a<20 的条件测试语句。

#include <iostream>
using namespace std;

int main ()
{
   // 局部变量声明
   int a = 10;
   
   for(a=10;a<20;a++)
   {
   		if( a == 15)
       {
          a = a + 1;
          continue;// 跳过后面的语句,执行下一次循环即开始执行a++ 
       }
       cout << "a 的值:" << a << endl;
   }

   return 0;
}

在这里插入图片描述

goto 语句

  • goto 语句允许把控制无条件转移到同一函数内的被标记的语句。 在任何编程语言中,都不建议使用 goto 语句。 因为它使得程序的控制流难以跟踪,使程序难以理解和难以修改。任何使用 goto 语句的程序可以改写成不需要使用 goto 语句的写法
goto label;
...
...
label: statement;
#include <iostream>
using namespace std;

int main ()
{
   // 局部变量声明
   int a = 10;

   // do 循环执行
   LOOP:do
   {
       if( a == 15)
       {
          // 跳过迭代
          a = a + 1;
          goto LOOP;
       }
       cout << "a 的值:" << a << endl;
       a = a + 1;
   }while( a < 20 );

   return 0;
}

在这里插入图片描述

1.3 无限循环

  • 如果条件永远不为假,则循环将变成无限循环。
  • for 循环实现 无限循环。由于构成循环的三个表达式中任何一个都不是必需的,可以将某些条件表达式留空来构成一个无限循环。
for(;;)
{
	// 这里是无限循环执行的语句。
}
  • while 循环语句实现 无限循环。
while(1)
{
	// 这里是无限循环执行的语句。
}

【 2. 选择 】

语句描述
if 语句一个 if 语句 由一个布尔表达式后跟一个或多个语句组成。
if…else 语句一个 if 语句 后可跟一个可选的 else 语句,else 语句在布尔表达式为假时执行。
嵌套 if 语句在一个 if 或 else if 语句内使用另一个 if 或 else if 语句。
switch 语句一个 switch 语句允许测试一个变量等于多个值时的情况。
嵌套 switch 语句在一个 switch 语句内使用另一个 switch 语句。

2.1 switch 语句

switch(expression){
    case constant-expression  :
       statement(s);
       break; 
    case constant-expression  :
       statement(s);
       break; 

    // 您可以有任意数量的 case 语句
    default : 
       statement(s);
}
  • switch 语句中的 expression 必须是一个整型或枚举类型 ,或者是一个 class 类型,其中 class 有一个单一的转换函数将其转换为整型或枚举类型。
  • 在一个 switch 中可以有任意数量的 case 语句。每个 case 后跟一个要比较的值 constant-expression 和一个冒号。case 的 constant-expression 必须与 switch 中的变量具有相同的数据类型,且必须是一个常量或字面量。
  • 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到 break 语句为止。当遇到 break 语句时,switch 终止,控制流将跳转到 switch 语句块后的下一行。
  • 不是每一个 case 都需要包含 break。 如果 case 语句不包含 break,控制流将会 继续 后续的 case,直到遇到 break 为止
  • 一个 switch 语句可以有一个可选的 default case,出现在 switch 的结尾。default case 可用于在上面所有 case 都不为真时执行一个任务。default case 中的 break 语句不是必需的
#include <iostream>
using namespace std;

int main ()
{
   // 局部变量声明
   char grade = 'D';

   switch(grade)
   {
   case 'A' :
      cout << "很棒!" << endl; 
      break;
   case 'B' :
   case 'C' :
      cout << "做得好" << endl;
      break;
   case 'D' :
      cout << "您通过了" << endl;
      break;
   case 'F' :
      cout << "最好再试一下" << endl;
      break;
   default :
      cout << "无效的成绩" << endl;
   }
   cout << "您的成绩是 " << grade << endl;

   return 0;
}

在这里插入图片描述

2.2 ?:语句

  • ? 表达式的值是由 Exp1 决定的。如果 Exp1 为真,则计算 Exp2 的值,结果即为整个 ? 表达式的值。如果 Exp1 为假,则计算 Exp3 的值,结果即为整个 ? 表达式的值。
Exp1 ? Exp2 : Exp3; // 其中,Exp1、Exp2 和 Exp3 是表达式。
#include <iostream>
using namespace std;

int main ()
{
   int i=5;
   i==5? cout << "i等于5 " << endl :cout << "i不等于5 " << endl;
   return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MR_Promethus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值