下弦月之夜_夜末 发表于 2013-11-29 17:14:48

赋值问题 求帮助。。。

/*用二维数组输出
1 3 5 7
9 11 13 15
*/
#include "stdio.h"

int main(void)
{
        int a,i,j;
        for(i = 0;i<2;i++)
                for(j = 0;j<4;j++)
                {
                        if(i==j==0)
                                a=1;   
                        if(j!=0)//这里是求出3 5 7 11 13 15
                          a=a+2;
                        if(j==0)    //这里是求出9。当i==1,j==0时,if(j!=0)这条语句中的求值语句已不受用,所以用这条语句。
                                a=a+2;//a=a+2也是9=7+2
                }
        for(i = 0;i<2;i++)
        {
                for(j = 0;j<4;j++)
                        printf("%d",a);
                printf("\n");
        }
        return 0;
}


大神
为什么
用这条if(i==j==0)
      a=1; 语句时,
输出的是
2 4 6 8
10 12 14 16

而将a=1;中的i,j改为0,0时就
输出
1 3 5 7
9 11 13 15

用这条if(i==j==0)
      a=1;语句时,
i,j不是0,0吗?

                       

maomingkun 发表于 2013-11-29 19:27:35

本帖最后由 maomingkun 于 2013-11-29 19:40 编辑

兄弟,你的错误代码是if(j==0),它应该包含了i==j==0了。
前边当i==j==0时a=1,但是到下边j==0时,条件依然满足,代码执行 a=a+2了。 a=a+2=a[-1]+2了么,是不是越了下标了啊?错误出现了
                           

maomingkun 发表于 2013-11-29 19:39:23

你可以将   if(j==0) 改为 if ((i!=0)&(j==0))
或者变一下代码
for(j = 0;j<4;j++)
{
        if (i==0)
        {
              a=j*2+1;
        }
        else if (i==1)
        {
             a=j*2+9;
        }
}
                               

下弦月之夜_夜末 发表于 2013-11-29 23:09:22

maomingkun 发表于 2013-11-29 19:39 static/image/common/back.gif
你可以将   if(j==0) 改为 if ((i!=0)&(j==0))
或者变一下代码
for(j = 0;j

谢谢你    可if(j==0) 改为 if ((i!=0)&(j==0))不行 出错了

a328166443 发表于 2013-11-30 09:12:27

先说明一个问题,你的   “if (i==j==0 )”这句我调试了一下,发现当i=0,j=0时没有跳转执行 “a=1” ,这是为什么呢? 按常理i==j==0是符合逻辑的,但是忽略了一个细节。根据 “==” 运算符的左结合性,先判断 “i==j” ,这句的结果为真,原因是 i=0,j=0,i==j,既然为真,就是先判断 i==j 的结果为1,然后进一步判断时,“1 == 0” ,这句就为假了。所以以上分析说明 “if (i==j==0)” 不会执行。

a328166443 发表于 2013-11-30 09:31:54

再说明一个问题,根据我上面的分析,说明,当i=0,j=0时, 会执行你的第三个if (j==0)里的内容,你的 a,就是这条语句得到的值2,有点我也不明白的是 a=a+2; 当i=0,j=0时,a=a[-1]+2 , a就得到了2,这个a[-1]有待高手解答。 为什么当你把"a=1"改成a=1时,有可以得到目标的结果呢? 那是因为 "if(i==j==0)" 根据上面的分析,i=j时,判断为假不执行,但是当i != j 时,就会跳转进去执行 a=1 ;你的第二个if 就会得到 1不断增2的结果,所以你改动后能得到目标结果。 打了这么多字,不知道楼主懂 了没?

下弦月之夜_夜末 发表于 2013-11-30 12:56:55

a328166443 发表于 2013-11-30 09:31 static/image/common/back.gif
再说明一个问题,根据我上面的分析,说明,当i=0,j=0时, 会执行你的第三个if (j==0)里的内容,你的 a[ ...

谢谢了 {:1_1:}懂了
页: [1]
查看完整版本: 赋值问题 求帮助。。。