求大神解答
可以观察对角线元素的下标的特点,一个是行等于列,一个是行加列等于2,所以可以把if()语句写成这样:
if(i == j || (i + j) == 2)
没有必要去关心元素本身的值。
首先你应该明确对角线元素的下标具有什么特征:
从左上往右下的那条对角线的元素的特征:行列下标相等,如arr[0][0], arr[1][1];
从右上往左下的那条对角线的元素的特征:行列下标之和为2,如arr[0][2], arr[1][1];
你应该根据这个设置判断条件,你可以用两个for循环,一个对i,一个对j。
你可以在纸上画画:
1 2 3
4 5 6
7 8 9
还有你可能有这样的疑问: 1 + 5 +9 +3 +5+7 = 30, 为什么答案是25?
因为题目问的是对角线元素之和,你这样就算多了1次5, 而我们的程序之所以算出的是25,是因为系统一个一个地检验元素是否满足i == j 或者i + j ==2,遇到5时发现两个条件均满足,但只算一次,满足条件。
你的程序中的=有误,表赋值,==才是相等,
#include <stdio.h> int main() { int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}}; int i,j; int sum=0; for(i=0;i<3;i++) { sum+=arr[i][i]; } for(i=2;i>=0;i--) { sum+=arr[i][2-i]; } printf("对角线元素之和是:%d\n",sum-5); return 0; }
这是我的代码,你看看吧,还有就是==是表判断,=是赋值