1. <em id="3qmea"><ol id="3qmea"></ol></em>
    2. <em id="3qmea"></em>
      中国领先的单片机及嵌入式资讯¡¢教程¡¢开发工具提供者!
      当前位置£º单片机教程网 >> 基础教程 >> 浏览文章

      第十三课 C51循环语句

      作者:佚名   来源:本站原创   点击数:¡­  更新时间£º2007年07月14日   ¡¾字体£º ¡¿

      循环语句是几乎每个程序都会用到的£¬它的作用就是用来实?#20013;?#35201;反复进行多次的操 作¡£如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时£¬那么就要执行 1000 次空语句 才能达到延时的目的£¨当然能使用定时器来做£¬这里就不讨论£©£¬如果是写 1000 条空语 句那?#23884;?#20040;麻烦的事情£¬再者就是要占用很多的存储空间¡£我们能知道这 1000 条空语句£¬ 无非就是一条空语句重复执行 1000 次£¬因此我们就能用循环语句去写£¬这样不但使程序

      结构清晰明了£¬而且使其编译的效率大大的提高¡£在  C  语言中构成循环控制的语句有 while,do-while,for 和 goto 语句¡£同样都是起到循环作用£¬但具体的作用和使用方法又大不一 样¡£我们具体来看?#30784;?/p>

      goto 语句

      这个语句在很多高级语言中都会有£¬记得小时候用 BASIC ?#26412;?#24456;?#19981;?#29992;这个语句¡£它是 一个无条件的转向语句£¬只要执行到这个语句£¬程序指针就会跳转到 goto 后的标号所在的 程序段¡£它的语法如下£º

      goto  语句标号; 其中的语句标号为一个带冒号的标识符¡£示例如下

      void  main(void)

      {

      unsigned  char  a;

      start:  a++;

      if  (a==10)  goto  end;

      goto  start;

      end:;

      }

      上面一段程序只是说明一下 goto 的使用方法£¬?#23548;时?#20889;很少使用这样的手法¡£这段程序的意思

      是在程序开始处用标识符¡°start:¡±标识£¬表示程序这是程序的开始£¬¡°end:¡±标识程序的 结束£¬标识符的定义应遵循前面所讲的标识符定义原则£¬不能用 C 的关键字也不能和其它变 量和函数名相同£¬不然就会出错了¡£程序执行 a++,a 的?#23548;?1£¬当 a 等于 10 时程序会跳到 end 标识处结束程序£¬不然跳回到 start 标识处继续 a++,直到 a 等于 10¡£上面的示例说明 goto 不但能无条件的转向,而且能和 if 语句构成一个循环结构£¬这些在 C 程序员的程 序中都不太常见£¬常见的 goto 语句使用方法是用它来跳出多重循环£¬不过它只能从内层循环 跳到外层循环£¬不能从外层循环跳到内层循环¡£在下面说到 for 循环语句时再略为提一提¡£ 为何大多数 C 程序员都不?#19981;?#29992; goto 语句£¿那是因为过多的使用它时会程序结?#20849;?#28165;晰£¬

      过多的跳转就使程序又回到了汇编的编程风格£¬使程序失去了 C 的模块化的优点¡£

      while 语句

      while  语句的意思很不难理解£¬在英语中它的意思是¡°当¡­的时候¡­?#20445;?#22312;这里我们可 以理解为¡°当条件为真的时候就执行后面的语句?#20445;?#23427;的语法如下£º

      while  (条件表达式)  语句;

      使用 while 语句时要注意当条件表达式为真时£¬它才执行后面的语句£¬执行完后再?#20301;?/p>

      到 while 执行条件判断£¬为真时重复执行语句£¬为假时退出循环体¡£当条件一开始就为假时£¬ 那么 while 后面的循环体£¨语句或复合语句£©将一次都不执行就退出循环¡£在调试程序时要


       

      注意 while 的判断条件不能为假而造成的死循环£¬调试时?#23454;?#30340;在 while 处加入?#31995;ã£?#20063;许 会使你的调试工作更加顺利¡£当然有时会使用到死循环来等待中断或 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 语句似乎没有什么两样£¬但在?#23548;?#30340;应用中要注

      意任何 do while 的循环体一定会被执行一次¡£如把上面两个程序中 I 的初值设为 11£¬那么 前一个程序不会得到显示结果£¬而后一个程序则会得到 SUM=11¡£

      for  语句

      在明确循环次数的情况下£¬for 语句比以上说的循环语句?#23478;?#26041;便简单¡£它的语法如下£º for  ([初值设定表达式];[循环条件表达式];[条件更新表达式])  语句 中括号中的表达式是可选的£¬这样 for 语句的变化就会很多样了¡£for 语句的执行£º先

      代入初值£¬再判断条件是否为真£¬条件满足时执行循环体并更新条件£¬再判断条件是否为 真¡­¡­直?#25945;?#20214;为假时£¬退出循环¡£下面的例子所要实现的是和上二个例子一样的£¬对照着 看不难理解几个循环语句的差异¡£

      #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(;;)会怎么样呢£¿试试?#30784;?/p>

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

      }

      ¡¾发表评论¡¿¡¾告诉好友¡¿¡¾收藏此文¡¿¡¾关闭窗口¡¿

      文章评论

      相关文章

      Çຣ11Ñ¡5appÏÂÔØ

        
        
        1. <em id="3qmea"><ol id="3qmea"></ol></em>
        2. <em id="3qmea"></em>

            
            
            1. <em id="3qmea"><ol id="3qmea"></ol></em>
            2. <em id="3qmea"></em>