编写一个函数,功能是求二阶矩阵(m行n列矩阵)的所有靠外侧的各元素值之和。(本程序中二阶矩阵用一维数组来表示。)
例如,矩阵为:
3 0 0 3
2 5 7 3
1 0 4 2
则所有靠外侧的各元素值之和为3+0+0+3+2+3+1+0+4+2=18。
一个简单的实现:
#include <stdio.h>
int main(void){
int m = 3;
int n = 4;
int i = 0;
int matrix [m*n];
int sum = 0;
while(i<m*n){
scanf("%d",&matrix[i]);
i++;
}
for(i=0;i<m*n;i++){
printf("matrix[%d]=%d\n",i,matrix[i]);
}
/*
3 0 0 3
1 0 4 2
3 2 1
3 3 2
*/
//累积矩阵最上层的和
for(i=0;i<n;i++){
sum+=matrix[i];
}
printf("最上层:%d\n",sum);
//累积矩阵最左边的和
for(i=0;i<m;i++){
sum+=matrix[i*n];
}
printf("最左边:%d\n",sum);
//累积矩阵最下层的和
for(i=0;i<n;i++){
sum+=matrix[(m-1)*n+i];
}
printf("最下边:%d\n",sum);
//累积矩阵最右边的和
for(i=0;i<m;i++){
sum+=matrix[(n-1)+i*n];
}
printf("最右边:%d\n",sum);
//依次减去重复计算了一次的四个定点的值:左上角,右上角,左下角,右下角
sum-= (matrix[0]+matrix[n-1]+matrix[(m-1)*n]+ matrix[m*n-1]);
printf("%dx%d矩阵的外围和是:%d\n",m,n,sum);
return 0;
}