首页 > 编程笔记 > C语言笔记 阅读:413

C语言for循环语句的用法(附带实例)

通义灵码
C语言中的 for 循环一般用来编写指定次数的循环,当然也可以用于编写不确定次数的循环。

C 语言中 for 循环的基本语法如下:
for ( 初始化语句; 执行条件; 变量改变语句)
{
    循环执行语句;
}
在 for 后面的( )中,用两个“;”隔开的 3 个子语句,分别是初始化语句、执行条件、变量改变语句(3 个子语句可为空,但;必须保留)。

下面是对 for 循环语句的详细解释:
1)初始化语句会先被执行一次。这一步允许声明并初始化任何循环控制变量,也可以不在这里写任何语句,只要有一个分号出现即可。

2) 接下来会判断执行条件。如果为真,则执行循环体;如果为假,则不执行循环体,且控制流会跳转到紧接着 for 循环的下一条语句。

“循环体”就是花括号{}中的内容。


3) 在执行完一次循环体后,控制流会跳回上面的变量改变语句。该语句允许更新循环控制变量。该语句可以留空,只要在执行条件后有一个分号即可。

4) 执行条件再次被判断。如果为真,则再次执行循环体,这个过程会不断重复(执行循环体,然后增加步值,再重新判断执行条件)。在执行条件变为假时,for 循环终止。

【实例】求 1+2+3+4+…+100 的总和。代码如下:
  1. #include <stdio.h>
  2. const int LOOP = 100;
  3. int main(void)
  4. {
  5. int i_STEP;
  6. int i_sum = 0; //sum保存总和
  7. for (i_SETUP = 1; i_SETUP <= LOOP; i_SETUP++)
  8. //++为自加, ++i相当于在循环后i_SETUP = i_SETUP + 1
  9. {
  10. i_sum += i_SETUP; /*等价于i_sum = i_sum + i_SETUP*/
  11. }
  12. printf("i_sum = %d\n", i_sum);
  13.  
  14. return 0;
  15. }
编译运行,结果如下:

i_sum = 5050

程序的执行流程图如下图所示:


图 1 实例程序的流程图

如果要得到 1~100 的奇数之和,只需要将变量改变语句 i++ 修改为 i=i+2。或者去掉变量改变语句,在循环体中增加 i=i+2,代码如下:
  1. for (i = 1; i<= LOOP;)
  2. {
  3. i_sum += i; /*等价于i_sum = i_sum + i*/
  4. i = i + 2
  5. }

有时候因为程序需要,初始化语句在 for 语句之前执行也可以,此时代码变为:
  1. i = 1;
  2. for (; i <= LOOP; i++) //++为自加, ++i相当于在循环后i = i + 1
  3. {
  4. i_sum += i; /*等价于i_sum = i_sum + i*/
  5. }

有时也可以同时初始化多个变量,但中间要用“,”隔开,例如:
  1. int j = i = 1;
  2. for (i = 1, j = 1; i <= LOOP; i++, j++) //++为自加,++i相当于在循环后i = i + 1
  3. {
  4. i_sum += i; /*等价于i_sum = i_sum + i*/
  5. }

初学者最常见错误是:在for(初始值; 条件; 变量)结束后,不写循环执行语句,直接写“;”,导致具体的循环语句没有执行。

【实例】计算斐波那契数列的第 30 个数。
斐波那契数列(Fibonacci):前两个数都为 1,从第三个数开始,值为前两个数之和。

实现思路是:前两个数为 1,先定义前两个变量 i_a,i_b;第三个数为前两个数之和,定义第三个变量 i_c,i_c= i_a+ i_b;现在有 3 个变量,为了避免冗余,把第二个数的值赋给 i_a,第三个数的值赋给 i_b,i_c= i_a+ i_b 得到第四个数,以此类推。

具体代码如下:
  1. #include <stdio.h>
  2. const int LOOP = 30;
  3. int main()
  4. {
  5. long int i_a = 1;
  6. long int i_b = 1;
  7. long int i_c;
  8.  
  9. for (int i = 0; i <LOOP - 2; i++)
  10. {
  11. i_c = i_a + i_b; //计算第三个数
  12. i_a = i_b; //将原来的第一个数后移
  13. i_b = i_c; //将原来的第二个数后移
  14. }
  15. printf("%d ", i_c);
  16.  
  17. return 0;
  18. }
编译运行,结果如下:

832040

相关文章