中易网

我的C语言程序哪里出问题了 好像死循环了 。。。

答案:4  悬赏:80  
解决时间 2021-02-03 12:08
题目
有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出
   圈子,问最后留下的是原来第几号的那位。下面是我的程序
#include "stdafx.h"
int main(int argc, char* argv[])
{ int a[1000];
int *p,i,j=0,n,m;
printf("人数\n");
scanf("%d",&n);
p=a;
m=n;
for(i=0;i *(p+i)=i+1;//
i=0;
while(m-2)
{
if(*(p+i)!=0)//
{
j++;
if(j==3)
{j=0;
*(p+i)=0;
m--;
}
if(i==(n-1))
i=0;
i++;
}

}

for(i=0;i {if(*(p+i)!=0)
printf("%d\n",i+1);
}
printf("Hello World!\n");
return 0;
}
最佳答案
修改了一下,如下:

#include "stdio.h" //头文件貌似不一样,应该是不同编译工具问题吧~
int main()
{
int a[1000];
int *p,i,n,m;
int j=0;
printf("输入人数:\n");
scanf("%d",&n);
p=a;
m=n;
for(i=0;i *(p+i)=i+1;
i=0;
while(m-2) //这里没问题,问题在下面
{
if(*(p+i)!=0)
{
j++;
if(j==3)
{
j=0;
*(p+i)=0;
m--;
}
}
i++; //原来的代码中,这三句包在了if(*(p+i)!=0)里了,使得循环几次后,卡成死
if(i==n) //循环,要观察详细过程,楼主可以在每次循环都把数组显示出来就知道了
i=0; //这里i++应该放在这个if小判断前,如果放在后面,清零后又加了1,造成
} //最后结果不正确
for(i=0;i {
if(*(p+i)!=0)
printf("%d\n",i+1);
}
printf("Hello World!\n");
return 0;
}

如输入6,则输出1 5,应该满足楼主的题意~~
全部回答

13 是错的!  正确的结果是20。

循环一共执行了4次,分别是x=1时、x=2时、x=3时、x=4时。

每当进入switch的分支语句,就遇到case 0:  后没有任何执行语句,所以无论x等于几。都

直接调到 default: x+=5 处执行。

所以,四次循环,x一共加了4次5,所以答案是20。

还有,你的符合打错了,case 和 default 后面都是冒号,不是分号。

图:

经过测试,发现楼主应该写错了,while(m-2)或许该改为m-i,因为if(j==3)这句可能执行不了,也就没法让m改变,则while永真就陷入死循环。
已改,看注释 int main(int argc, char* argv[]) { int a[1000]; int *p,i,j=0,n,m; printf("人数\n"); scanf("%d",&n); p=a; m=n; for(i=0;i 0) { if(*(p+i)!=0)// { j++; if(j==3) { j=0; *(p+i)=0; m--; } } i++; // 这个放if外面 if(i==(n-1)) i=0; } for(i=0;i
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯