<meta name="keywords" content="必胜时时彩开户,keywords" /> 第十三课 C51循环语句 联系我们

第十三课 C51循环语句

循环语句是简直每个法式模范模范都邑用到的,它的作用就是用来完成须要重复阻拦一再再三的操 作。如一个 12M 的 51 芯片应用电路中请求完成 1 毫秒的延时,那么就要推行 1000 次空语句 才干到达延时的目的(虽然能应用准时器来做,这里就不议论辩说),假定是写 1000 条空语 句那是何等费事的使命,再者就是要占用许多的存储空间。我们能知道这 1000 条空语句, 不外就是一条空语句重复推行 1000 次,是以我们便可以用循环语句去写,这样不只使法式模范模范

结构清晰清晰了了,而且使其编译的效力年夜年夜的前进。在  C  语言中组成循环控制的语句有 while,do-while,for 和 goto 语句。异常都是起到循环作用,但详细的作用和应用措施又年夜纷歧 样。我们详细来看看。

goto 语句

这个语句在许多高等语言中都邑有,记得小时间用 BASIC 时就很喜欢用这个语句。它是 一个无条件的转向语句,只需推行到这个语句,法式模范模范指针就会跳转到 goto 后的标号所在的 法式模范模范段。它的语法以下:

goto  语句标号; 其中的语句标号为一个带冒号的标识符。示例以下

void  main(void)

{

unsigned  char  a;

start:  a++;

if  (a==10)  goto  end;

goto  start;

end:;

}

下面一段法式模范模范只是诠释一下 goto 的应用措施,现实编写很少应用这样的手段。这段法式模范模范的意思

是在法式模范模范泉源处用标识符“start:”标识,体现法式模范模范这是法式模范模范的泉源,“end:”标识法式模范模范的 阻拦,标识符的界说应遵守前面所讲的标识符界说准绳,不克不及用 C 的要害字也不克不及和其它变 量和函数名类似,否则就会掉落足了。法式模范模范推行 a++,a 的值加 1,当 a 即是 10 时法式模范模范会跳到 end 标识处阻拦法式模范模范,否则跳回到 start 标识处一连 a++,直到 a 即是 10。下面的示例诠释 goto 不只能无条件的转向,而且能和 if 语句组成一个循环结构,这些在 C 法式模范模范员的程 序中都不太有数,有数的 goto 语句应用措施是用它来跳出多重循环,不外它只能从内层循环 跳到外层循环,不克不及从外层循环跳到内层循环。不才面说到 for 循环语句时再略为提一提。 为何年夜多数 C 法式模范模范员都不喜欢用 goto 语句?那是由于过量的应用它时会法式模范模范结构不清晰,

过量的跳转就使法式模范模范又回到了汇编的编程气焰气焰,使法式模范模范掉落去了 C 的模块化的优点。

while 语句

while  语句的意思很不难明得,在英语中它的意思是“当…的时间…”,在这里我们可 以明确为“以后提为真的时间就推行前面的语句”,它的语法以下:

while  (条件表达式)  语句;

应用 while 语句时要重视以后提表达式为真时,它才推行前面的语句,推行完后再次回

到 while 推行条件断定,为真时重复推行语句,为假时加入循环体。以后提一泉源就为假时, 那么 while 前面的循环体(语句或复合语句)将一次都不推行就加入循环。在调试法式模范模范时要


 

重视 while 的断定条件不克不及为假而组成的去世循环,调试时适当的在 while 处加入断点,或许 会使你的调试使命加倍顺遂。虽然有时会应用到去世循环来期待中止或 IO 旌旗暗记等,如在第一 篇时我们就用了 while(1)来一直的输入“Hello  World!”。下面的例子是显示从 1 到 10 的累 加和,读者能修改一下 while 中的条件看算作果会假定,从而体会一下 while 的应用措施。

#include <AT89X51.H>

#include <stdio.h>

void main(void)

{

unsigned int I = 1;

unsigned int SUM = 0; //设初值

SCON = 0x50; //串行口要领 1,允许吸收

TMOD = 0x20; //准时器 1 准时要领 2

TCON = 0x40; //设准时器 1 泉源计数

TH1 = 0xE8;   //11.0592MHz 1200 波特率

TL1 = 0xE8; TI = 1;

TR1 = 1; //启动准时器

while(I<=10)

{

SUM = I + SUM; //累加

printf ("%d SUM=%d\n",I,SUM); //显示

I++;

}

while(1); //这句是为了不让法式模范模范完后,法式模范模范指针一连向下组成法式模范模范“跑飞”

}

//最后运转效果是 SUM=55;

do  while 语句

do while 语句能说是 while 语句的填补,while 是先断定条件能否培植再推行循环体,

而 do  while 则是先推行循环体,再凭证条件断定能否要加入循环。这样就决议了循环体无 论在任何条件下都邑至少被推行一次。它的语法以下:

do  语句  while  (条件表达式)

用 do  while 怎样写下面谁人例程呢?先想想,再参考下面的法式模范模范。

#include  <AT89X51.H>

#include  <stdio.h>

void  main(void)

{


 

unsigned  int  I  =  1;

unsigned  int  SUM  =  0;  //设初值

SCON  =  0x50;  //串行口要领 1,允许吸收 TMOD  =  0x20;  //准时器 1 准时要领 2

TCON  =  0x40;  //设准时器 1 泉源计数

TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

TI  =  1;

TR1  =  1;  //启动准时器

do

{

SUM  =  I  +  SUM;  //累加

printf  ("%d  SUM=%d\n",I,SUM);  //显示 I++;

}

while(I<=10);

while(1);

}

不才面的法式模范模范看来 do  while 语句和 while 语句似乎没有甚么两样,但在现实的应用中要注

意任何 do while 的循环体一定会被推行一次。如把下面两个法式模范模范中 I 的初值设为 11,那么 前一个法式模范模范不会取得显示效果,尔后一个法式模范模范则会取得 SUM=11。

for  语句

在明确循环次数的情形下,for 语句比以上说的循环语句都要便利质朴。它的语法以下: for  ([初值设定表达式];[循环条件表达式];[条件更新表达式])  语句 中括号中的表达式是可选的,这样 for 语句的变换就会许多样了。for 语句的推行:先

代入初值,再断定条件能否为真,条件知足时推行循环体并更新条件,再断定条件能否为 真……直到条件为假时,加入循环。下面的例子所要完成的是和上二个例子一样的,较量着 看不难明得几个循环语句的差异。

#include  <AT89X51.H>

#include  <stdio.h>

void  main(void)

{

unsigned  int  I;

unsigned  int  SUM  =  0;  //设初值

SCON  =  0x50;  //串行口要领 1,允许吸收 TMOD  =  0x20;  //准时器 1 准时要领 2

TCON  =  0x40;  //设准时器 1 泉源计数


 

TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

TI  =  1;

TR1  =  1;  //启动准时器

for  (I=1;  I<=10;  I++)  //这里能设初始值,以是变量界说时能不设

{

SUM  =  I  +  SUM;  //累加

printf  ("%d  SUM=%d\n",I,SUM);  //显示

}

while(1);

}

假定我们把法式模范模范中的 for 改成 for(; I<=10; I++)这样条件的初值会酿成以后 I 变量的

值。假定改成 for(;;)会怎样样呢?尝尝看。

continue  语句

continue  语句是用于中止的语句,通常应用在循环中,它的作用是阻拦本次循环,跳 过循环体中没有推行的语句,跳转到下一次循环周期。语法为:

continue;

continue 同时也是一个无条件跳转语句,但功效和前面说到的 break 语句有所纷歧样, continue  推行后不是跳出循环,而是跳到循环的泉源并推行下一次的循环。不才面的例子 中的循环体加入 if  (I==5)  continue;看看甚么效果?

return  语句

return 语句是前往语句,不属于循环语句,是要学习的最后一个语句以是一并写下了。 前往语句是用于阻拦函数的推行,前往到挪用函数时的职位。语法有二种:

return  (表达式);

return; 语法中因带有表达式,前往时先盘算表达式,再前往表达式的值。不带表达式则前往的

值不愿定。

下面是一个异常是盘算 1-10 的累加,所纷歧样是的用了函数的要领。

#include  <AT89X51.H>

#include  <stdio.h>

int  Count(void);  //声明函数

void  main(void)

{

unsigned  int  temp;


 

SCON  =  0x50;  //串行口要领 1,允许吸收 TMOD  =  0x20;  //准时器 1 准时要领 2

TCON  =  0x40;  //设准时器 1 泉源计数

TH1  =  0xE8;  //11.0592MHz  1200 波特率 TL1  =  0xE8;

TI  =  1;

TR1  =  1;  //启动准时器

temp  =  Count();

printf  ("1-10  SUM=%d\n",temp);  //显示

while(1);

}

int  Count(void)

{

unsigned  int  I,  SUM;

for  (I=1;  I<=10;  I++)

{

SUM  =  I  +  SUM;  //累加

}

return  (SUM);

}