微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机之C语言-4.5基本语句之条件选择语句

51单片机之C语言-4.5基本语句之条件选择语句

时间:11-21 来源:互联网 点击:
1.条件选择语句之if

语句

前面我们讲了数据类型,运算符及表达式。C语言也是一种语言,既然是语言,一定有连接词。这些连接词可以用来表示假设,循环等等。我们先来看看假设if语句。这些连接词有一定的规则,我们只能按照这些规则来编写,否则编译器无法理解,就出错了。

第一种形式为基本形式: if

if(表达式)语句

其语义是:如果表达式的值为真,则执行后面的语句,否则不执行该语句。

这个很好理解,if就是’如果’的意思,如果外面下雨,就带雨伞。在这里“外面下雨”,就是表达式,如果这个表达式是对的,就执行后面的’带雨伞’这个动作。

第二种形式为: if-else

if(表达式)

语句1;

else

语句2;

其语义是:如果表示式的值为真,则执行语句1,否则执行语句2

其执行过程如下图:

举个例子,如果外面下雨就步行,否则就骑自行车。如果’外面下雨’是真的那么就执行’步行’的动作,否则就执行’骑自行车’的动作。

第三种形式为if-else-if形式

前面的表达式很好理解,只有一个,但是对于多个表达式怎么办?这里就用if-else-if语句。其一般形式为:

if(表达式)

语句1;

else if(表达式2)

语句2;

else (表达式3)

语句3;

...

else if(表达式m)

语句m;

else

语句n;

其语义是:依次判断表达式的值,当出现某个值为真时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n。然后继续执行后续程序

在使用if语句中还应注意以下问题:

(1) 在三种形式的if语句中,在if关键字后均为表达式。该表达式通常是逻辑表达式或关系表达式,但也可以是其他表达式,如赋值表达式等,甚至也可以是一个变量。

例如: if(a=5)语句; if(b)语句; if(a=b)语句;

(2) 在if语句中,条件判断表达式必须用括号括起来,在语句之后必须加分号。

(3)在if语句的三种形式中,所有的语句应为单个语句,如果要想在满足条件时执行一组(多个)语句,则必须把这一组语句用{}括起来组成一个复合语句。但要注意的是在}之后不能再加分号。

(4) 在if嵌套语句中,C语言规定,else总是与它前面最近的if配对。

例子:

#include

void main(void)

{

int a,b;

scanf_s("%d%d",&a,&b);

//if第一种形式

if (a >= b) printf("The bigger number is %d\n",a);

//if第二种形式

if (a >= b)

{

printf("The bigger number is %d\n", a);

}

else

{

printf("The bigger number is %d\n", b);

}

system("pause");

}

2. 条件选择语句switch语句

如果分支语句太多,将会使用很多if语句,这样导致程序的可读性很差。这里再来了解一下另外一个条件选择语句,多分支选择switch语句,其一般形式为:

switch(表达式){

case 常量表达式1: 语句1;break;

case 常量表达式2: 语句2;break;

...

case 常量表达式n: 语句n;break;

default :语句n+1;break;

}

其语义是:计算表达式的值。并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时,即执行其后的语句,然后不再进行判断,继续执行后面所有case后的语句。如表达式的值与所有case后的常量表达式均不相同时,则执行default后的语句。注意如果省略break语句,那么CPU会继续执行表达式对应的常量表达式后面的语句。比如,在switch(表达式)中表达式等于常量表达式2,如果语句2后面没有break,那么cpu执行完语句2将继续执行语句3,4,...语句n

现在我们来举个例子说明.

例4-5-1-2

基本语句之switch

语句创建

LED流水灯

#include "reg52.h"

typedef unsigned char uchar;

void delayUs(uchar t);

void delayMs(uchar t);

void main(void)

{

uchar i;

while(1)

{

for(i=0;i<8;i++)

{

switch(i){

case 0: P1=0XFE;break;//点亮第1个灯

case 1: P1=0XFD;break;//点亮第2个灯

case 2: P1=0XFB;break;//点亮第3个灯

case 3: P1=0XF7;break;//点亮第4个灯

case 4: P1=0XEF;break;//点亮第5个灯

case 5: P1=0XDF;break;//点亮第6个灯

case 6: P1=0XBF;break;//点亮第7个灯

case 7: P1=0X7F;break;//点亮第8个灯

default: P1=0;break;

}

delayMs(255);

}

}

}

void delayUs(uchar t)

{

while(--t);

}

void delayMs(uchar t)

{

while(--t)

{

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top