使用goto实现循环,跳转语句

来源:互联网 发布:知乎何炅和撒贝宁关系 编辑:程序博客网 时间:2024/05/17 06:55

/*计算从0-10的和*/

do-while语句:

/*****************do while版***************/

   int sum = 0;   int i = 0;   do   {       sum += i;       i++;   }   while(i <= 10);


do while 版的 goto语句实现:

   int sum = 0;   int i = 0;loop:   sum += i;   i++;   if(i <= 10)        goto loop;done:


/*****************do while版***************/

while版本:

/*****************while版***************/

   int sum = 0;   int i = 0;   while(i <= 10)   {       sum += i;       i++;   }


while版goto语句实现:

 

  int sum = 0;  int i = 0;  if(!(i <= 10))        goto done;loop:    sum += i;    i++;    if(i <= 10)        goto loop;done:


/*****************while版***************/


for语言实现:

/*****************for版***************/

  int sum = 0;  for(int i = 0; i <= 10;i++)        sum += i;



goto版的for语句:

 

   int sum = 0;   int i = 0;   if(!(i <= 10))        goto done;   loop:       sum += i;       i++;       if(i <= 10)          goto loop;   done:


/*****************for版***************/


使用goto语句加深对break和continue的理解。

计算0——100内偶数的和,break版:

*****************理解break***************/

 

        int sum  =  0;        for(int i  =  0 ;i  <=  100;  i++)        {               if(i % 2 == 1)                        continue;                sum += i;        }


goto 版:

 

        int i = 0;        int sum = 0;        if(!(i <= 100))            goto done;    loop:            if(!(i % 2 == 1))                goto lab2;/*注意跳转的条件,以及跳转到的地方,可以看出continue只是终止了本层循环*/    lab1:           sum += i;    lab2:           i++;           if(i <= 100)                goto  loop;    done:


*****************理解break***************/

下面 该理解break了。

使用上面同样的例子,不过把continue换成break。

        int sum = 0;        for(int i = 0;i < 100;i++)        {                if(i % 2 == 0)                <span style="white-space:pre"></span>break;                sum+=i;        }


  goto版:  

        int i = 0;        int sum = 0;        if(!(i <= 100))            goto done;    loop:        if(!(i % 2 == 1))  /*这里可以看出直接跳出,终止循环*/            goto done;    lab1:           sum += i;    lab2:           i++;           if(i <= 100)                goto  loop;    done:
通过这两个例子,应该很清楚的明白break和continue之间的区别了,这与编译器生成汇编指令的逻辑是相同的,其实C中的goto就是汇编当中的jmp语句了。


0 0
原创粉丝点击