死循环是怎样产生的? |
您所在的位置:网站首页 › 循环语句的循环要素是什么 › 死循环是怎样产生的? |
问题阐述 死循环是指程序无法退出或者无法进入下一次循环。那么,什么情况会产生死循环呢? 专家解答 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 |