清朝登科录:帮我看个c程序 错在那里
来源:百度文库 编辑:高考问答 时间:2024/07/08 08:15:43
#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();
}