2.6 流程控制语句

    程序由数据结构和算法组成,算法是一系列语句的集合,而这一条条的语句,便是C++中的语句,语句是构造程序最基本的单位,程序运行的过程就是执行程序语句的过程,程序语句执行的次序称之为流程控制或控制流程。

    结构定理指出:任何程序逻辑都可以用顺序、选择和循环等3种基本结构来表示,在前面给出的示例代码中,程序语句都是顺序执行的,那有没有可能改变程序语句的执行次序呢?答案是肯定的,只要借助于C++提供的分支语句(if……else……语句和switch语句)、循环语句(for循环和while循环)以及转向控制语句(continue、break和goto等)就能够实现。

    2.6.1 if……else……选择结构

    if……else……的基本结构形式如下所示。


    if(表达式1) 语句A; else 语句B;

    程序执行到if语句时,首先计算表达式1,如果结果为true(非0),则执行语句A,否则,执行语句B。此处的语句A、语句B既可以是单条语句,又可以是由多条语句组成的由花括号包裹的块语句,如示例代码2.21所示。

    代码2.21 if……else……选择结构IfElse1


    <————————————————-文件名:example221.cpp——————————-> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int x;//声明一个int型变量 06 cout<<"请输入一个整数:"<<endl; 07 cin>>x;//接收用户键盘输入 08 if(x%3==0)//如果输入的数可被3整除 09 cout<<"该数可以被3整除"<<endl; 10 else//否则 11 cout<<"该数不可被3整除"<<endl; 12 return 0; 13 }

    【代码解析】代码第8和第10行,就构成了if……else……结构。

    输出结果如下所示。


    请输入一个整数: 11 (注:键盘输入) 该数不可被3整除当输入另一个数时,有如下结果。 请输入一个整数: 9(注:键盘输入) 该数可以被3整除

    说明

    按层次格式使用缩进结构,能使代码清晰易读。

    在代码2.21中,程序运行到“if(x%3==0)”语句时,首先计算表达式“x%3==0”的值,当x除以3余数等于0时,表达式的值为true,if结构选择“cout<<"该数可以被3整除"<<endl;”执行,否则为false,if结构选择“cout<<"该数不可被3整除"<<endl;”执行。

    除了if……else……这种基本结构外,C++还支持if……else……结构嵌套,或只有if……的结构。

    1.if……else……结构嵌套

    一个结构中包含有另一个同样的结构,这称为嵌套,if……else……结构允许嵌套,以实现更多的程序分支,代码2.22用于选出用户输入的3个数中最小的一个。

    代码2.22 if……else……结构嵌套IfElse2


    <—————————————-文件名:example222.cpp—————————————-> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 int x,y,z;//声明3个int型变量 06 cout<<"请输入3个不同的整数:"<<endl; 07 cin>>x>>y>>z;//接收用户键盘输入 08 if(x<y)//比较x和y的大小 09 if(x<z)//比较x和z的大小 10 cout<<"最小的数是"<<x<<endl; 11 else 12 cout<<"最小的数是"<<z<<endl; 13 else 14 if(y<z)//比较y和z的大小 15 cout<<"最小的数是"<<y<<endl; 16 else 17 cout<<"最小的数是"<<z<<endl; 18 return 0; 19 }

    【代码解析】代码第8行到第13行,即一个……if……else结构嵌套另外一个……if……else结构。第14行到第17行,同样如此。

    输出结果如下所示。


    请输入3个不同的整数: 12 50 6(注:用户输入) 最小的数是6

    用户输入的3个整数分别存储在变量x、y和z中,第一层if……else……结构首先比较x和y的大小,如果x小于y,则进入if(x<z)……else……结构,否则,进入if(y<z)……else……结构。

    注意

    多重嵌套时if和else对应的匹配规则,编译器从最前面的else开始,使每个else和前面最近的没有配对的if匹配成if……else……结构。

    2.if……结构

    if……else……结构中的else……部分是可选的,当else……部分默认时,就成了if……结构,形式如下。


    if(表达式1) 语句A

    程序执行到if语句时,首先计算表达式1,如果结果为true(非0),则执行语句A,否则,跳过语句A向下执行。

    对代码2.23来说,只有当用户正确输入字母Y,才输出“恭喜答对!”的提示,否则,程序不进行任何操作而退出。

    代码2.23 if……结构IfElse3


    <————————————————文件名:example223.cpp———————————> 01 #include<iostream> 02 int main() 03 { 04 using namespace std; 05 char x;//声明一个字符变量 06 cout<<"猜字母游戏,请输入一个字母:"<<endl; 07 cin>>x;//接收用户键盘输入 08 if(x=='Y')//如果输入字符为大写字母Y,输出提示 09 cout<<"恭喜答对!"<<endl; 10 return 0; 11 }

    【代码解析】代码第8行,即单独一个if语句的结构。

    注意

    if和if……else……结构嵌套时,if和else对应的匹配规则不变,从最前面的else开始,使每个else和前面最近的没有配对的if匹配成if……else……结构。