问题:for循环:求 1+2+3+…+100 的总和

代码实现:

# include <stdio.h>
int main(void)
{
int i;
int sum = 0; //sum的英文意思是“总和”
for (i=1; i<=100; ++i) //++是自加的意思, ++i相当于i = i + 1
{
sum = sum + i; /*等价于sum += i;但是不建议这么写, 因为sum = sum + i看起来更清楚、更舒服*/
}
printf("sum = %d\n", sum);
return 0;
}

输出结果:
sum = 5050

这个程序的功能是实现求 1+2+3+4+…+100 的和,如果不用循环,加一次就要一条语句,加 100 次就要 100 条语句。这里是从 1 加到 100,要是从 1 加到 10000 那就要 10000 条语句。但有了循环就很方便了,你想加到多少就加到多少,只要改一个参数就可以了。所以循环很重要。

下面按照执行过程看看上面这个程序是怎样执行的?

1) 首先定义一个循环变量 i。定义的时候可以不给它赋初值,在 for 循环里面再给它赋初值也行。但前面说过,最好在定义变量的时候就对它进行初始化,如果值不确定就初始化为 0。所以程序中也可以在定义 i 的时候就给它赋初值,那么 for 循环里的“表达式1”就可以省略了,但分号不可以省略。

这样的话,执行的时候就跳过第1步,直接进入第2步,其他的不变。所以程序也可以像下面这样写:

 

# include <stdio.h>
int main(void)
{
int i = 1;
int sum = 0;
for (; i<=100; ++i)
{
sum = sum + i;
}
printf("sum = %d\n", sum);
return 0;
}

当然表达式1加上也行,大不了再重新赋一次值。

2) 然后定义一个用来存放“和”的变量 sum,并给它赋初值 0,然后进入 for 循环:

  1. 首先求解表达式1,即给变量i赋初值,i=1;表达式1只执行这一次,下面都不会再执行了。
  2. 然后求解表达式2,若 1<=100 成立,则执行 for 循环中的内嵌语句,即 sum=0+1。
  3. 然后执行第3步,变量 i 自加 1,即变量 i 由 1 变为 2。
  4. 然后再求解表达式2,2<=100 成立,则执行 for 循环中的内嵌语句,sum=0+1+2。
  5. 然后再执行第3步,变量 i 自加 1,即变量 i 由 2 变为 3。
  6. 然后再求解表达式2,即 3<=100 成立,则执行 for 循环中的内嵌语句,sum=0+1+2+3。
  7. ……

就这样一直循环下去,直到 ++i 等于 100 的时候,求解表达式2,即 100<=100 成立,则执行 for 循环中的内嵌语句,sum=0+1+2+3+…+100。

然后再执行第3步,变量 i 自加 1,即变量 i 由 100 变为 101。然后再求解表达式2,即 101<=100 不成立,则结束循环,执行 for 循环下面的语句即 printf。

以上就是这个程序的执行过程。关于 for 语句的代码规范化问题,有两点要再跟大家强调一下:

1)if、else、for、while、do 都只能控制到其后的一条语句,如果要控制多条语句必须加大括号{}。但基于代码规范化,if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}

2) 像 if、for、while 等关键字之后应留一个空格再跟左括号(,以突出关键字。

此外上面的程序还有一个知识点要跟大家说一下:

从功能上讲,for(i=1; i<=100;++i)完全可以写成for(i=1; i<101; ++i),而且建议大家尽量使用这种写法。也就是说,循环语句的循环条件尽量写成半开半闭的,不管是 for 循环还是 while 循环

for(i=1; i<101; ++i)实际上是 1≤i<101,是半开半闭的;而for(i=1; i<=100; ++i)实际上是 1≤i≤100,是全闭的。

那么为什么建议使用半开半闭的呢?

知识拓展:while与do while循环语句

for循环练习:

  1. 输出1~1000 之间所有的完全平方数
  2. 求1 ~100之间所有能被 3 整除的数之和
  3. 求 1! + 2! + 3! + ... + n!

更多知识点练习,欢迎欢迎━(*`∀´*)ノ亻!关注本章栏进行查阅哦~感谢支持!共勉。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐