c语言请高手帮我分析下,while(1)及for(x=a,i=0;i<m;i++,x++)两个循环是怎么结束的,在线等

来源:百度知道 编辑:UC知道 时间:2024/06/04 10:02:14
这个程序的目的是:M个人围攻成一圈,顺序排号。从第一个人开始报数,报到N的人退出圈子,下一个人再从1开始报数,报到N的人退出圈子,凡是从圈里出去的人下次报数时不再计数。如此下去,问最后留下的人是原来的第几号,M和N由键盘输入。

#include<stdio.h>
main()
{
int i, m, n, s=0, p=0,*x,a[20];
while(1)
{
printf"(intput M,N="); scanf("%d,%d",&m,&n);

if(m<1||m>20||n<1)
{
printf"error");
exit(0);
}
for(x=a,i=0;i<m;i++)
*x++=1;
s=p=0;
for(x=a,i=0;i<m;i++,x++)
{
s+=*x;
if(s==n)
{
s=0;*x=0;p++;
if(p==m)
{p=i+1;
break;
}
}
if (i==m-1)
{
x=a-1;
i=-1;
}
}
printf("NO:%d\n",p);
}
}

while(1)是个死循环。你看循环体内肯定有跳出的语句啊····
if(m<1||m>20||n<1)
{
printf"error");
exit(0);}
这个问题对你输入的数据有要求的。

exit(0)?

while(1)貌似没法自行结束
for(x=a,i=0;i<m;i++,x++) i不小于m时结束

a