2.5C+-的语句及程序流程控制 语句是C++中最小可执行单元,用于规定程序执行的控制流程。在C++中,一条语句 的结束用分号(:)进行标识 语句分为 1、简单语句一一包括空语句、说明语句和表达式语句 空语句不包括任何数据或运算符,仅由一个分号构成,不执行任何操作。常用在空循环 中,用作时间延迟 在一个常量、变量或函数说明之后加一个分号就构成一个说明语句,它是C++中唯一可 以在函数体外书写的语句。 在表达式后加一个分号便构成了表达式语句,它是C++程序完成其功能的最重要的组成 部分 2、复合语句 在许多C艹语法结构中,只允许出现一条语句(如条件、循环语句),而从程序的流程 及逻辑结构上看,又需要执行多条语句,为此,需要使用复合语句 个复合语句是由用一对大括号“{}”限制起来的多个简单语句或复合语句。 注意:(1)、复合语句可以作为一个单一的可执行单元出现在所有单一简单语句可以出 现的地方 (2)、复合语句内的各个简单语句必须以分号标识各个语句的结束,而复合语句 的结束不需要再以分号标识其结束 每一个C++程序都是从man函数或 winmail函数的第一条语句开始顺序执行,直到 该函数的最后一条语句执行完毕。为了适应程序流程的不同控制,C++提供了条件分支控制 开关分支控制、循环控制、跳转控制等多种流程控制语句,以下分别进行讨论。 2.5.1if条件分支语句 语法结构如下: 例如: if(str==" student”) statement;简单或复合语句 cout<<this string is a record of a student if(expression) statement else statement: 其中 expression为一个条件表达式。由条件运算符组成的条件判断式,必须放在标识 符后的括号中 如果出现两个以上的 if else语句嵌套形式,在C+中规定:else语句与同一层中与之最 接近而且没有其它else语句与之相配的if语句相配对。 例如: cout<<”var=”<<var<<?n: cout<<"The value of the varible is not permited! n
2. 5 C++的语句及程序流程控制 语句是 C++中最小可执行单元,用于规定程序执行的控制流程。在 C++中,一条语句 的结束用分号(;)进行标识。 语句分为: 1、 简单语句——包括空语句、说明语句和表达式语句。 空语句不包括任何数据或运算符,仅由一个分号构成,不执行任何操作。常用在空循环 中,用作时间延迟。 在一个常量、变量或函数说明之后加一个分号就构成一个说明语句,它是 C++中唯一可 以在函数体外书写的语句。 在表达式后加一个分号便构成了表达式语句,它是 C++程序完成其功能的最重要的组成 部分。 2、 复合语句 在许多 C++语法结构中,只允许出现一条语句(如条件、循环语句),而从程序的流程 及逻辑结构上看,又需要执行多条语句,为此,需要使用复合语句。 一个复合语句是由用一对大括号“{}”限制起来的多个简单语句或复合语句。 注意:(1)、复合语句可以作为一个单一的可执行单元出现在所有单一简单语句可以出 现的地方。 (2)、复合语句内的各个简单语句必须以分号标识各个语句的结束,而复合语句 的结束不需要再以分号标识其结束。 每一个 C++程序都是从 main()函数或 winmain()函数的第一条语句开始顺序执行,直到 该函数的最后一条语句执行完毕。为了适应程序流程的不同控制,C++提供了条件分支控制、 开关分支控制、循环控制、跳转控制等多种流程控制语句,以下分别进行讨论。 2.5.1 if 条件分支语句 语法结构如下: if (expression) 例如:if(str= =”student”) statement;//简单或复合语句 cout1) if(var<10) cout<<”var=”<<var<<”\n”; else cout<<”The value of the varible is not permited!\n”;
注意:1、可以使用大括号表示的复合语句,改变f语句和else语句之间的搭配关系 2、使用阶梯式 if else if语句。其一般语法结构如下: else if(expression) statement 被执行的语句只能是语句 statement1~ statement中的一条语句,而不可能出 现有两条或两条以上语句被执行的情况 witch开关分支语句 虽然使用阶梯式 if else if语句可以实现多路检验,但是它缺乏灵活性,程序书写麻烦, 且程序易读性不好。为此在C++提供了专门的语句一- switch开关分支语句 Switch语句中设定一个供进行判断的开关变量,该开关变量逐个与一系列整型常量进行 比较。当发现该开关变量与某一整型常量或字符型常量相匹配时,该整型常量或字符常量处 便成了程序执行的入口,其后的语句将依次被执行。 注意:若无跳出语句 break,则开关分支语句中入口之后的各条语句均被执行,然后执 行 switch开关分支语句后的第一条语句。故需要在适当地地方插入 break语句。 Switch的格式如下: switch( varible case statement1-I case const statement2-n, 利用 break语句跳出 switch语句, case const 3 ∥从而不执行与其它常量相对应的语句体 t3-1; default. statement3-I statement3-n switch开关分支语句与阶梯式 if else if语句的区别: ①、 switch语句仅能检测开关变量的值是否与一组常量中的某一个相等;而i语句则可 以计算多个条件表达式
注意:1、可以使用大括号表示的复合语句,改变 if 语句和 else 语句之间的搭配关系。 2、使用阶梯式 if_else_if 语句。其一般语法结构如下: if (exoression1) statement1; else if (expression2) statement2; else if (expression3) statement3; . . . else statementn; 被执行的语句只能是语句 statement1~statementn 中的一条语句,而不可能出 现有两条或两条以上语句被执行的情况。 2.5.2 switch 开关分支语句 虽然使用阶梯式 if_else_if 语句可以实现多路检验,但是它缺乏灵活性,程序书写麻烦, 且程序易读性不好。为此在 C++中提供了专门的语句——switch 开关分支语句。 Switch 语句中设定一个供进行判断的开关变量,该开关变量逐个与一系列整型常量进行 比较。当发现该开关变量与某一整型常量或字符型常量相匹配时,该整型常量或字符常量处 便成了程序执行的入口,其后的语句将依次被执行。 注意:若无跳出语句 break ,则开关分支语句中入口之后的各条语句均被执行,然后执 行 switch 开关分支语句后的第一条语句。故需要在适当地地方插入 break 语句。 Switch 的格式如下: switch(varible) { case const1: statement1-1; . . . statement1-n; case const2: statement2-1; . . . statement2-n; break; //利用 break 语句跳出 switch 语句, case const3: //从而不执行与其它常量相对应的语句体。 statement3-1; . . . statement3-n; . . . default: statement3-1; . . . statement3-n; } switch 开关分支语句与阶梯式 if_else_if 语句的区别: ①、switch 语句仅能检测开关变量的值是否与一组常量中的某一个相等;而 if 语句则可 以计算多个条件表达式;
②、在同一个 switch语句的同一层次上,不允许两个case常量具有相同的值,而if语 句对其中的条件表达式则无此规定 ③、在 switch语句中,每个case常量可以与若干个语句相对应,而在if语句中,每一个 if、 else if或else只能对应一条简单或者复杂语句。 2.5.3循环控制语句 C++提供了三种循环控制语句,这三种循环控制语句都有一个条件判断表达式,执行时 根据条件判断的结果决定是否执行某一组语句。下面分别进行讨论 2.5.2.1 while循环控制语句 while循环语句的语法结构如下所示 while(expression) statement; ∥简单语句或复合语句 该语句执行时,首先判断条件表达式 expression的值,若其值为真(任意非0值),则 执行语句 statement:然后再继续判断条件表达式的值,……这样周而复始地进行条件判断 和语句的执行,直到条件表达式计算的结果为假(其值为0),则终止循环,跳出循环流程 继续执行循环控制语句的下一条语句 注意:(1)、在 statement中一般必须对条件表达式中的某些元素作相应的变动,否则将 会导致死循环。 (2)、该语句在循环的头部进行条件判断。因此若第一次判断为假时该循环不执 行任何其他语句,直接跳出循环,执行下一条语句 do while循环控制语句 有时需要确保循环体被执行,至少被执行一次,使用 while语句就不太合适。在这种情 况下,可以使用 do while循环控制语句。其语法结构如下: statement: while(expression) 注意: do while循环控制语句是在循环体的结尾处进行条件测试。 2.5.2.3for循环控制语句 for循环主要用于扫描具有固定长度的数据结构(即进行固定次数的循环),其语法结构 for(initial statement; expression; expression2) statement;∥简单语句或复合语句 其中 initial statement可以是一个说明语句或表达式,它在第一次循环的开头被执行, 且只被执行一次,常用于说明说明循环所使用的循环变量,对一组变量进行初始化或赋值 当然 initial statement也可以是一个空语句。 expressionI用于循环控制的条件测试。该语句 在每次循环的开头被执行,若在第一次循环时该语句的值为假,则循环体将一次也不被执行。 expression2在每次循环体执行后被执行,它主要用于修改循环变量。 2.5.4跳转控制语句 跳转控制语句可以改变正常的程序运行流程,在程序间实现控制转移。常用的跳转控制 语句有 break、 continue和goto语句。下面将分别介绍
②、在同一个 switch 语句的同一层次上,不允许两个 case 常量具有相同的值,而 if 语 句对其中的条件表达式则无此规定; ③、在 switch 语句中,每个 case 常量可以与若干个语句相对应,而在 if 语句中,每一个 if、else if 或 else 只能对应一条简单或者复杂语句。 2.5.3 循环控制语句 C++提供了三种循环控制语句,这三种循环控制语句都有一个条件判断表达式,执行时 根据条件判断的结果决定是否执行某一组语句。下面分别进行讨论。 2.5.2.1 while 循环控制语句 while 循环语句的语法结构如下所示: while(expression) statement; //简单语句或复合语句 该语句执行时,首先判断条件表达式 expression 的值,若其值为真(任意非 0 值),则 执行语句 statement;然后再继续判断条件表达式的值,……这样周而复始地进行条件判断 和语句的执行,直到条件表达式计算的结果为假(其值为 0),则终止循环,跳出循环流程, 继续执行循环控制语句的下一条语句。 注意:(1)、在 statement 中一般必须对条件表达式中的某些元素作相应的变动,否则将 会导致死循环。 (2)、该语句在循环的头部进行条件判断。因此若第一次判断为假时该循环不执 行任何其他语句,直接跳出循环,执行下一条语句。 2.5.2.2 do_while 循环控制语句 有时需要确保循环体被执行,至少被执行一次,使用 while 语句就不太合适。在这种情 况下,可以使用 do_while 循环控制语句。其语法结构如下: do statement; while(expression); 注意:do_while 循环控制语句是在循环体的结尾处进行条件测试。 2.5.2.3 for 循环控制语句 for 循环主要用于扫描具有固定长度的数据结构(即进行固定次数的循环),其语法结构 如下: for(initial_statement;expression1;expression2) statement; //简单语句或复合语句 其中 initial_statement 可以是一个说明语句或表达式,它在第一次循环的开头被执行, 且只被执行一次,常用于说明说明循环所使用的循环变量,对一组变量进行初始化或赋值。 当然 initial_statemwent 也可以是一个空语句。expression1 用于循环控制的条件测试。该语句 在每次循环的开头被执行,若在第一次循环时该语句的值为假,则循环体将一次也不被执行。 expression2 在每次循环体执行后被执行,它主要用于修改循环变量。 2.5.4 跳转控制语句 跳转控制语句可以改变正常的程序运行流程,在程序间实现控制转移。常用的跳转控制 语句有 break、continue 和 goto 语句。下面将分别介绍
2.5.4.1 break跳转控制语句 break跳转控制语句常用于循环控制和开关分支控制内,用于终止最内层的 while、do、 for循环或 switch流程的执行,并转向本循环体外的下一条语句。 例2.10] break跳转控制语句用法。/EX2_l0cpp 2.5.4.2 continue语句 continue语句仅使最内层的循环体终止当前进行的这次循环,而 break语句则终止整个 循环的执行。在 while循环和do循环中, continue语句的出现将导致将控制权转至对循环条 件的判断;而for循环中,遇到 continue时,程序转去执行语句 expression2。 2.5.4.3goto语句 goto语句可以使程序流程跳转到仼意一条具有特定标号的语句处。goto语句格式如下: 其中 label是一个用户定义的标识符,该标识符只可作为goto跳转的目的语句标号。该 含语句标号的目的语句的语法结构如下 label statement 注意:(1)、goto语句不能跳过一个变量的显示或隐式初始化,除法这一定义出现在 个块结构中,并且整个被跳过 (2)、一般来说,不鼓励使用goto语句
2.5.4.1 break 跳转控制语句 break 跳转控制语句常用于循环控制和开关分支控制内,用于终止最内层的 while、do、 for 循环或 switch 流程的执行,并转向本循环体外的下一条语句。 [例 2.10] break 跳转控制语句用法。//EX2_10.cpp 2.5.4.2 continue 语句 continue 语句仅使最内层的循环体终止当前进行的这次循环,而 break 语句则终止整个 循环的执行。在 while 循环和 do 循环中,continue 语句的出现将导致将控制权转至对循环条 件的判断;而 for 循环中,遇到 continue 时,程序转去执行语句 expression2。 2.5.4.3 goto 语句 goto 语句可以使程序流程跳转到任意一条具有特定标号的语句处。goto 语句格式如下: goto label; 其中 label 是一个用户定义的标识符,该标识符只可作为 goto 跳转的目的语句标号。该 含语句标号的目的语句的语法结构如下: label:statement; 注意:(1)、goto 语句不能跳过一个变量的显示或隐式初始化,除法这一定义出现在一 个块结构中,并且整个被跳过。 (2)、一般来说,不鼓励使用 goto 语句