非常蹊跷的情况,不可思议,请高手指点下.

来源:百度知道 编辑:UC知道 时间:2024/05/21 16:54:16
n个人围成一圈报数,报到m的退出,求出圈顺序.(用结构体数组实现)
程序太多,不写了,只写遇到问题的那块:
#inclode<stdio.h>
#define NMAX 100
void main()
{
strcut person
{ int number;
int nextp;
}link[NMAX+1];/*问题就出现在此处*/
我试了几次,输入的n值是100,m的值是9,最后得到的结果,最后一个数应该是82,可是出呼意料的是,第一次运行的时候,结果是对的,我什么也没动,就再次运行下,结果却不对了,最后一个数不是82了,变成了1326,这是乍回事啊,我存好程序退出C编译器,重新进入,什么也不动,再运行一下,结果就又对了,又是82.这怎么回事啊?我觉得和下标越界完全没关系嘛.因为根本就没越界呀.在结果输出最后一个数是82的时候,我又试了一个数.n为10,m为2,最后输出应该是5,可输出最后一个数也是1326.这是乍回事.我觉得总是就出在define NMAX 100上,但却不知道到底是乍回事,大虾,指点下,妹妹我谢了.
#include 刚才那个打错了,好粗心.哈哈.
link[NMAX+1]肯定有问题,就这儿有问题,要不然乍一会对一会错地.指点下.
我还是把源代码写上吧:
#include <stdio.h>
#define NMAX 100
void main()
struct person
{int nmuber;
int nextp;
}link[NMAX+1];
int i,count,h,n,m;
struct person *p=link;
printf("\ninput n= ");
scanf("%d",&n);
printf("\ninput m= ");
scanf("%d",&m);
for(i=1;i<=n;i++)
{if(i==

#include <stdio.h>
#define NMAX 100
void main()
{
struct person
{
int number;
int nextp;
}link[NMAX+1];
int i,count,h,n,m;
struct person *p=link;
printf("\ninput n= ");
scanf("%d",&n);
printf("\ninput m= ");
scanf("%d",&m);
for(i=1;i<=n;i++)
{
if(i==n)(p+i)->nextp=1;
else (p+i)->nextp=i+1;
(p+i)->number=i;
}
printf("\n");
count=0;
h=n;
printf("sequence that person leave the circle:\n");
while(count<n-1)
{
i=0;
while(i!=m)
{
h=(p+h)->nextp;
if((p+h)->number!=0)
i++;
}
printf("%5d",(p+h)->number);
(p+h)->number=0;
count++;
}
p = link+1;//程序在这里错了,你的程序放弃了第0个元素
//前面你都注意到了,但这里没有,所以出错了