永发信息网

c 语言一个简单小问题 语法都没错(就是加了一句#defined N n+1 就出错了,郁闷)

答案:1  悬赏:20  手机版
解决时间 2021-08-20 20:20
  • 提问者网友:聂風
  • 2021-08-20 04:41

#include<stdio.h>
#define n  3
#define N n+1
void main()
{
   
 void copy(int a[][N],int );
 void tourna(int a[][N],int );
  
 int a[N][N]={0};
 tourna(a,N);
 for(int i=1;i<N;i++)
  for(int j=1;j<N;j++)
  {
   printf("%d  ",a[i][j]);
   if(j==N-1)
    printf("\n");
  }
}

void copy(int a[][N],int n)
{
 int m=n/2;
 for(int i=1;i<=m;i++)
  for(int j=1;j<=m;j++)
  {
   a[i][j+m]=a[i][j]+m;
   a[i+m][j]=a[i][j+m];
   a[i+m][j+m]=a[i][j];
  }
}
void tourna(int a[][N],int   n)
{
 if(n==1)
 {
  a[1][1]=1;return;
 }
 tourna(a,n/2);
 copy(a,n);
}

最佳答案
  • 五星知识达人网友:骨子里都是戏
  • 2021-08-20 05:42

#include<stdio.h>
#define n  3
#define N n+1
void main()
{
  int i,j; 
 void copy(int a[][N],int );
 void tourna(int a[][N],int );
  
 int a[N][N]={0};
 tourna(a,N);
 for( i=1;i<N;i++)
  for( j=1;j<N;j++)
  {
   printf("%d  ",a[i][j]);
   if(j==N-1)
    printf("\n");
  }
}


void copy(int a[][N],int b)
{


 int m=b/2,i,j;
 for( i=1;i<=m;i++)
  for( j=1;j<=m;j++)
  {
   a[i][j+m]=a[i][j]+m;
   a[i+m][j]=a[i][j+m];
   a[i+m][j+m]=a[i][j];
  }
}
void tourna(int a[][N],int   b)
{
 if(b==1)
 {
  a[1][1]=1;return;
 }
 tourna(a,b/2);
 copy(a,b);
}


//能运行


//不过还有一个,错误,是数组越界了,你自己找下吧


//错误原因,是常量,不能当做变量使用,一用就报错


如:void tourna(int a[][N],int   n)
的n


你可以改下: void tourna(int a[][N],int   b)


{b=n;//就可以了


}

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯