赋值问题 求帮助。。。
/*用二维数组输出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:40 编辑
兄弟,你的错误代码是if(j==0),它应该包含了i==j==0了。
前边当i==j==0时a=1,但是到下边j==0时,条件依然满足,代码执行 a=a+2了。 a=a+2=a[-1]+2了么,是不是越了下标了啊?错误出现了
你可以将 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;
}
}
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))不行 出错了 先说明一个问题,你的 “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)” 不会执行。 再说明一个问题,根据我上面的分析,说明,当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的结果,所以你改动后能得到目标结果。 打了这么多字,不知道楼主懂 了没? a328166443 发表于 2013-11-30 09:31 static/image/common/back.gif
再说明一个问题,根据我上面的分析,说明,当i=0,j=0时, 会执行你的第三个if (j==0)里的内容,你的 a[ ...
谢谢了 {:1_1:}懂了
页:
[1]