ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
【49.1 do while语句的常见格式。】 格式如下: do { 语句1; 语句2; …… 语句N; } while(条件); 上述代码,单片机从上往下执行语句,先从do那里无条件进来,从“语句1”开始往下执行,一直执行到“语句N”,才开始判断while(条件)的条件是否为真,如果为真继续返回到do的入口处,继续从“语句1”开始往下执行,依次循环。大家留意到了吗,do while和while语句有什么差别?差别是,do while是先无条件进来执行一次循环体(花括号里所有的程序代码),执行到循环体最底部才判断while(条件)的条件是否为真来决定是否继续循环,先上车再买票。而while语句是先判断条件是否为真再决定是否需要进入循环体,先买票再上车。 【49.2 for语句的简介。】 for语句也是循环语句,任何for语句能实现的功能都可以用while语句来实现同样的功能,for语句和while语句有什么差别呢?for语句把变量初始化,变量的条件判断,变量在执行循环体后的步进变化这三个常见要素集成在语句内部,以标准的格式书写出来。在很多场合下,for在书写和表达方面比while语句显得更加简洁和直观。 【49.3 for语句的自加格式。】 格式如下: for(变量的初始化语句; 变量的条件判断;变量在执行一次循环体后自加的步进变化) { 语句1; 语句2; …… 语句N; } 在把上述变成更具体的代码例程如下: for(i=0; i<3;i++) { 语句1; 语句2; …… 语句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发送到电脑端的串口助手软件上观察。 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学习板,通过电脑端的串口助手软件就可以观察到不同的变量数值,详细方法请看第十一节内容。