问答详情
源自:6-11 多维数组的遍历

为什么这个算出来的答案是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;    

}


提问者:慕妹3401294 2018-05-23 17:43

个回答

  • 慕粉4209211
    2018-05-26 20:38:41

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

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

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

           }


  • 困难00
    2018-05-26 10:36:04

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

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

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

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

  • 世末理想乡
    2018-05-23 19:17:11

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