我爱橙 发表于 2022-2-24 15:26:32

NO.38 while求和为什么出错

本帖最后由 我爱橙 于 2022-2-25 10:25 编辑

#include <stdio.h>

int main()
{
      int i=1,sum=0;
      while(i<10)
      sum=sum+1;i++;
      printf("i=%d,sum=%d",i,sum);
   
      return 0;
}

isdkz 发表于 2022-2-24 15:28:52

本帖最后由 isdkz 于 2022-2-24 15:29 编辑

多条语句要放到语句块{}里
#include <stdio.h>

int main()
{
      int i=1,sum=0;
      while(i<10)
      {
              sum=sum+i;i++;         // 放到 {} 里,还有sum=sum+i,这里应该是加 i ,不是加 1
                }
      printf("i=%d,sum=%d",i,sum);
   
      return 0;
}

我爱橙 发表于 2022-2-24 16:12:23

isdkz 发表于 2022-2-24 15:28
多条语句要放到语句块{}里

sum+1是不能运行计算吗?

isdkz 发表于 2022-2-24 16:16:29

本帖最后由 isdkz 于 2022-2-24 16:18 编辑

我爱橙 发表于 2022-2-24 16:12
sum+1是不能运行计算吗?

sum + 1,那你只是累加 1 而已,最终会是 9 个 1 相加,sum 的值就是 9,

但是我想你想实现的是 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9,

所以应该是加 i 的值,因为 i 的值一直在自增,

还有 i 的自增应该在 while 循环的语句块里面,多条语句想要在循环里,就得用语句块,

如果 i 的自增不在循环里,且 i 用于作循环条件,那 while 就会陷入死循环

爱上pc的Qt 发表于 2022-2-24 16:43:47

循环进行需要有五个要素:1.循环变量的初值;2.循环变量的终值;3.循环增量;4.循环条件;5.循环体;
这里就拿你的程序来说,循环变量是i
要素1(初值是1),就是你 的初始化 i=1;

要素2(终值是10),就是你 while判断 出循环的i的值(i=10的时候,while循环结束)

要素3(这个自己定,一般都是循环变量的自加或自减),你写的 i++。但是注意,你这里写的不对,要素5的时候一起看。

要素4 (就是你进行循环的条件), 这个是需要你自行构造的,有些循环我们就是需要永远进行的那叫
            死循环(一般用while(1),这里“1”的意思就是非零的句子,表达式都可以。即判断为真)
            你这里的是i<10为循环条件,换句话说就是当 i>=10的时候循环结束

要素5 (即如何循环,循环里面我们要进行什么程序),养成良好的习惯就是用{}括起来,然后循环体就是{}括起的全部内容
         如果没有{},那么就只有while()这个语句的下一句为循环体,也就是你这个情况,循环体是sum=sum+1,循环里面只做这个。


结合上面的分析,可以看出你的循环体里面这个循环变量 i 没有变化,也就是一直是1。你写的i++是需要循环结束了才能进行,
但是你结束循环的条件是i>=10,所以这就是死循环了。主要问题就是你的循环体。循环体:
{
sum=sum+1;//每次加1
i++;//循环变量的自增,给循环结束提供可能
printf("i=%d,sum=%d",i,sum);//查看每一次循环的i和sum的值
}

爱上pc的Qt 发表于 2022-2-24 16:48:33

我爱橙 发表于 2022-2-24 16:12
sum+1是不能运行计算吗?

你这个是一直在进行sum+1的计算,其他下面的那写程序都没有执行到。
具体可以看看我写的五要素当中的循环体的理解。
页: [1]
查看完整版本: NO.38 while求和为什么出错