解题思路:
1.设元素下标为i,j ,矩阵阶数为Length,和为sum;

2.主对角线元素下标满足:i==j;

3.副对角线元素下标满足:i+j-1==Length;

4.输入一个元素Mxtrix,判断下标是否满足主副对角线元素下标条件,满足,sum加上这个数;

参考代码:

#include <stdio.h>

int main()
{
    int sum = 0, Length, Matrix;
    scanf( "%d", &Length );     //阶数

    for ( int i = 1; i <= Length; i++ )    //行
        for ( int j = 1; j <= Length; j++ )    //列
        {
            scanf( "%d", &Matrix );
            if ( (i == j) || (i + j - 1) == Length )   //判断
                sum += Matrix;          //求和
        }
    printf( "%d", sum );   //输出
    return(0);
}

别忘点赞哦-.-

点赞(22)
 

0.0分

62 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 24 条评论

微白 11月前 回复TA
@Tanhaohui 你的代码看起来是用来计算一个正方形矩阵中对角线元素之和(主对角线和次对角线),但是结果中排除了矩阵的中心元素。  让我们来看一下你的代码:  a 存储主对角线元素之和。 b 存储次对角线元素之和。 c 存储中心元素的值(如果矩阵的边长是奇数时)。 在计算总和时,你使用了 a + b - c 的方式来排除中心元素的值。这个方法是正确的,因为 a + b 得到的是所有对角线元素之和,然后减去中心元素的值,就得到了排除中心元素的总和。  这段代码对于给定的正方形矩阵,正确地计算了主对角线和次对角线上元素的总和,并排除了中心元素的值。
Tanhaohui 1年前 回复TA
大佬们这个为什么错了啊

#include<stdio.h>
int main()
{
    int num[100][100];
    int num1,num2,i,j;
    int n;
    int a=0,b=0,c=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&num[i][j]);
            if(i==j)
            a=num[i][j]+a;
            else if(i+j==n-1)
            b=num[i][j]+b;
            else if(i==(n-1)/2 && j==(n-1)/2 )
            c=num[i][j];
        }
    }
       
       printf("%d",a+b-c);
	return 0;
}
甜甜凌 1年前 回复TA
@老狗 作者的i和j都是从1开始的,你的应该是从零开始,不一样
老狗 1年前 回复TA
if里面的判断条件应该是i+j+1==N;作者不小心打错了吧
明月几时有 1年前 回复TA
#include<stdio.h>
int main()
{
    int arry[20][20],i,j,zum=0,fum=0,sum,n;
    
    
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&arry[i][j]);
        }
    } 
    
    
    
     for(i=0;i<n;i++)
    {
        for(j=0;j<n;j++)
        {
           if(i==j)
           {
               zum=zum+arry[i][j];
           }
               
        
           if(j==n-i-1)
           {
               fum=fum+arry[j][i];
           }
        }
    }
    
    
    
    if(n%2==0)
    {
        sum=zum+fum;
         printf("%d",sum);
    }
浙江项朝阳 2年前 回复TA
@信可兴 @Klaus12138 可能是编译器的不同,有些允许,有些不允许
怎么又报错啊 2年前 回复TA
@渐入佳境. 数组是从0开始输入的;若从1到10输入,会赋值到a[10][10];程序可能不会报错;但交在评定时,会判定为数组越界
怎么又报错啊 2年前 回复TA
@信可兴 要把d=a-1移到for循环外去,不然d一直等于a-1
沉默 2年前 回复TA
@渐入佳境. 会不会是因为n是变量,在它试行的时候,会将大于10的数字带进去,然后就会出错了
名字好难想 2年前 回复TA
@信可兴 @15020749005 但我也是用变量定义,我通过了呀