2.         逻辑、关系运算。

提起什么逻辑运算,或者什么关系运算,看名字貌似很复杂的。不过这里可能让大家放心的是,这些运算我们日常生活中经常用到,无非就是 真的,假的,是,不是,并且,或者之类的操作。

 

用于逻辑运算的运算符有如下几个:

运算符

含义

&&

 与(并且)

||

或(或者)

!

非(不是)

             

                     用于关系运算的运算符有如下几个:

                     笨鸟先飞学编程系列之二 基础代码的编写2(转)_基础代码的编写

这些运算无非就是为了判断一个表达式成立不成立,在C语言中,只要表达式的值不为零并且符合关系运算符的要求,那这个表达式就成立的,就可以用上述的两种运算符进行比较运算,一般情况下,这些运算符会配合下节我们要讲述的流程控制语句来使用,所以这里我就不给出具体用法的例子了,有情趣的朋友,可以继续看下面章节中的例子

 

到现在我想主要的运算我都讲完了,虽然不是很详细,但是我想,只要大家坚持努力,多多百度,这些知识一定会掌握好的。

 

小学的时候,我们学过四则运算,在运算的时候,遵循先乘除,后加减,有括弧的先算括弧里面的,这个规则在这里一样使用,只不过在编程环境中,运算符很多,所以需要有个更为详细的运算符优先级表。这里我把它贴出来,但是还希望大家能够尽量的使用括弧来让人看的容易,以免出错,具体优先级表转载如下:

笨鸟先飞学编程系列之二 基础代码的编写2(转)_基础代码的编写_02

更详细的用法可以参考如下链接:http://www.xxlinux.com/linux/article/development/soft/20060909/4128.html

二、           三种程序流程控制结构详解。

有了上述的运算,我想大家都可以写出一些很简单的代码了,但是我们在写代码的时候,肯定会遇到类似这样的问题:

Ø         有时候,我们写的代码必须要在达到某种条件之后才可以执行,否则不让运行。

Ø         有时候,我们写的代码很庞大,很罗嗦,因为它有几种可能需要我们来写出几个程序。

Ø         有时候,我们写的代码需要一直重复执行直到某种条件不成立了才不执行。

 

只要你遇到过上述的问题,那我们这节课的内容就正是你所需要的。不多废话,进入正题:

1.         顺序结构

到现在为止,我们写的所有的代码都是顺序结构的,所谓顺序结构,就是代码从第一条指令开始执行,直到执行完最后一条。中间不会落下任何一条指令。

 

想必大家现在应该能理解什么是顺序结构了,所以我不想再这里浪费太多的篇幅,直接进入下一小节。

2.         分支结构

所谓分支结构,就是代码在达到某种条件的时候,执行某些指令,否则就执行别的指令。

分支结构是改变代码执行顺序最简单的方式,所以大家一定可以很容易的掌握它的,下面让我们一个一个的来看。

a)        if … else结构

这个结构算是编程中最基础的结构了,它有三种格式,我在这里列出来,大家可以根据实际情况选择使用哪个:

第一种格式:

if (条件表达式)

{   

     //条件成立时执行这里的语句

     

}

第二种格式:

if (条件表达式)

{   

     //条件成立时执行这里的语句

     

}

else

{

     //条件不成立时执行这里的语句

     

}

第三种格式:

if (条件表达式1)    

{

     //条件表达式1成立时执行这里的语句

     

}                   

else if (条件表达式2)  // 这里的else if可以有无限多个(如果有很多个时可以参考使用switch语句)。

     //条件表达式2成立时执行这里的语句

     

}                   

else                

{

     //条件表达式都不成立时执行这里的语句

     

}   

 

                            为了更好的说明这个语句的用法,我举个例子:

int MaxNum(int num001,  int num002,  int num003)

{

     if (num001 >= num002)

     {

         if (num001 >= num003)

         {

              return num001;         //  num001 作为函数的结果返回出来。

         }

         else

         {

              return num003;

         }

     }

     else

     {

         if (num002 >= num003)

         {

              return num002;

         }

         else

         {

              return num003;

         }

     }

}

                     说明:上述代码中的功能是从提供的三个数:num001num002num003中选出最大的数来。

至于与这些if有关的汇编指令就是跳转,像subcmptest,之类的比较指令来影响相应的标志寄存器还有JE,JNE,JB,JNB之类的跳转指令来跳转到指定的代码中执行,大家可以像我们分析算术运算的方式一样,去调试它,去分析它,去掌握这些比较和跳转指令的用法。

 

这里我就省下篇幅,继续我们的switch结构。

b)        switch … 结构

上小节中讲述的if语句,是用于少数分支时的处理语句,它写起来方便,代码简洁明了,但是如果一些表达式的结构可能有5种甚至更多种结果,需要我们分别作出不同的处理时,最好的选择就是用wsitch语句。      

先说明一下switch结构的语法格式:

switch(表达式结果或者存放结果的变量)

{

case  结果1:

     // switch后的括弧中的值是结果时,就执行这里的语句

     ...;

     break;   // break是用来跳出分支结构的关键字,如果这里没有它,只要结果是结果1,那从结果1开始向下的所有指令都会被执行(包括结果2,结果3……)。

 

case  结果2:

     // switch后的括弧中的值是结果时,就执行这里的语句

     ...;

     break;   // 如果这里没有这个关键字时,只要上面的结果是结果2,那从结果2开始向下的所有指令都会被执行(包括结果3,结果4……)。

 

case  结果3:

     // switch后的括弧中的值是结果时,就执行这里的语句

     ...;

     break;   // 同上

 

case  结果N:

     // switch后的括弧中的值是结果N时,就执行这里的语句

     ...;

     break;  

 

default:

     // switch后的括弧中的值不是上面列出的任何一个值时,就执行这里的语句

     ...;

}

 

                     这里写的可能有点模糊,我给出一个代码片段,我说明一下switch语句的用法:

PGAME_CHAR_INFO pGCI = GetCharInfoPoint();

switch (pGCI->dwZhiYe)

{

case 1:

     lstrcpyW(szTemp, L"灵剑\0");

     break;

case 2:

     lstrcpyW(szTemp, L"日羽\0");

     break;

case 3:

     lstrcpyW(szTemp, L"枪侠\0");

     break;

case 4:

     lstrcpyW(szTemp, L"萨满\0");

     break;

case 5:

     lstrcpyW(szTemp, L"法皇\0");

     break;

case 6:

     lstrcpyW(szTemp, L"药王\0");

     break;

default:

     lstrcpyW(szTemp, L"未知\0");

     break;

}

 

其实,这个switch的汇编形式跟if结构很像,唯一的区别就是每个分支后面都会有一个break跳转(JMP)指令,大家可以自己试着去调试这段代码,分析一下尽量掌握这些代码的汇编形式。

转自:http://www.cppblog.com/besterChen/archive/2009/03/31/78434.html