2.3if语句
if 语句是用来判定所给定的条件是否满足根据判定的结果(真或假)决定执行给出的两
种操作之一。
C 语言提供了三种形式的if 语句
1. if(表达式) 语句
如果表达式的结果为真,则执行语句,否则不执行
2. if(表达式) 语句1 else 语句2
如果表达式的结果为真,则执行语句1,否则执行语句2
3.if(表达式1) 语句 1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else if(表达式m) 语句 m
else 语句n
这条语句执行如图2 所示。
上述程序中的如下语句:
if((KeyV|0xc3)==0xff) //无键按下
return(0);
是第一种if 语句的应用。该语句中“|”符号是C 语言中的位运算符,按位相或的意思,
相当于汇编语言中“ORL”指令,将读取的P3 口的值KeyV 与0xc3(即11000011B)按位
或,如果结果为0xff(即11111111B)说明没有键被按下,因为中间4 位接有按键,如果有
键按下,那么P3 口值的中间4 位中必然有一位或更多位是“0”。该语句中的“return(0)”
是返回之意,相当于汇编语言中的“ret”指令,通过该语句可以带返回值,即该号中的数
值,返回值就是这个函数的值,在这个函数被调用时,用了如下的形式:KValue=Key();因
此,返回的结果是该值被赋给Kvalue 这个变量。因此,如果没有键被按下,则直接返回,
并且Kvalue 的值将变为0。如果有键被按下,那么return(0)将不会被执行。
程序其他地方还有这样的用法,请注意观察与分析。
程序中:
if(Start)
{… 灯流动显示的代码 }
else
P1=0xff; //否则灯全灭
是 if 语句的第二种用法,其中Start 是一个位变量,该变量在main 函数的中被定义,并
赋以初值0,该变量在按键K1 被按下后置为1,而K2 按下后被清为0,用来控制灯流动是
否开始。这里就是判断该变量并决定灯流动是否开始的代码,观察if 后面括号中的写法,
与其他语言中写法很不一样,并没有一个关系表达式,而仅仅只有一个变量名,C 根据这个
量是0 还是1 来决定程序的走向,如果为1 则执行灯流动显示的代码,如果为0,则执行
P1=0xff;语句。可见,在C 语言中,数据类型的概念比其他很多的编程语言要“弱化”,或
者说C 更着重从本质的角度去考虑问题,if 后面的括号中不仅可以是关系表达式,也可以是
算术表达式,还可以就是一个变量,甚至是一个常量,不管怎样,C 总是根据这个表达式的
值是零还是非零来决定程序的走向,这个特点是其他中所没有的,请注意理解。
if 语句的第三种用法在本程序中没有出现,下面我们举一例说明。在上述的键盘处理函
数Key 中,如果没键被按下,返回值是0,如果有键被按下,经过去键抖的处理,将返回键
值,程序中的“return(KeyV);”即返回键值。当K1 被按下(P3.2 接地)时,返回值是0xfb
(11111011B),而K2 被按下(P3.3 接地)时,返回值是0xf7(11110111B),K3 被按下(P3.4
接地)时,返回值是0xef(11101111B),K4 被按下(P3.5 接地)时,返回值是0xdf(11011111B),
该值将被赋给主程序中调用键盘程序的变量KValue。程序用了另一种选择结构switch 进行
处理,关于switch 将在稍后介绍。下面用if 语句来改写:
if(KValue==0xfb)
{Start=1;}
else if(KValue==0xf7)
{Start=0;}
else if(KValue==0xef)
{UpDown=1;}
else if(KValue==0xdf)
{UpDown=0;}
else
{//意外处理}
……
程序中第一条语句判断Kvalue 是否等于0xfb,如果是就执行Start=1;执行完毕即退出if
语句,执行if 语句下面的程序,如果Kvalue 不等于0xfb 就转去下一个else if 即判断Kvalue
是否等于0xf7,如果等于则执行Start=0;,并退出if 语句…这样一直到最后一个else if 后面
的条件判断完毕为止,如果所有的条件都不满足,那么就去执行else 后面的语句(通常这
意味着出现了异常,在这里来统一处理这种异常情况)。
种操作之一。
C 语言提供了三种形式的if 语句
1. if(表达式) 语句
如果表达式的结果为真,则执行语句,否则不执行
2. if(表达式) 语句1 else 语句2
如果表达式的结果为真,则执行语句1,否则执行语句2
3.if(表达式1) 语句 1
else if(表达式2) 语句2
else if(表达式3) 语句3
…
else if(表达式m) 语句 m
else 语句n
这条语句执行如图2 所示。
上述程序中的如下语句:
if((KeyV|0xc3)==0xff) //无键按下
return(0);
是第一种if 语句的应用。该语句中“|”符号是C 语言中的位运算符,按位相或的意思,
相当于汇编语言中“ORL”指令,将读取的P3 口的值KeyV 与0xc3(即11000011B)按位
或,如果结果为0xff(即11111111B)说明没有键被按下,因为中间4 位接有按键,如果有
键按下,那么P3 口值的中间4 位中必然有一位或更多位是“0”。该语句中的“return(0)”
是返回之意,相当于汇编语言中的“ret”指令,通过该语句可以带返回值,即该号中的数
值,返回值就是这个函数的值,在这个函数被调用时,用了如下的形式:KValue=Key();因
此,返回的结果是该值被赋给Kvalue 这个变量。因此,如果没有键被按下,则直接返回,
并且Kvalue 的值将变为0。如果有键被按下,那么return(0)将不会被执行。
程序其他地方还有这样的用法,请注意观察与分析。
程序中:
if(Start)
{… 灯流动显示的代码 }
else
P1=0xff; //否则灯全灭
是 if 语句的第二种用法,其中Start 是一个位变量,该变量在main 函数的中被定义,并
赋以初值0,该变量在按键K1 被按下后置为1,而K2 按下后被清为0,用来控制灯流动是
否开始。这里就是判断该变量并决定灯流动是否开始的代码,观察if 后面括号中的写法,
与其他语言中写法很不一样,并没有一个关系表达式,而仅仅只有一个变量名,C 根据这个
量是0 还是1 来决定程序的走向,如果为1 则执行灯流动显示的代码,如果为0,则执行
P1=0xff;语句。可见,在C 语言中,数据类型的概念比其他很多的编程语言要“弱化”,或
者说C 更着重从本质的角度去考虑问题,if 后面的括号中不仅可以是关系表达式,也可以是
算术表达式,还可以就是一个变量,甚至是一个常量,不管怎样,C 总是根据这个表达式的
值是零还是非零来决定程序的走向,这个特点是其他中所没有的,请注意理解。
if 语句的第三种用法在本程序中没有出现,下面我们举一例说明。在上述的键盘处理函
数Key 中,如果没键被按下,返回值是0,如果有键被按下,经过去键抖的处理,将返回键
值,程序中的“return(KeyV);”即返回键值。当K1 被按下(P3.2 接地)时,返回值是0xfb
(11111011B),而K2 被按下(P3.3 接地)时,返回值是0xf7(11110111B),K3 被按下(P3.4
接地)时,返回值是0xef(11101111B),K4 被按下(P3.5 接地)时,返回值是0xdf(11011111B),
该值将被赋给主程序中调用键盘程序的变量KValue。程序用了另一种选择结构switch 进行
处理,关于switch 将在稍后介绍。下面用if 语句来改写:
if(KValue==0xfb)
{Start=1;}
else if(KValue==0xf7)
{Start=0;}
else if(KValue==0xef)
{UpDown=1;}
else if(KValue==0xdf)
{UpDown=0;}
else
{//意外处理}
……
程序中第一条语句判断Kvalue 是否等于0xfb,如果是就执行Start=1;执行完毕即退出if
语句,执行if 语句下面的程序,如果Kvalue 不等于0xfb 就转去下一个else if 即判断Kvalue
是否等于0xf7,如果等于则执行Start=0;,并退出if 语句…这样一直到最后一个else if 后面
的条件判断完毕为止,如果所有的条件都不满足,那么就去执行else 后面的语句(通常这
意味着出现了异常,在这里来统一处理这种异常情况)。