手机
当前位置:查字典教程网 >编程开发 >C语言 >深入理解C语言的逻辑控制
深入理解C语言的逻辑控制
摘要:本文对C语言的逻辑控制做一番较为深入的探讨,一般来说C语言的逻辑控制语句主要有如下的7种:1、goto最强大,但一般只在特殊环境下使用。2、...

本文对C语言的逻辑控制做一番较为深入的探讨,一般来说C语言的逻辑控制语句主要有如下的7种:

1、 goto 最强大,但一般只在特殊环境下使用。

2、 if else

3、 ?:

4、 switch case

5、 for

6、 while

7、 do while

自从dijkstra的论文Go To Statement Considered Harmful以后,C语言代码很少看到goto了。(一般用在多次资源分配的错误处理上)

但,从计算机的角度来说,缺少goto(jmp指令)还真没法干活。其实,goto是最符合我们的设计流程图的。

将一个流程图用goto来实现也最直观。goto能真正让我们做到心之所动,剑之所至。

接下来,分别考虑将2-7转化为对应的goto语言版本(等价于转化为对应汇编版本)。

2、if语句

if (条件1) //代码块1 else //代码块2

对应goto:

t = 条件1; if (t为真)goto true; //代码块2 goto finish true: //代码块1 finish:

3、?: 和if else是等价的。

只不过if语句为代码块,?:为表达式。

变量= (条件1)? 表达式1:表达式2;

goto版本:

t = 条件1; if (t为真) goto true; //变量=表达式2 goto finish; true: //变量=表达式1 finish:

注意:?:里面的表达式尽量简单,过于复杂的话,改用if语句实现,这样方便调试。

4、switch-case

switch (条件取值变量) case 元素1 : //语句块1; break; case 元素2: //语句块2; break; ... case 元素N //语句块N; break; default: //默认处理。 break; }

goto版本:

跳转表={标签1,标签2,...,标签N } goto 跳转表[元素index] //标签1: //语句块1 goto Finish //标签2: //语句块2 goto Finish ... //标签N: //语句块N goto Finish default: //默认处理。 Finish:

5、for语句

for (初始化语句;判断语句;迭代语句) //循环语句块

goto版本:

//初始化语句; if (判断语句为否) goto Finish; loop: //循环语句块 //迭代语句 if (判断语句为真) goto loop; Finish:

6、while语句

while(条件为真) //代码块 //迭代块

对应goto版本:

loop: t = 条件 if (不为真) goto Finish; //代码块 //迭代块 Finish:

7、do-while语句

do { //语句块1 //迭代块1 } while (条件为真)

goto版本:

loop: //语句块1 //迭代块1 if (条件为真) goto loop;

C语言的goto同汇编语句jmp系列指令逻辑上是完全一致的。

注意:

1、 关于条件,有个经典的逻辑代数公式:

摩根公式:

!(A && B) = (!A) || (!B)

建议,对复杂逻辑,手动画代数运算表

A B 结果

0 0 ?

0 1 ?

1 0 ?

1 1 ?

并保证单体测试的全覆盖。

2、 逻辑操作和位操作是2组,需要区分开来。

与 或 反

逻辑: && || !

位: & | ~ ^ (异或)

3 强烈推荐在写代码前,在纸上画完整的流程图,梳理自己的设计思路。

【深入理解C语言的逻辑控制】相关文章:

深入理解约瑟夫环的数学优化方法

关于c语言的一个小bug详解

深入理解atoi()与itoa()函数的用法

深入理解二叉树的非递归遍历

浅析C语言中assert的用法

浅析C语言中的sizeof

深入理解:Java是类型安全的语言,而C++是非类型安全的语言

深入解析C++中的引用类型

深入解析C++中的指针数组与指向指针的指针

c语言B树深入理解

精品推荐
分类导航