大家看看哪里有问题
你的J没有进行循环遍历
你少了个对j的遍历,也就是这样
#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++) { for(j=0;j<3;j++){ if(i==j){ sum += arr[i][i]; } if(i-j==2||i-j==-2){ sum += arr[i][j]; } } } printf("对角线元素之和是:%d\n",sum); return 0; }
从设计角度上来说更容易扩展,当length不固定时,对于正矩形来说这种方法更合适。%2这个可能就被限制在length=3的死角了。附上正矩形对角线之和的代码:
#include <stdio.h>
int main()
{
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
int sum=0;
int length = 3;
for(i=0;i<length;i++)
{
for(j=0;j<length;j++) {
if(i == j || i == length-1-j) {
sum += arr[i][j];
}else {
continue;
}
}
}
printf("对角线元素之和是:%d\n",sum);
return 0;
}
另外分享本人自写正确代码:
#include <stdio.h>
int main()
{
int arr[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
int i,j;
int sum=0;
int a;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
if(arr[i][j]%2!=0)
sum+=arr[i][j];
}
}
printf("对角线元素之和是:%d\n",sum);
return 0;
}
我发现2个问题。
1:你的j一直定义为0,并没有出现j自增,从始至终没有变化j始终为0.所有不对。
2:第九行的if(i=j)写错。要表达自身应出现两个。正确为if(i==j).
if(i+j==2 || i==j)
我看不出来你的问题
但是我提供一下我的思路 就是 (i+j)%2=0