1613551 发表于 2023-2-16 21:38:09

关于while语句的问题

本帖最后由 1613551 于 2023-2-16 21:40 编辑

最后为什么会打印25呢?i等于5的时候不应该进不了while循环吗?我一直没弄懂while循环

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int x = 20;
    int i = 2;
    while (i < x)
    {
      if (x % i == 0)
      {
            printf("%d", i);
            x /= i;
      }
      i++;
    }
    system("pause");
    return 0;
}

1613551 发表于 2023-2-16 21:38:36

本帖最后由 1613551 于 2023-2-16 21:39 编辑

不应该是22吗,x等于20和等于10的时候,%2会等于0,然后会打印i

ba21 发表于 2023-2-16 21:56:25

注意观察 x 和 i的值。
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
    int x = 20;
    int i = 2;
    while (i < x)
    {
      if (x % i == 0)
      {
            
            x /= i;
                        printf("i=%d, x=%d\n", i,x);
      }
      i++;
                printf("i=%d\n", i);
    }
    system("pause");
    return 0;
}

jackz007 发表于 2023-2-16 21:56:37

本帖最后由 jackz007 于 2023-2-16 22:07 编辑

         x = 20 ,i = 2 :x % i = 0 ,打印 i = 2 ,x = x / i = 20 / 2 = 10 , i = i + 1 = 2 + 1 = 3
         x = 10 ,i = 3 :x % i = 1 ,i = i + 1 = 3 + 1 = 4
         x = 10 ,i = 4 :x % i = 2 ,i = i + 1 = 4 + 1 = 5
         x = 10 ,i = 5 :x % i = 0 ,打印 i = 5,x = x / i = 10 / 5 = 2 ,i = i + 1 = 5 + 1 = 6
         x =   2 ,i = 6 :条件 i < x 不再成立,循环结束。
         所以,最终打印出的数字是 25
         

myd0313 发表于 2023-2-17 07:25:37

打印的是这个数某些的因数,而不是所有因数,因为你想想,每个数字只会出现一次

tsElim 发表于 2023-2-17 08:28:49

x/=i,x在不断变小;i++,i在不断变大;只在20%2和10%5两处满足条件

两手空空儿 发表于 2023-2-17 10:26:05

1613551 发表于 2023-2-16 21:38
不应该是22吗,x等于20和等于10的时候,%2会等于0,然后会打印i

过程并没有对i重置过,后面都在 i++, i = 2的时候有且仅有一次(就是第一次循环),不可能打印出22
你打上去的代码和你预期的逻辑不一样

sfqxx 发表于 2023-2-17 16:27:14

学习一下

sfqxx 发表于 2023-2-18 10:36:08

{:10_256:}{:10_256:}
看看能否领到鱼币

sfqxx 发表于 2023-2-19 14:42:46

谢谢楼主的荣誉以及贡献{:10_279:}
页: [1]
查看完整版本: 关于while语句的问题