c语言求矩阵除副对角线,最后一列和最后一行的所有元素和

请问这个哪里出问题了,循环好像进不去,卡在输入数组的地方了,求矩阵除副对角线,最后一列和最后一行的所有元素和

img

以下是优化后的代码,

#include<stdio.h>
int main(){
    int i, j, n, a[10][10], sum = 0;
    printf("请输入为几阶方阵:");
    scanf("%d",&n);
    printf("请输入矩阵内的元素:");
    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++){
            if(i + j == n-1 || j == n-1 || i == n-1){
                continue;
            }
            sum += a[i][j];
        }
    }
    printf("sum=%d\n", sum);
    return 0;
}


这段代码中有几个问题:

while循环条件判断有误,i和j在外层for循环中已经被赋值为n了,因此进不去while循环。而且判断条件中的!=应该改为==。

判断条件i != 3 && j != 3也有误,这样的话只有矩阵为4*4时才能计算,而并不适用于其他尺寸的方阵。

计算副对角线元素之和的代码缺失,需要加上对副对角线元素的特殊处理。

下面是修改后的代码,可以实现计算除副对角线、最后一列、最后一行的所有元素的和:

c


#include<stdio.h>
int main(){
    int i,j,n,a[10][10], sum=0;
    printf("请输入为几阶方阵: ");
    scanf("%d",&n);
    printf("请输入矩阵内的元素: ");
    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++){
            if(i+j != n-1 && i != n-1 && j != n-1){ // 排除副对角线、最后一列和最后一行的元素
                sum += a[i][j];
            }
            if(i == j){ // 计算副对角线元素之和
                sum -= a[i][j];
            }
        }
    }
    printf("sum=%d", sum);
    return 0;
}

while 那个循环,不要那么写
应该是

for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
{
if (i + j != i - 1 && i != n - 1 && j != n - 1)
    sum+= a[i][j];
}
不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^