【C++学习笔记】08_流程控制语句

流程控制语句

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

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

if……else选择结构

if…else的基本结构形式为:

if (表达式1)

语句A

else

语句B

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

代码例子:

运行结果:

If……else的结构嵌套

代码示例:

运行结果:

 

【switch结构】

switch结构又称开关结构,其基本形式如下:

switch(开关表达式){

case 常量1:

语句序列1;

case 常量2:

语句序列2;

        ……

case 常量N:

语句序列N;

default:

语句序列N+1;}

代码示例:

运行结果:

Switch结构中的case标签只是起到了入口的作用,为了程序精炼,经常采用多个入口共用一个语句的写法。

代码示例:

运行结果:

注意:

1.      最先匹配的case才是switch结构的入口,因此,switch结构中匹配case前的语句是永远不被执行的。

2.      在同一个switch结构中,不能有相同的case常量。

3.      Case常量和表达式值必须是整型、char型和枚举型中的一种,原则上要求两者的类型一致,但大多数的编译器允许类型不一致的情况发生,此时比较两者的数值是否相等。

4.      Switch结构同样支持嵌套。

 

ifelse…结构和switch结构的比较

两者最大的不同在于switch结构只进行相等与否的判断,而if…else…结构还可以进行大于小于等范围上的判断。

此外,switch无法处理浮点数,只进行整数的判断,而且,case标签值必须是常量,如果涉及到浮点数和变量的判断,应当使用if…else…结构。

合理搭配两种结构,发挥各自的优势和长处,才能写出有效率的代码。对某个特定场合,若既能用switch结构,又能用if…else…结构,当分支数大于2时,推荐采用switch结构。

 

for循环语句

如果需要不断地重复执行某个动作,循环结构就会派上用场。for循环结构的基本形式如下:

for (初始化表达式;判断表达式;修正表达式)

语句;//循环体

for语句执行过程如下:首先计算"初始化表达式"(循环初值),且仅计算一次;每一次循环之前计算"判断表达式"(循环条件),如果其结果为true(或非0值),则执行"语句"(循环体),并计算"修正表达式"(循环增量),否则,循环终止,程序跳出for结构。

此处的循环体可以是单条语句,也可以是由花括号包裹的块语句,是for循环执行过程的示意图。

代码示例:

运行结果:

 

【for循环结构嵌套】

代码示例:

运行结果:

 

在程序中,为了使输出的数字按行对齐,我们使用了域宽函数setw,用以设置数值或字符应采用的字符个数(域宽),并按右对齐方式放置,使用setw函数,必须包括头文件iomanip

 

while循环结构

while结构也是一种常用的循环结构,其基本形式为:

while (判断表达式)

语句;//循环体

当程序进入while结构时,先计算判断表达式,若其值为true(或非0),便执行循环体,否则跳出while结构,执行后面的语句,每执行完一次循环体,都要再次计算判断表达式,以决定是执行循环体还是跳出while结构。while结构中的循环体既可以是单条语句,又可以是花括号包裹的块语句。

可以说,while结构是没有初始化表达式和修正表达式的for结构,同样是输出0到9这10个数字,用while循环结构来实现。

代码示例:

运行结果:

 

do……while循环结构

do…while结构是C++提供的第3种循环结构,不同于for结构和while结构,do…while结构常被称为出口条件循环,其基本形式为:

do

循环体

while (判断表达式);

当程序进入do…while结构时,首先执行循环体,然后计算判断表达式,若其值为true(或非0),则继续执行循环体,否则,循环终止,程序跳出。这意味着,使用do…while结构,循环体至少会被执行一次。do…while结构中的循环体既可以是单条语句,也可以是花括号包裹的块语句。

for结构和while结构中的循环体有可能一次也执行不了,但do…while中的循环体至少会被执行一次,使用哪种结构,应视具体情况而定。

 

break语句

在前面介绍switch结构时,我们提到了流程控制语句break,该语句主要有两个用途:

跳过switch结构的剩余部分。

提早从循环结构(for结构、while结构和do…while结构)中跳出。

注:break语句对if…else…(包括if结构)无效。

在执行到break语句时,程序将跳转到结构后面的第一条语句执行。当有结构嵌套时,break语句只能往外跳一层,破一层壳。

 

continue

         Continue语句市委循环继续语句,用在循环结构(for结构、while结构和do……while语句)中,当执行continue语句是,程序将跳过该循环中的剩余部分,去执行下一次循环,continue相当于对其后的循环体做了短路处理。

代码示例:

运行结果:

 

goto

goto语句可以让程序员自由地将流程转到程序的任何地方,程序员只要在程序的某一行前注以标号,便可以使用“goto+标号”的形式将流程转到该行。

很多程序员反对使用goto,甚至建议将其废除,认为它破坏了程序的结构,降低了程序的可读性,已经证明,不使用goto,用顺序、分支和循环3种基本结构足以实现任何流程的算法。

但goto语句至少有一个地方可以大显神通,它能从多重循环中一下子跳到外面,避免了写很多次break的麻烦。

 

程序中止函数exit()

exit()是C语言函数库stdlib.h中的一个函数(在新的C++标准中,头文件为cstdlib),它的功能是中止程序的执行,并在退出前对程序占用的资源进行必要的清理。exit()是一个无返回值的函数,其参数称为退出码,用以通知操作系统当前程序是正常终止(一般为0)还是非正常终止(一般为-1)。

用以计算正方形的面积,边长由用户输入,当输入数小于0时,调用exit(-1)中止程序,当输入数非负时,输出结果。

代码示例:

运行结果:

若输入负数,就会即刻关闭程序。所以截不到图,大家将就将就……

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值