一、单层for循环
- 引例:C语言实现求1到10的和(用for循环实现)
#include <stdio.h>
int main()
{
int i, sum = 0;
for (i = 1; i <= 10; i++)
sum = sum + i;
printf("sum = %d\n", sum);
return 0;
}
单层for循环执行的顺序:
第一次循环先执行语句①,执行完语句①执行语句②,如果语句②成立则执行语句④,执行完语句④执行语句③,执行完语句③标志着第一次循环结束;第二次循环先执行语句②,如果语句②成立则执行语句④,执行完语句④执行语句③,执行完语句③标志着第二次循环执行结束,随后循环中语句的执行顺序与第二次循环一致。如果在循环过程中语句②不成立,则整个循环就结束了。直到整个循环结束后才会执行语句⑤,因为,for语句与if语句所能控制的范围相同,只能控制其接下来的第一条语句,言下之意是,语句⑤并不在for循环的内部。需要注意的是,语句①仅在第一次循环中执行,在其它循环过程中不执行。换句话说,语句①只会在整个循环过程中执行一次。语句①的作用其实是给变量进行初始化,所以它仅参与了第一次循环。还有值得注意的是,初学时容易在for (①; ②; ③)后加分号,这个情况我已经在《C语言if语句中常见的问题》这篇文章中的空语句问题中详细叙述了其中的道理,并且在for语句中依然适用,有兴趣的话可以一看。
- 练习
- C语言实现求1到10中奇数的和
#include <stdio.h>
int main()
{
int i, sum = 0;
for (i = 1; i <= 10; i = i +2)
sum = sum + i;
printf("sum = %d\n", sum);
return 0;
}
- C语言实现求1+1/2+1/3+…+1/99+1/100
初学时的错误代码:
#include <stdio.h>
int main()
{
int i;
float sum = 0; // 考虑到和是小数,所以定义sum为float类型
for (i = 1; i <= 100; i++)
sum = sum + 1/i;
printf("sum = %f\n", sum); // float类型的变量用%f输出
return 0;
}
错误原因:没有考虑到1/i
的数据类型。在C语言中,整型除以整型得到的结果只有整数位。例如,16/3 = 5。上述程序中i
是整型变量,所以1/i
也是整型,故从i
大于等于2时,1/i
的值永远为0。
因此需要将1/i
的值想办法变为浮点数才可以实现想要的功能。C语言规定,只要被除数与除数其中的一个为浮点数,则商为浮点数。故解决的办法有两种,第一种是将1/i
写为1.0/i
,第二种是将整型变量i
强制类型转化为float类型,正确的代码如下: