当前位置: 首页 > 文档资料 > C++大学教程 >

2.6 if/else 选择结构

优质
小牛编辑
131浏览
2023-12-01

if选择结构只在条件为true时采取操作,条件为false时则忽略这个操作。利用if/else选择结构则可以在条件为true时和条件为false时采取不同操作。例如,下列伪代码:

if student's grade is greater than or equal to 60
  print "Passed"
else
  print "Failed"

在学生成绩大于或等于60时打印“Passed”,否则打印"Failed"。打印之后,都“执行”下一条伪代码语句。注意else的语句体也缩排。

编程技巧 2.3

if/eIse选择结构的两个语句体都缩排。

选择的缩徘规则应当在整个程序中认真贯彻执行。不按统一缩排规则编写的程序很难阅读。

编程技巧 2.4

如果有多层缩排,则每一层应缩排相同的空间量。

上述伪代码if/else结构可以写成如下的C++代码:

if(grade>=60)
  cout<<"Passed";
else
  cout<<"Failed";

图2.4的流程图很好地演示了if/else结构的控制流程。注意,这个流程图(除了小圆框和流程之外)也只能包含表示所要操作的矩形框和表示所要判断的菱形框。这里我们继续强调操作/判断模型计算,假设框中包含建立C++程序所需的空白双项选择结构。

程序员的任务就是根据算法需要用堆栈和嵌套两种方法组合各种控制结构,然后在这些框中填人算法所要的操作和判断,从而生成程序。

C++提供条件运算符(?:),与if/else结构密切相关。条件运算符是C++中惟一的三元运算符(thrnary operator),即取三个操作数的运算符。操作数和条件运算符一起形成条件表达式(conditional expression)。第一个操作数是条件,第二个操作数是条件为true时整个条件表达式的值.第三个操作数是条件为false时整个条件表达式的值。例如,下列输出语句:

cout<<(grade>=60? "Passed":"Failed");

包含的条件表达式在grade=60取值为true时,求值为字符串“Passed”;在grade>=60取值为false时,求值为字符串"Failed"。这样,带条件表达式的语句实际上与上述if/else语句相同。可以看出,条件运算符的优先级较低,因此上述表达式中的话号是必需的。

条件表达式酌值也可以是要执行的操作。例如.下列条件表达式:

grade >=60? cout<<"Passed": cout<<"Failed";

表示如果grade大于或等于60,则执行cout<<"Passed",否则执行cout<<"Failed"。这与前面的if/else结构也是相似的。条件运算符可以在一些无法使用if/else语句的情况中使用。
嵌套if/else结构(nested if/else structure)测试多个选择,将一个if/else选择放在另一个if/else选择中。例如,下列伪代码语句在考试成绩大于或等于90分时打印A.在80到89分之间时打印B,在70到79分之间时打印C,在60到69分之间时打印D,否则打印F。

if studen's grade is greater than or equal to 90
  print "A"
else
If student's grade is greater than or equal to 80
  print "B"
else
If student's grade is greater than or equal to 70
  print "C"
else
If student's grade is greater than or equal to 60
  print "D"
else
  print "F"

这个伪代码对应下列C++代码:

if(grade>=90)
  cout<<"A";
else
if(grade>=80)
  cout<<"B";
else
if(grade>=70)
  cout<<"C";
else
if(grade>=60)
  cout<<"D";
else
  cout<<"F";

如果考试成绩大于或等于90分,则前4个条件都为 true,但只执行第一个测试之后的cout语句。执行这个cout语句之后,跳过外层if/else语句的else部分。许多C++程序员喜欢将上述if结构写成:

if(grade>=90)
  cout<<"A";
else if(grade>=80)
  cout<<"B";
else if(grade>=70)
  cout<<"C";
else if(grade>=60)
  cout<<"D";
else
  cout<<"F";

两者形式是等价的。后者更常用,可以避免深层缩排便代码移到右端。深层缩排会使一行的空间太小,不长的行也要断行,从而影响可读性。

编程提示2.1

嵌套if/else结构比一系列单项选择if结构运行速度快得多,因为它能在满足其中一个条件之后即退出。

性能提示2.2

在嵌套if/else结构中,测试条件中true可能性较大的应放在嵌套if/else结构开头.从而使嵌套if/else结构运行更快,比测试不常发生的情况能更早退出。

if选择结构体中只能有一条语句。要在if选择结构体中包括多条语句,就要把这些语句放在花括号({ })中。放在花括号中的一组语句称为复合语句(compund statement)。

软件工程视点2.2

复合语句可以放在程序中出现单句语句的任何地方。

下例在if/else结构的else部分包括复合语句:

if(grade>=60)
  cout<<"Passed.\n";
else{
  cout<<"Failed.\n";
  cout<<"You must take this course again.\n";
}

 

如果grade小于60,则程序执行else程序体中的两条语句并打印:

Failed.
You must take this course again.

注意else从句中的两条语句放在花括号中。这些花括号很重要,如果没有这些花括号,则下列语句:

cout<<"You must take this cours again.\n";

在if语句else部分之外,不管成绩是否小于60都执行。

常见编程错误2.2

忽略复合语句中的一个或两个花括号可能在程序中生成语法错误或逻辑错误。

编程技巧2.5

总是在if/else结构(和任何控制结构)中放上花括号,可以避免不慎疏忽,特别是后面要在if或else语句中增加语句时。错误(fatal logic error)使程序失败和提前终止,而非致命逻辑错误(nonfatal logic error)则让程序继续执行,只是产生错误结果。

软件工程视点2.3

复合语句可以放在程序中出现单句语句的任何地方,也可以根本不放语句,即放上空语句。空语句就是在正常语句出现的地方放一个分号(;)。

常见编程错误2.3

在if结构条件后面放上分号会造成单项选择if结构的逻辑错误和双项选择if结构的语法错误 (如果if部分包含实际语句体)。

编程技巧2.6

有些程序员喜欢在花括号中输入各个语句之前输入复合语句的开始花括号和结束花括号。这样可以避免丢失一个或两个花括号。

本节介绍了复合语句的符号。复合语句可以包含声明(例如,和main程序体中一样),如果这 ,则这个复合语句称为块(block)。块中的声明通常放在块中任何操作语句之前,但也可以和操作语句相混和。第3章将介绍块的用法,在此之前,读者应避免使用块(除了作为main程序体)。