肚子饿了233 发表于 2021-3-15 19:30:47

C++语言关于if和while的区别!!请大神帮忙瞧瞧

#include<iostream>
using namespace std;
int main()
{
      int n, m,sum=0;
      for (n = 2; n <= 10000; n++)
      {
                sum = 0;
                for (m = 1; m <= n / 2; m++)
                {
                        if (n % m == 0)sum += m;    //为啥将if换为while后,程序一直显示不出结果??
                }
                if (sum == n) cout << "n=" << sum << endl;
      }
      return 0;
}

jackz007 发表于 2021-3-15 19:48:17

本帖最后由 jackz007 于 2021-3-15 19:54 编辑

       if 是条件判断,当条件成立时,相应的语句将被执行一次,而 while 是循环,当条件成立时,相应的语句会被循环执行多次,如果条件始终成立,就会在这里陷入死循环。
if (n % m == 0)sum += m;
       当 n % m == 0 条件成立时,这条语句:
sum += m
       只会执行一次,如果把 if 换成 while
while (n % m == 0)sum += m;
       只要 (n % m == 0 的条件成立,语句
sum += m
       将会多次得到执行,直到条件不成立为止。
       看看 while 语句的条件和执行的语句
while (n % m == 0)sum += m;
       如果 n % m == 0 成立,那么,后面的操作 sum += m 对构成 while 语句条件要素的 n 和 m 并没有任何的改变,循环条件将永恒成立,就是说,这个循环注定就是死循环。这就是程序一直不显示结果的直接原因。
      

肚子饿了233 发表于 2021-3-15 20:02:09

jackz007 发表于 2021-3-15 19:48
if 是条件判断,当条件成立时,相应的语句将被执行一次,而 while 是循环,当条件成立时,相应的语 ...

当此处改写为do,while语句为什么也不行了呢?

jackz007 发表于 2021-3-15 20:11:08

肚子饿了233 发表于 2021-3-15 20:02
当此处改写为do,while语句为什么也不行了呢?

       只要循环条件和要执行的语句不变,do while 也一定是死循环无疑。
页: [1]
查看完整版本: C++语言关于if和while的区别!!请大神帮忙瞧瞧