从单片机基础到程序框架(全集 2019pdf版) - 第207页
上述的 wh ile 循环语句只执 行了 3 次循环体。 【49.5 for 省略花括号,没带分号。 】 前面讲的 if 和 while 语句中, 都提到了省略花括 号的情况, for 语句也有这种 写法, 而且 省略之后默 认 的有效范围 都是一样的。 请看例子如下 : for(i=0; i <3;i++) //注意,这里 没带分号。 语句 1; 语句 2; …… 语句 N; 分析:上述 代码,跟 if 语句 一样,此时循 环体…

语句 N;
}
上述代码,单片机从上往下,在进入循环体前,先把变量 i 初始化赋值 0(这行初始化代码在整个循环
期间只被执行 1 次),然后判断 i 是否小于 3 这个条件,如果此条件为真,就开始正式进入循环体,从“语
句 1”往下执行到“语句 N”,执行完一次循环体后,i 就自加 1(因为“i++”语句),此时 i 从原来初始化
的 0 变成了 1,接着再返回来到 for 语句的条件判断”i<3”那里,判断 i 是否继续满足“小于 3”这个条件,
如果此条件为真就继续往下执行,否则就跳过循环体结束当前循环。上述 for 语句实现的功能如果用 while
语句来写,等效于以下代码:
i=0; //进入循环体之前先初始化给予初值
while(i<3)
{
语句 1;
语句 2;
……
语句 N;
i++; //执行一次循环体之后此变量自加发生变化
}
上述的 while 循环语句只执行了 3 次循环体。
【49.4 for 语句的自减格式。】
刚才讲的 for(i=0; i<3;i++)这种格式,它的变量 i 是不断自加的。还有一种比较常见的格式是 i 不断
自减的,它的格式如下:
for(i=3; i>0;i--)
{
语句 1;
语句 2;
……
语句 N;
}
上述自减的 for 语句功能如果用 while 语句来写,等效于以下代码:
i=3; //进入循环体之前先初始化给予初值
while(i>0)
{
语句 1;
语句 2;
……
语句 N;
i--; //执行一次循环体之后此变量自减发生变化
}

上述的 while 循环语句只执行了 3 次循环体。
【49.5 for 省略花括号,没带分号。】
前面讲的 if 和 while 语句中,都提到了省略花括号的情况,for 语句也有这种写法,而且省略之后默认
的有效范围都是一样的。请看例子如下:
for(i=0; i<3;i++) //注意,这里没带分号。
语句 1;
语句 2;
……
语句 N;
分析:上述代码,跟 if 语句一样,此时循环体默认只包含“语句 1”,等效于:
for(i=0; i<3;i++) //注意,这里没带分号。
{
语句 1;
}
语句 2;
……
语句 N;
【49.6 for 省略花括号,带分号。】
for(i=0; i<3;i++); //注意,这里带分号。
语句 1;
语句 2;
……
语句 N;
分析:注意,此时循环体默认不包含“语句 1”,而是等效于:
for(i=0; i<3;i++)
{
; //空语句。
}
语句 1;
语句 2;
……
语句 N;
此时循环体内先循环执行三次空语句,然后才会结束 for 循环,接着才从“语句 1”开始往下执行。
【49.7 for 循环语句的条件判断。】

上面举的例子中,仅仅列出了 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 发送到电脑端的串口助手软件上观察。