从单片机基础到程序框架(全集 2019pdf版).pdf - 第209页
while(1) { } } /*---C 语言学习区 域的结束。 ----- ----------- ---------- ----------- ---------- */ 在电脑串口 助手软件上观 察到的程序执 行现象 如下: 开始... 第 1 个数 十进制:3 十六进制:3 二进制:11 第 2 个数 十进制:6 十六进制:6 二进制:110 第 3 个数 十进制:9 十六进制:9 二进制:100 1 分析: 变量 a 为 3…

上面举的例子中,仅仅列出了 for 语句条件判断的小于号关系符“<”,其实,for 语句条件判断的关系
符跟 if 语句是一样通用的,凡是 if 语句能用的关系符都可以用在 for 语句上,比如“>”,“!=”,“==”,
“<=”,“>=”等等。如下:
for(i=0;i<=3;i++); //小于等于的情况。这种写法是合法的。
for(i=0;i!=3;i++); //不等于的情况。这种写法是合法的。
for(i=0;i==3;i++); //等于的情况。这种写法是合法的。
【49.8 例程练习和分析。】
编写一个程序来熟悉一下 do while 和 for 语句的使用。
程序代码如下:
/*---C 语言学习区域的开始。-----------------------------------------------*/
unsigned char a=0; //观察这个数最后的变化
unsigned char b=0; //观察这个数最后的变化
unsigned char c=0; //观察这个数最后的变化
unsigned char i; //控制循环体的条件判断变量
void main() //主函数
{
i=3;
do
{
a=a+1; //每执行一次循环体 a 就增加 1,此行代码被循环执行了 3 次
i=i-1; //i 不断变小
}while(i); //i 不断变小,当 i 变为 0 时才跳出此循环体
for(i=0;i<3;i++)
{
b=b+2; //此行代码被循环执行了 3 次
}
for(i=3;i>0;i--)
{
c=c+3; //此行代码被循环执行了 3 次
}
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。

while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
第 1 个数
十进制:3
十六进制:3
二进制:11
第 2 个数
十进制:6
十六进制:6
二进制:110
第 3 个数
十进制:9
十六进制:9
二进制:1001
分析:
变量 a 为 3。a 从 0 开始,循环加 1,一共 3 次,因此等于 3。
变量 b 为 6。b 从 0 开始,循环加 2,一共 3 次,因此等于 6。
变量 c 为 9。c 从 0 开始,循环加 3,一共 3 次,因此等于 9。
【49.9 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改“C 语言学习区域”的代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口的 51 学习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。

第五十节: 循环体内的 continue 和 break 语句。
【50.1 continue 语句。】
通常情况下,单片机在循环体里从第一行的“入口条件”开始往下执行,直至碰到循环体的边界“底部
花括号”,才又折回到第一行的“入口条件”准备进行新一轮的循环。但是,若中途碰到 continue 语句,就
会提前结束当前这一轮的循环,只要碰到 continue 语句,就立即折回到第一行的“入口条件”准备进行新
一轮的循环。注意,continue 语句“结束”的对象仅仅是“当前这一轮的循环”,并没有真正结束这个循环
的生命周期。它好像拦路虎,遇到它,它说“你回去,第二天再来。”这台词里的“第二天再来”就强调这
个循环体的生命周期还没有真正结束。举一个具体的例子,如下:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
continue;
语句 3;
……
语句 N;
} //循环体结束
分析:上述语句中,单片机从“循环体的条件判断入口处”开始往下执行,碰到 continue 就马上折回
到“循环体的条件判断入口处”,继续开始新一轮的循环,因此,这段代码,continue 后面的“语句 3”至
“语句 N”是永远也不会被执行到的。因为 continue 的拦截,上述语句等效于:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
} //循环体结束
问题来了,既然可以如此简化,还要 continue 干什么,不是多此一举?在实际应用中,continue 肯定
不会像上面这样单独使用,continue 只有跟 if 语句结合,才有它存在的意义。例如:
while(…)或者 for(…) //循环体的条件判断入口处
{ //循环体开始
语句 1;
语句 2;
if(某条件)
{
continue;
}
语句 3;
……
语句 N;