求数据高手,下面的程序编译成功了 ,可以执行错误 ,帮忙修改一下!在线等。。。。

#include <stdio.h>
#include <stdlib.h>

#define OK 1
#define ERROR 0
#define OVERFLOW -2

typedef int Status;
typedef int Elemtype;
typedef struct Cnode {
Elemtype data;
struct Cnode *next;
} CNode;
CNode *joseph;

Status
Create_clist(int n)
{
CNode *p, *q, *h;
int i;

h = NULL;
for (i = n; i >= 1; i--) {
p = (CNode *) malloc(sizeof(CNode));
if (p == NULL)
return OVERFLOW;
p->data = i;
p->next = h;
h = p;
if (i == n)
q = p;
}
q->next = h;
joseph = h;
return OK;
}

Status
Joseph(int m, int n, int k)
{
int i;
CNode *p, *q;

if (m > n)
return ERROR;
if (!Create_clist(n))
return ERROR;
p = joseph;
for (i = 1; i < m; i++)
p = p->next;
while (p) {
for(i = 1; i < k-1; i++)
p = p->next;
q = p->next;
printf("%d ", q->data);
if (q == p)
p = NULL;
else {
p->next = q->next;
p = p->next;
}
free(q);
}
}

int
main(void)
{
int m, n, k, i;

printf("\n请输入围坐在圆桌周围的人数n:");
scanf("%d", &n);
printf("\n请输入第一次开始报数人的位置m:");
scanf("%d", &m);
printf("\n你希望报数到第几个数的人出列?");
scanf("%d", &k);
printf("\n出列的顺序如下:\n");
Joseph(m, n, k);
putchar('\n');

return 0;
}

你这个 int m, n, k, i;是错的。把后面的那个整型变量删了。在主函数的调用中没出现是不能声明的。追问

可以在具体一点嘛 我有点乱了 谢了

追答

看一下调用的数据吧。你应该用的是turbo C++编写的。建议用C++6.0编写。 int
main(void)
{
int m, n, k, i;

printf("\n请输入围坐在圆桌周围的人数n:");
scanf("%d", &n);
printf("\n请输入第一次开始报数人的位置m:");
scanf("%d", &m);
printf("\n你希望报数到第几个数的人出列?");
scanf("%d", &k);
printf("\n出列的顺序如下:\n");
Joseph(m, n, k);(这里只用了三个数,你却定义了四个数,turbo C 会报错的,这代码要求很高)
putchar('\n');

return 0;
}

追问

太感谢了!

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答