问答详情
源自:6-11 多维数组的遍历

请教同学们和老师们

我总觉得这么做有点麻烦,假如数组维数越大,这个方法肯定不行。

提问者:你二爷爷的三哥哥 2017-01-16 10:55

个回答

  • 全栈港
    2017-01-17 15:36:17
    已采纳

    //题目给出的参考答案(只在行列都为3的矩阵下适用)
    #include <stdio.h>
    int main()
    {
        int arr[3][3] = {
            {1,2,3},
            {4,5,6},
            {7,8,9}};
        int i,j;
        int sum=0;
        for(i=0;i<3;i++)
        {
           for(j=0;j<3;j++){
               if(i%2==0 && j%2==0)
               sum=sum+arr[i][j];
           }
        }
        sum=sum+arr[1][1];
        printf("对角线元素之和是:%d\n",sum);
        return 0;    
    }

    偶数组:

    0     1       2         3    

    1     11     12       13            

    2     21      22       23         

    3     31      32       33                      

    奇数组

    0        1        2        3        4    

    1       11      12       13      14           

    2       21      22       23       24 

    3       31      32       33       34                  

    4       41       42      43       44                                

    #include <stdio.h>
    #define n 4  //在此随意修改数组的行列
    int main(void)
    {
    	int i, j, sum;
    	int a[n][n];
    	//构建数组,手动输入
    	printf("Please input a array\n");
    	for(i=0; i<n; i++) {
    		for(j=0; j<n; j++)  {
    			scanf("%d", &a[i][j]);
    		}
    	}
    	//打印构建数组
    	for(i=0; i<n; i++)  {
    		for(j=0; j<n; j++)   {
    			printf("%3d", a[i][j]);
    		}
    		printf("\n");
    	}
    	//求二维数组对角线上元素和
    	sum = 0;
    	for(i=0; i<n; i++)  {
    		for(j=0; j<n; j++)   {
    			if((i==j) || (i+j==n-1)) {
    				sum += a[i][j];
    			}
    		}
    	}
    	printf("主对角线和次对角线之和是:%d\n", sum);
    	return 0;
    }

    注意:矩阵数组对角线有两条,将编程问题转化成数学问题求解;

    主对角线上的元素是行列相等(i=j);副对角线上的元素数组行列下表相加为数组长度减1;