本帖最后由 kailee 于 2015-4-24 17:31 编辑
总结了一篇关于C 语言的控制语句主要包括:循环、跳转和分支的文章,抛砖引玉http://kai-lee.com/2015/04/23/C%E8%AF%AD%E8%A8%80%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0%E4%BA%8C/#more循环循环是一个强大的编程工具,可以说正是由于它,才省去了无聊的重复工作。在建立循环时应该特别注意这几个方面: - 明确定义结束循环的条件,要不然就成了死循环
- 确保在循环判断中使用的值在使用之前已经初始化,不然会报错(这个涉及到作用域的问题)
- 判断循环的值在每次循环之后要更新,也就是我们常说的增量语句
C 语言有三种形式的循环语句他们的运行原理就是:如果条件一开始就不成立,永远不会不会执行循环体;如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立,如果成立就重复上述过程,直到条件不成立,否则程序就会永远执行下去,也就是所谓的死循环。其中, do while 循环不过条件是否成立都会至少执行一次循环体。看他的结构也可以明白先做做完了再去判断,然后就和2、3两种结构一样了。
另外,从循环中循环判断里面变量的初始化以及回收上来说 for 循环性能占优势(当然这不是绝对的)。这个怎么讲呢?我们不难发现, for 循环下初始化语句只在循环体执行之前执行一次, for 循环结束后就会回收其存储空间。而另外两种方式中用到的值则是定义在循环外部,即使循环结束仍然存在,所以在性能上显得相对差一些。还有就是,循环体内定义的变量只能在循环体内部使用,循环体一结束他就会被系统回收,外部不能调用这是作用域问题。 最后,我想说的是这三个循环在很多时候可以相互替代,而且还存在更为复杂的用法——循环嵌套。而且,我们通常所避免的死循环,在默写情况下竟是必须的,比如:你打开一个程序在不关闭他之前他不会自动退出。 跳转跳转语句包括四种: - goto 语句
goto 语句导致程序控制跳转到由指定标签定位的语句。冒号用来将被标记语句同他的标记分开。标记命名遵循变量的命名规则。被标记的语句可以出现在 goto 语句之前或之后。而且,我们会发现,在学习 C 语言的时候基本上没怎么接触过这个跳转语句,为什么?因为他可以被 if、if-else、while、continue、break 的组合代替,更主要的是 goto 语句会造成代码后期维护的高成本,所以人们更愿意用 goto 效果的代替品。 - continue 语句
continue 用在循环语句中,作用是退出当前一轮的循环,马上开始下一轮循环。 - break 语句
break 语句用在循环语句中退出循环或 switch 中,作用是退出当前循环,跳到循环体外继续运行。但是使用 break 只能跳出一层循环。在要跳出多重循环时,要一层一层的跳转。 - return 语句
当一个函数运行退出后要返回一个值时,使用 return。return 可以跟一个表达式,如果 return 后面没有值就不返回值。
分支(选择结构)可以说选择语句是开发具有智能行为程序的基础,我们人类可以在遇到不同情况的时候做出比较合理的选择,在现实生活中,需要进行判断和选择的情况是很多的: - 如果你在家,我去拜访你
- 如果考试不及格,要补考
- 如果遇到红灯,要停车等待
- 周末我们去郊游
- 70岁以上的老年人,入公园免票
而要让计算机模拟这种能力,选择结构非常重要。我们的 C 语言对此提供了两种选择结构: - if语句,实现两个分支的选择结构
- switch语句,实现多分支的选择结构
表达式的值非零表示条件为真;如果条件为假,程序将跳过 if 处的语句,直接运行 if 后面的语句。但是如果 if 后面有 else,则当条件为假时,程序跳到 else 处运行。if 和 else 后面的语句可以是另个 if 语句,这种嵌套式的结构,允许更复杂的逻辑控制流程得以实现。在一般情况下, else 一定与最接近的 if 成对,因此常用括号{}越过此限制。一个优秀的程序员会很注重书写的规范性,所以以我建议,大家在书写的时候也要注意规范,比如: - if 语句后面不要写分号
- 如果要在 if 后面的语句中定义新的变量,必须用大括号括起来
- 注意赋值符号不要写成等号
- 比较大小时,把常量值放在左边变量放在右边,便于检查
switch 通常用于对几种有明确值的条件进行控制。它要求的条件值通常是整数或字符。与 switch 搭配的条件转移是 case 。使用 case 后面的标值,控制程序将跳到满足条件的 case 处一直往下运行,直到语句退出或遇到 break 。通常可以使用 default 把其他例外的情况包含进去。如果 switch 语句中的条件不成立,控制程序将跳到 default 处运行;如果省略 default 子句,则直接运行下一语句。switch 也是可以嵌套的。 有几点需要注意的是: - 如果在 case 后面定义新的变量必须用大括号括起来。否则还要出现作用域问题。
- case 语句后面不要忘记加 break,因为知道break他才跳出来,否则从相匹配的那行开始到 switch 末位的每一句都会执行。
- 必须使用 default 语句,即使程序真的不需要 default 处理,也应该保留。
写在最后的话通过以上的分析对于 C 语言循环、跳转和分支,与我个人而言有了一个更为清晰的认识,于我的读者而言希望我的博文可以给看到文章最后的您带来些许的帮助,谢谢!在接下来的学习中我会不断的总结知识,然后记录到博客上来,敬请期待! 参考文献- [美]Prate,S. C Primer Plus[M]. 第5版. 云巅工作室,译. 北京:人民邮电出版社,2011.4:116-185.
- c 语言 三大循环 四大跳转 和判断语句
- 浅析C语言的非局部跳转:setjmp和longjmp
- C语言流程控制总结
|