关于for语句的问题
本帖最后由 1613551 于 2022-8-8 09:46 编辑下面这段代码的运行逻辑我不是很懂
为什么最后的结果是2,0;
不应该是
I=1 b=-1k=1
I=2 b=-1k=2
I=3 b=-1k=4
I=4 b=-1k=5
I=5 b=-1k=7
上面这样的结果吗
#include <stdio.h>
int main(void)
{
int i, b, k = 0;
for (i = 1; i <= 5; i++)
{
b = i % 2;
while (b-- == 0)
{
k++;
}
}
printf("%d,%d", k, b);
return 0;
} while(b-- == 0)说明只有i==2,i==4条件成立,那么k就从0加两个1等于2输出
b--==0里面是后--,要等比较完了再减1(i=5时,b=1,条件不成立,但后面b还要减1),所以b=0输出 b = i % 2 , 求余数。
1%2=1,余数不可能是负数。 首先 b = i % 2; 那么:b 最多为 1
然后循环是只有 b == 0 的时候才能进入。
那么我们就能理解这个程序的目的了,就是数一数 i 为 1 到 5 时有多少 i % 2 == 0 的数
说白了就是数双数 i = 1, b = 0, k = 0
i = 2, b = -1, k = 1
i = 3, b = 0, k = 1
i = 4, b = -1, k = 2
i = 5, b = 0, k = 2
while (b-- == 0)
{
k++;
}
==> while(b == 0)
{
b--;
k++;
} 第一次进入循环的时候i=1,i%2=1(1除以2等于0余1)
i=1,b=1,b=0(b--=0是先判断b是否为0,再令b减一,这里b不为零则不进入while循环,k还是0没变,但是别忘了b判断完是否为0之后还要减一)
i=2,b=0,k=1,b=-1(2除以2等于1,余数为0了,进入while循环,k加一)
i=3,b=1,b=0
i=4,b=0,k=2,b=-1
i=5,b=1,b=0
最后输出的b和k就分别是0和2了
页:
[1]