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)
{
delayUs(245);
delayUs(245);
}
}