首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怎么用循环改掉GOTO呀?高手指教

2012-02-14 
如何用循环改掉GOTO呀?高手指教!#includestdio.hvoidmain(){constintN4unsignedints[N],d[N],e[N]int

如何用循环改掉GOTO呀?高手指教!
#include   <stdio.h>

void   main()
{
const   int   N=4;
unsigned   int   s[N],d[N],e[N];

int   p,q,r,i,k;

s[0]=s[1]=1;
for(i=2;i <N;++i)
{
s[i]=d[i]=i;
e[i]=-1;
}

loop:
{
q=0;
for(i=1;i <N;++i)printf( "%d     ",s[i]);
printf( "\n ");
for(k=N-1;k> =2;--k)
{
d[k]=d[k]+e[k];
p=d[k];
if(p==k)
e[k]=-1;
else   if(p==0)
{
e[k]=1;++q;
}
else
{
p+=q;r=s[p];s[p]=s[p+1];s[p+1]=r;

goto   loop;
}
}


}
}

[解决办法]
int main ()
{
const int N=4;
int flag=1;
unsigned int s[N],d[N],e[N];

int p,q,r,i,k;

s[0]=s[1]=1;
for(i=2;i <N;++i)
{
s[i]=d[i]=i;
e[i]=-1;
}

do

{
q=0;
for(i=1;i <N;++i)printf( "%d ",s[i]);
printf( "\n ");
for(k=N-1;k> =2;--k)
{
d[k]=d[k]+e[k];
p=d[k];
if(p==k)
e[k]=-1;
else if(p==0)
{
e[k]=1;++q;
}
else
{
p+=q;r=s[p];s[p]=s[p+1];s[p+1]=r;

break;
}

}
if(k <2)
flag=0;

}
while(flag==1);

return 0;
}

[解决办法]
goto就是一个do while

[解决办法]
我用FOR,不带标志做的:
#include <stdio.h>

void main ()
{
const int N=5;
unsigned int s[N],d[N],e[N];

int p,q,r,i,k;

s[0]=s[1]=1;
for(i=2;i <N;++i)
{
s[i]=d[i]=i;e[i]=-1;
}
for(;;)
{
q=0;
for(i=1;i <N;++i)printf( "%d ",s[i]);
printf( "\n ");
for(k=N-1;k> =2;--k)
{
d[k]=d[k]+e[k];
p=d[k];
if(p==k)
e[k]=-1;
else if(p==0)
{
e[k]=1;++q;
}
else
{
p+=q;r=s[p];s[p]=s[p+1];s[p+1]=r;
break;
}
}
if(k <2)
break;
}
}

热点排行