byd唐撞翻大众最后结果:帮我看个c程序 错在那里

来源:百度文库 编辑:神马品牌网 时间:2024/05/07 02:27:36
设有n个人坐一圈并按顺时针方向从1到n编号,从第s个人开始进行1到m的报数,报数到第m个人,此人出圈,再从他的下一个人重新开始从1到m报数,如此进行下去直到所有的人都出圈为止。先要求按出圈次序,每10个人为一组,给出这n个人的顺序表
#include<stdio.h>
#define N 20
#define S 1
#define M 3

int p[100],n,s,m;
void Josegh(void)
{int i,j,a[N];
for(i=0;i<N;i++)
p[i]=i+1;
while(1)
{
for(j=0;j<N;j++)
if(p[j]%3==0)
{
for(i=j;i<N;i++)
{
p[i]=p[i+1];
p[i]--;
}
j=0;
}
if(p[0]==0)break;
}

}

void main()
{
m=M; n=N; s=S;
Josegh();
WriteDat();
}

void WriteDat(void)
{
int i;
FILE *fp;
fp=fopen("OUT59.DAT","w");
for(i=N-1;i>=0;i--)
{
printf("%4d",p[i]);
fprintf(fp,"%4d",p[i]);
if(i%10==0)
{
printf("\n");
fprintf(fp,"\n");
}
}
fclose(fp);
}
程序错在那里

在while(1)的循环中不能退出循环
...
------------------------------
你可以添加自己的调试语句调试可能有逻辑错误
------------------------------
#include<stdio.h>
#define N 20
#define S 1
#define M 3

int p[100],n,s,m;
static tmp=1;

void Josegh(void)
{
int i,j,a[N];

/*调试信息*/
printf("Enter josegh()\n");

for(i=0;i<N;i++)
{
p[i]=i+1;
}

while(1)
{
/*调试信息*/
if(tmp>1000)
{
break;
}
printf("Enter while(1) [%d] times\n",tmp);
tmp++;

for(j=0;j<N;j++)
{
if(p[j]%3==0)
{
for(i=j;i<N;i++)
{
p[i]=p[i+1];
p[i]--;
}
}
}
j=0;
if(p[0]==0)
{ break; }
}
}

void WriteDat(void)
{
int i;
FILE *fp;

/*调试信息*/
printf("Enter writedat()\n");
fp=fopen("OUT59.DAT","w");

for(i=N-1;i>=0;i--)
{
printf("%4d",p[i]);
fprintf(fp,"%4d",p[i]);
if(i%10==0)
{
printf("\n");
fprintf(fp,"\n");
}
}

fclose(fp);
}

void main()
{
m=M; n=N; s=S;
Josegh();
WriteDat();
}