问题: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,即给变量i赋初值,
i=1;
表达式1只执行这一次,下面都不会再执行了。 - 然后求解表达式2,若 1<=100 成立,则执行 for 循环中的内嵌语句,即 sum=0+1。
- 然后执行第3步,变量 i 自加 1,即变量 i 由 1 变为 2。
- 然后再求解表达式2,2<=100 成立,则执行 for 循环中的内嵌语句,sum=0+1+2。
- 然后再执行第3步,变量 i 自加 1,即变量 i 由 2 变为 3。
- 然后再求解表达式2,即 3<=100 成立,则执行 for 循环中的内嵌语句,sum=0+1+2+3。
- ……
就这样一直循环下去,直到 ++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循环练习:
更多知识点练习,欢迎欢迎━(*`∀´*)ノ亻!关注本章栏进行查阅哦~感谢支持!共勉。