练习7-7 矩阵运算
给定一个n×n的方阵,本题要求计算该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。副对角线为从矩阵的右上角至左下角的连线。
输入格式:
输入第一行给出正整数n(1<n≤10);随后n行,每行给出n个整数,其间以空格分隔。
输出格式:
在一行中给出该矩阵除副对角线、最后一列和最后一行以外的所有元素之和。
阅读题目输入给出的是一个矩形,基本思路是定义一个二维数组,来保存矩阵的每一个元素。
难点在于如何使结果只相加我们想要的元素,在数组循环遍历时我们会遍历到数组的每一个元素,舍弃掉某一个数组中非终末位置的元素不利于循环遍历操作的实现;
于是问题转化为了如何能在不舍弃数组中元素的情况下,使该累加操作不影响到最后结果。所以我们理所当然的想到当这个元素被修改为0时结果就会是我们想要的结果。
代码实现如下:
#include <stdio.h>
int main(){
int n,i,j,sum=0;//sum清仓
scanf("%d",&n);
int a[n][n];//变长数组定义
for(i=0;i<n;i++){
for(j=0;j<n;j++){
scanf("%d",&a[i][j]);//循环遍历储存矩阵
}
}
for(i=n-1,j=0;j<n;j++){
a[i][j]=0;//对最后一行的元素进行修改赋值为零
}
for(i=0,j=n-1;i<n;i++){
a[i][j]=0;//对最后一列的元素进行修改赋值为零
}
for(i=0,j=n-1;j>=0;i++,j--){
a[i][j]=0;//对副对角线的元素进行修改赋值为零,循环限制条件防止越界
}
for(i=0;i<n;i++){
for(j=0;j<n;j++){
sum+=a[i][j];//累加新数组的元素
}
}
printf("%d",sum);//输出
}