看了一下,有三个问题:一是C不允许用变量作数组的声明常量,所以int a[n][n];是非法的;二是C不允许在语句行之间声明变量,所以在scanf后的两行声明也是非法的,不过用C++兼容编译器是可以通过编译的;三是题目中说是“行或列”之和,而代码中好像是“行和列”之和,不知哪个是对的。关键是第一个错误,它得用动态数组才能纠正。我写一个你对照看——
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "
stdio.h"
#include "
stdlib.h"
#include "time.h"
int main(void){
int N,i,j,k,max,*pt,**q,tmp;
printf("Input N(int N>0)...\nN=");
scanf("%d",&N);
tmp=N*N;
pt=(int *)malloc(sizeof(int)*tmp);//动态申请空间
q=(int **)malloc(sizeof(int *)*N);
if(pt==NULL || q==NULL){//判断申请是否成功
printf("Application memory failure...\n");
exit(0);
}
for(j=i=0;i<tmp;q[j++]=(pt+i),i+=N);//组织成以q为名的
二维数组 srand((unsigned)time(NULL));
for(i=0;i<N;i++){//随机自动输入并显示数据
for(j=0;j<N;printf("%4d",q[i][j++]=rand()%1000));
printf("\n");
}
for(max=i=0;i<N;i++){//选取
for(j=0;j<N;j++){
for(tmp=k=0;k<N;tmp+=q[i][k]+q[k++][j]);
if((tmp-=q[i][j])>max)
max=tmp;
}
}
free(q);//释放所申请的空间
free(pt);
printf("The result is %d\n",max);//输出
return 0;
}
追问谢谢。第一个确实是错的,但在cobeblock编译器上是可以运行的...第二个我问别人,有人说可以啊...题目我写的应该是没问题的,因为他给的例子也是行和列...可惜现在已经提交不了了,不然就能看是不是数组那里错了...