为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这个算出来的答案是8

#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++)

    {

        if(arr[i][j]%2==1)

        sum +=arr[i][j]; 

    } 

    printf("对角线元素之和是:%d\n",sum);

    return 0;    

}


正在回答

3 回答

for(j=0;j<3;j++)

       {if ((i==j)||(j==(3-i-1)))

       sum=sum+arr[i][j];

       }


0 回复 有任何疑惑可以回复我~

你没有给j赋初值,这样只有代表行的“i”在动,代表列的“j”根本“不存在”。

简单来说就是你这样没有做到遍历数组,而且因为j没有赋初值所以j的值是计算机随即分配的。要记住一点是:计算机的内存内在你没有声明变量的时候也是有数值的,你声明变量(如int i;)只是让计算机把这个内存空间分配给你的i,但里面是有一个内存里本来的数的,这个数没人知道是多少。你要i的数值,就要先给他赋值,比如i=0;否则直接用来打印i结果是一堆乱数。

如果还不明白,你可以试试在自己的编译器上int i,j,k;然后直接printf打印i,j,k。出来的数绝对不是你想的0.

明白计算机如何存储数据对编程很重要,建议你买教材去看看。推荐国外的 c prime plus,国内教材一般写的比较乱,如果有老师教可以用,自学的话就不太好用了。

0 回复 有任何疑惑可以回复我~

不是很清楚,可能因为你的j没有赋初值,而且你这算的也不是对角线元素和啊。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这个算出来的答案是8

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信