VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 820|回复: 6

如何用循环改掉GOTO呀?高手指教!

[复制链接]

2

主题

2

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-3 20:40:01 | 显示全部楼层 |阅读模式
#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;
                        }
                }
               
       
        }
}
回复

使用道具 举报

0

主题

17

帖子

11.00

积分

新手上路

Rank: 1

积分
11.00
发表于 2020-1-3 22:09:02 | 显示全部楼层
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;
}
回复

使用道具 举报

0

主题

19

帖子

12.00

积分

新手上路

Rank: 1

积分
12.00
发表于 2020-1-4 02:54:01 | 显示全部楼层
读懂了程序的逻辑,自己就可以写出来的。
回复

使用道具 举报

0

主题

24

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-1-5 10:39:01 | 显示全部楼层
goto就是一个do while
回复

使用道具 举报

0

主题

24

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-1-5 11:00:01 | 显示全部楼层
#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;
}

bool loop =false;

do{
q=0;
lop = false;
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;
loop = true;
}
}while(loop);


}
}
回复

使用道具 举报

0

主题

18

帖子

9.00

积分

新手上路

Rank: 1

积分
9.00
发表于 2020-1-28 18:36:01 | 显示全部楼层
我用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;
        }
}
回复

使用道具 举报

0

主题

15

帖子

13.00

积分

新手上路

Rank: 1

积分
13.00
发表于 2020-2-1 14:36:02 | 显示全部楼层
while(1)
{
    ……;
    // using break; once meet the codition to stop the loop
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表