引入
矩阵运算:读入 1 个正整数 n(1≤n≤6),再读入 n 阶方阵 a,
计算该矩阵除副对角线、 最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
分析
看到矩阵运算懵了,什么东西,网上只找到答案看不懂,我有倒推一波,这里就涉及到二维数组了,这里写一个二维数组与矩阵的对应关系
二维数组可以看作一个坐标轴(方阵)
int a[3][3]; 第一3代表矩阵的横坐标,就是3排,第二个3代表坐标轴,也就是3纵
1 2 3 1的坐标就是a[0][0] 2的是[1][0] 3可以看作[2][0]
2 1 3 2可以看作[0][1]...
3 1 2
题目要求我们输入n,这个n其实 就代表几排几纵
然后输入1个矩阵
计算矩阵,他说不要最后一列和最后一行及左下角到右上角对角线值
也就是说不要 横坐标等于n-1的那一排和纵坐标等于n-1的那一纵以及横坐标和纵坐标之和不等于n-1
上面为例那个矩阵的和就是5
扩展:主对角线就是横坐标与纵坐标相等、副对角线就是横坐标与纵坐标之和不等于n-1、外围元素要么行下标i == 0 或者 i == n-1
代码
#include<stdio.h>
int main(void) {
/**
矩阵运算:读入 1 个正整数 n(1≤n≤6),再读入 n 阶方阵 a,
计算该矩阵除副对角线、 最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
*/
/**
看到矩阵运算懵了,什么东西,网上只找到答案看不懂,我有倒推一波,这里就涉及到二维数组了,这里写一个二维数组与矩阵的对应关系
二维数组可以看作一个坐标轴
int a[3][3]; 第一3代表矩阵的横坐标,就是3排,第二个3代表坐标轴,也就是3纵
1 2 3 1的坐标就是a[0][0] 2的是[1][0] 3可以看作[2][0]
2 1 3 2可以看作[0][1]...
3 1 2
题目要求我们输入n,这个n其实 就代表几排几纵
然后输入1个矩阵
计算矩阵,他说不要最后一列和最后一行及左下角到右上角对角线值
也就是说不要 横坐标等于n-1的那一排和纵坐标等于n-1的那一纵以及
以上面那个矩阵的和就是5
*/
int i,j,n,sum;
int a[6][6];
printf("Inputn:");
scanf("%d",&n);
printf("Inputarray:\n ");
//输入矩阵
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);
}
}
sum=0;
for(i=0;i<n;i++){
for(j=0;j<n;j++) {
//不要最后一行和最后一列及左下角到右上角对角线值
if(i!=n-1&&j!=n-1&&i+j!=n-1){
sum+=a[i][j];
}
}
}
//打印元素和
printf("sum=%d\n",sum);
return 0;
}
运行测试