(玩电子) 电子技术学习与研讨
当时方位:单片机教程网 >> 根底教程 >> 阅览文章

第十三课 C51循环句子

作者:佚名   来历:本站原创   点击数:x  更新时刻:2007年07月14日   【字体:

循环句子是简直每个程序都会用到的,它的效果便是用来完成需求重复进行屡次的操 作。如一个 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;


 

casino

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);

}

宣布谈论】【告知老友】【保藏此文】【封闭窗口

文章谈论

相关文章

m88 188bet uedbet 威廉希尔 明升 bwin 明升88 bodog bwin 明升m88.com 18luck 188bet unibet unibet Ladbrokes Ladbrokes casino m88明升 明升 明升 m88.com 188bet m88 明陞 uedbet赫塔菲官网 365bet官网 m88 help
188bet www.188bet.com bwin 平博 unibet 明升 188bet uk Ladbrokes 德赢vwin 188bet m88.com w88 平博88 uedbet体育 188bet 188bet 威廉希尔 明升体育app 平博88 M88 Games vwin德赢 uedbet官网 bodog fun88 188bet