c语言题目(我的代码哪里错了?看图,急): 给定一个N行N列的二维整数矩阵(N<=10),从该矩阵

c语言题目(我的代码哪里错了?看图,急): 给定一个N行N列的二维整数矩阵(N<=10),从该矩阵中任选一个元素,然后将该元素以及同该元素同行或者同列的元素全部累加
起来,得到累加和,称为选取。要求输出所有可能的选取中,取得最大值的选取。
输入格式
第一行为正整数N,然后N行,每行N个整数。
输出格式
最大选取

看了一下,有三个问题:一是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编译器上是可以运行的...第二个我问别人,有人说可以啊...题目我写的应该是没问题的,因为他给的例子也是行和列...可惜现在已经提交不了了,不然就能看是不是数组那里错了...

温馨提示:答案为网友推荐,仅供参考