死循环是怎样产生的?

您所在的位置:网站首页 循环语句的循环要素是什么 死循环是怎样产生的?

死循环是怎样产生的?

2024-04-11 15:13| 来源: 网络整理| 查看: 265

问题阐述

死循环是指程序无法退出或者无法进入下一次循环。那么,什么情况会产生死循环呢?

专家解答

1.问题的产生

C语言中常用 3种循环语句,这些循环语句各有特点, while和 do…while经常用在循环次数不确定的场合;for被经常用来遍历数组和集合。在使用这些循环语句过程中,若其循环结束条件处理不当,则很可能产生死循环。下面看一个例子,代码如下。

程序本意是将每次得到的计数变量的值输出出来,结果由于疏忽导致程序死循环,程序运行结果如图 8.18所示。

图 8.18 产生的死循环

2.问题分析与解决方法

for语句的循环结束条件是当条件表达式的值为 false时。上面实例中的计数变量 i被定义为 unsigned类型,这样 i>=0就永远成立,所以程序进入了死循环。下面是另外两种常用的循环语句的判断条件:

(1)while语句的循环结束条件是当布尔表达式的值为 false时。

(2)do…while语句的循环结束条件是当布尔表达式的值为 false时。

注意:

使用 do…while 语句时要注意循环次数的判断,因为do…while 语句是先执行循环体后进行判断。

解决本例的办法就是将计数变量 i定义为 int型,这样就不会出错了。程序的正确运行结果如图 8.19所示。

图 8.19 修改后的结果

说明:

在实际的应用程序开发中,产生死循环的情况比较复杂,并不完全像本实例中的情况,但归根结底都是由循环结束条件处理不当造成的,下面将对这些方法进行详细地分析。

专家点评

在循环程序中应避免出现死循环,即应保证循环变量的值在运行过程中可以得到修改,并使循环条件逐步变为假,从而结束循环。

问题:怎样提高循环语句的效率?

问题阐述

在 C语言程序中,常常使用循环结构来解决特定的问题。那么在设计程序时,怎样才能提高循环语句的效率呢?

专家解答

C循环语句中,for语句使用频率最高,while语句其次,do语句很少用。提高循环体效率的基本办法是降低循环体的复杂性。下面说明提高循环效率的几种情况。 1.直接提高循环语句的效率

(1)在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少 CPU切换循环层的次数。例如下面两个循环语句,循环语句 2比循环语句 1的效率高。

语句 1:长的循环在外层

语句 2:长的循环在内层

(2)如果循环体内存在逻辑判断,并且循环次数很大,宜将逻辑判断移到循环体的外面。例如下面两个循环语句:

语句 1:效率低但程序简洁

语句 2:效率高但程序不简洁

语句 1比语句 2多执行了 N-1次逻辑判断。并且由于前者总要进行逻辑判断,打断了循环的模式,使得编译器不能对循环进行优化处理,降低了效率。如果 N非常大,最好采用示例语句 2的写法,可以提高效率。如果 N非常小,两者效率差别并不明显,采用语句 1的写法比较好,因为程序更加简洁。 2.间接提高循环语句的效率

(1)对于简单的 if…else语句,建议使用 c语言的三目运算符“ ? :”代替,以提高程序的执行效率。如:

可以写成:

(2)在程序中,不允许出现如下风格的语句。

应写成:

(3)对于 switch语句,在每个 case语句的后面不要忘记加 break,除非是想使得某几个分支重叠。

(4)switch语句一定要有 default,即使它不做什么。

专家点评

从上面的学习中可以知道,提高循环语句的效率有时是按照特定的方法降低代码的复杂性,有时却是视情况而定的。总的来说,提高循环体的效率应当在书写程序的循环语句时保持良好的风格。

问题:continue语句的基本作用是什么?

问题阐述

在某些情况下,程序需要用到 continue语句进行跳转,那么 continue语句的具体作用是什么呢?

专家解答

continue的作用是结束本次循环,即跳过循环体中下面尚未执行的部分,接着执行下一次的循环操作。例如,使用 continue结束本次的循环操作,代码如下:

程序运行结果如图 8.20所示。

图 8.20 使用 continue结束本次的循环操作

通过程序的显示结果,可以看到在 iCount等于 5时通过调用 continue语句,使得当次的循环结束。但是循环本身还没有完,所以会继续执行。

专家点评

continue语句结束的是本次循环,而不是终止整个循环的执行。与 break语句不同的是,break语句结束的是整个循环过程,将不再判断执行循环的条件是否成立。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3