1613551 发表于 2022-8-8 09:45:06

关于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;
}

Vicissitude357 发表于 2022-8-8 09:45:07

while(b-- == 0)说明只有i==2,i==4条件成立,那么k就从0加两个1等于2输出
b--==0里面是后--,要等比较完了再减1(i=5时,b=1,条件不成立,但后面b还要减1),所以b=0输出

ba21 发表于 2022-8-8 10:36:46

b = i % 2 , 求余数。
1%2=1,余数不可能是负数。

liuzhengyuan 发表于 2022-8-8 10:40:48

首先 b = i % 2; 那么:b 最多为 1
然后循环是只有 b == 0 的时候才能进入。
那么我们就能理解这个程序的目的了,就是数一数 i 为 1 到 5 时有多少 i % 2 == 0 的数
说白了就是数双数

萧_晨 发表于 2022-8-8 18:03:19

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++;
}

西桥桥桥 发表于 2022-8-8 22:03:13

第一次进入循环的时候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]
查看完整版本: 关于for语句的问题