您的位置:首页 > 运维架构 > Linux

Unix/Linux C++应用开发-C++控制结构"控制结构跳转语句"

2013-09-08 22:56 330 查看
应用程序除了使用上述七类控制结构方式,来改变程序执行流程使之能够按照开发者的意图去正确的执行程序,开发者还可以使用break、continue和return等控制结构的跳转语句来控制程序按照既定的意图去执行。

5.4.1  break语句

break语句能实现从基本的switch等循环控制结构代码体中跳出的功能,结束整个循环体的工作。break跳转语句在软件开发中常见应用于switch控制结构。该语句主要用于匹配到对应的case并执行相应的代码体后跳出switch控制结构。

回归switch选择结构中讲述的学生成绩等级对应的分数制的范围的实例。每当输入单个的学生的等级字符,匹配对应的case项,随后执行case语句后的代码体。如果此时没有break语句跳出该控制结构中会直接继续执行下述的case项,直至执行完所有项退出switch结构。使用break跳转语句之后会在执行完相对应的case项后跳出整个控制结构,继续执行下面的代码。

break语句同样可以应用于while等循环结构中,用于在必要之处跳出循环结构,按照正确意图执行程序。如下实例可见,break语句在while、if等结构中的应用情形,同样可以实现从结构中跳转功能。

int i = 0;

while(i<3)

{

         cout<<"ivalue:"<<i<<endl;

         break;

         i++;

}

for(int j = 0;j < 10;i++)

{

         if(I% 2 == 0)break;

}

上述实例中,首先在while控制结构中增加break语句用于跳出该结构。此处先定义整型表达式i同时初始化为0,随后判断该i值是否符合while中条件。只要符合则执行打印cout语句,之后执行break跳出,即随后i++已不再执行。再次for循环结构中,当if条件满足后执行break语句会跳出整个for循环。

break控制语句主要用于响应在特定的情况下需要跳出控制结构的需求。嵌套控制结构中需要注意break语句只能跳出到控制结构外层,在嵌套结构情况下如果在最内层使用break语句会跳出到该层外围即继续执行该层外的控制结构,而不是直接跳到最外层。

5.4.2  continue语句

continue语句不同于break语句。该语句主要应用于循环体中表示结束跳出本次循环,进入下次循环中。一个求取10以内奇数之和的实例,采用for循环控制结构配合continue跳转语句实现,实现如下。

const int max = 10;

int sum;

for(int i = 0;i <= max;i++)

{

         if(i% 2 == 0) continue;

         sum+= i;

}

上述实例中,首先定义整型常量max并初始化值为10,随后需要处理10以内的奇数之和。实现思路即遍历10以内的数字,找出其中的奇数相加最后得出结果。具体实现采用for循环结构配合continue跳转语句来实现。for循环头中首先从条件变量i为0开始,进行测试条件判断。此处测试条件为小于等于max常量的数,符合该要求则执行循环体中的if结构。if结构中测试该变量i是否为偶数,如果是偶数则执行该结构下的代码体continue语句,跳出本次循环不参与后续的和的计算。继续执行for循环中的测试条件判断,如果符合条件则继续执行if条件中的判断。如果不符合if中的判断条件则说明该变量i为奇数,执行for循环体中的奇数相加操作,最终得出10以内的奇数总和。

如上实例中可以得出,continue语句用于跳出循环体中本次循环操作。但是continue语句并不直接跳出整个循环结构。continue跳转语句与break语句最大的区别之处在于跳转的范围不同,这点在软件编程中需要注意区分。

5.5  关于goto语句

结构化编程以来goto一直是讨论的热点,goto语句提供的作用是可以在任意程序执行的位置跳转到指定的语句位置继续执行。这种方式的优势在于可以一下子从多重嵌套的代码中跳转出来,在没有结构化设计思想提出之前,这种使用方式通常会为程序执行的灵活性提供帮助。但是无限制的使用会破坏该程序设计的风格。尤其到了C++提出面向对象的设计思想之后,goto语句的使用更可能为程序编写带来隐患。所以虽然C++中依然保留了goto语句,但是在软件编写过程中尽量少去使用。建议可以使用在goto语句基础上弱化其功能的break和continue语句来替代其功能。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: