C语言中的循环



包括 C 语言在内的许多编程语言都支持 **for** 关键字来构建循环。在 C 语言中,其他与循环相关的关键字有 **while****do-while**。与其他两种类型不同,**for** 循环被称为 **自动循环**,通常是程序员的首选。

**for 循环** 是一种入口控制循环,它执行语句直到给定条件满足。所有元素(初始化、测试条件和增量)都放在一起,使用 **for** 关键字在括号内形成一个 **for** 循环。

for 循环的语法

C 编程语言中 **for** 循环的语法如下:

for (init; condition; increment){
   statement(s);
}

for 循环的控制流程

以下是 "for" 循环的控制流程:

**init** 步骤首先执行,并且只执行一次。此步骤允许您声明和初始化任何循环控制 变量。您不需要在此处放置语句,只要出现分号即可。

接下来,评估条件。如果为真,则执行循环体。如果为假,则不执行循环体,控制跳转到 "for" 循环之后紧随其后的下一条语句。

在 "for" 循环体执行之后,控制流跳转回增量语句。此语句允许您更新任何循环控制变量。此语句可以留空,只要在条件之后出现分号即可。

现在再次评估条件。如果为真,则执行循环并重复该过程(循环体,然后增量步骤,然后再次条件)。条件变为假后,"for" 循环终止。

for 循环的流程图

以下流程图表示 **for** 循环的工作原理:

For Loop

当开发人员预先知道要执行多少次迭代时,他们更喜欢使用 **for** 循环。可以将其视为 **while** 和 **do-while** 循环的简写,这些循环递增并测试循环变量。

**for** 循环可以采用不同的变体。让我们了解 **for** 循环在不同情况下的工作原理。

示例:基本 for 循环

这是 **for** 循环最基本的形式。请注意,括号内(在 **for** 关键字之前)的所有三个子句都是可选的。

#include <stdio.h>

int main(){
   int a;

   // for loop execution
   for(a = 1; a <= 5; a++){
      printf("a: %d\n", a);
   }

   return 0;
}

输出

运行代码并检查其输出:

a: 1
a: 2
a: 3
a: 4
a: 5

在循环语句之前初始化 for 循环计数器

初始化步骤可以放在 **for** 循环的头部上方。在这种情况下,必须通过放置分号来使 **init** 部分为空。

示例

#include <stdio.h>

int main(){
   int a = 1;

   // for loop execution
   for( ; a <= 5; a++){
      printf("a: %d\n", a);
   }
   return 0;
}

输出

您仍然会得到相同的输出:

a: 1
a: 2
a: 3
a: 4
a: 5

在 for 循环体内部更新循环计数器

您也可以在增量子句的位置放置一个空语句。但是,您需要在循环体内部放置增量语句,否则它将变成一个 无限循环

示例

#include <stdio.h>

int main(){

   int a;

   // for loop execution
   for(a = 1; a <= 5; ){
      printf("a: %d\n", a);
      a++;
   }
   return 0;
}

输出

在这里,您也将获得与上一个示例相同的输出:

a: 1
a: 2
a: 3
a: 4
a: 5

在 for 循环体内部使用测试条件

您还可以省略括号中测试条件的第二个子句。在这种情况下,您需要使用 **break** 语句 终止循环,否则循环将无限运行。

示例

#include <stdio.h>

int main(){
   int a;

   // for loop execution
   for(a = 1; ; a++){
      printf("a: %d\n", a);
      if(a == 5)
      break;
   }
   return 0;
}

输出

执行此代码后,您将获得以下输出:

a: 1
a: 2
a: 3
a: 4
a: 5

使用多个计数器的 for 循环

在 **for** 语句中可能有多个变量的初始化和/或多个增量语句。但是,只能有一个测试条件。

示例

#include <stdio.h>

int main(){
   int a, b;

   // for loop execution
   for(a = 1, b = 1; a <= 5; a++, b++){
      printf("a: %d b: %d a*b: %d\n", a, b, a*b);
   }

   return 0;
}

输出

当您运行此代码时,它将产生以下输出:

a: 1 b: 1 a*b: 1
a: 2 b: 2 a*b: 4
a: 3 b: 3 a*b: 9
a: 4 b: 4 a*b: 16
a: 5 b: 5 a*b: 25

for 循环中的递减

您还可以形成一个递减的 **for** 循环。在这种情况下,循环变量的初始值大于其在测试条件中的值。for 语句中的最后一个子句使用递减运算符。

示例

以下程序按降序打印数字 5 到 1:

#include <stdio.h>
int main(){
   int a;

   // for loop execution
   for(a = 5; a >= 1; a--){
      printf("a: %d\n", a);
   }

   return 0;
}

输出

运行代码并检查其输出:

a: 5
a: 4
a: 3
a: 2
a: 1

使用 for 循环遍历数组

**for 循环** 非常适合一次遍历数组的一个元素。请注意,数组中的每个元素都具有从 "0" 开始递增的索引。

示例

#include <stdio.h>

int main(){
   int i;
   int arr[] = {10, 20, 30, 40, 50};

   // for loop execution
   for(i = 0; i < 5; i++){
      printf("a[%d]: %d\n", i, arr[i]);
   }

   return 0;
}

输出

当您运行此代码时,它将产生以下输出:

a[0]: 10
a[1]: 20
a[2]: 30
a[3]: 40
a[4]: 50

示例:使用 for 循环计算数组元素的和

以下程序计算给定数组中所有整数的平均值。

#include <stdio.h>
int main(){
   int i;
   int arr[] = {10, 20, 30, 40, 50};
   int sum = 0;
   float avg;

   // for loop execution
   for(i=0; i<5; i++){
      sum += arr[i];
   }
   avg = (float)sum / 5;
   printf ("Average = %f", avg);

   return 0;
}

输出

运行代码并检查其输出:

Average = 30.000000

示例:使用 for 循环计算阶乘

以下代码使用 **for** 循环计算数字的阶乘值。请注意,数字的阶乘是 1 到给定数字之间所有整数的乘积。阶乘在数学上用以下公式表示:

x! = 1 * 2 * . . . * x

以下是计算阶乘的代码:

#include <stdio.h>

int main(){

   int i, x = 5;
   int fact = 1;

   // for loop execution
   for(i=1; i<= x; i++){
      fact *= i;
   }
   printf("%d != %d", x, fact);

   return 0;
}

输出

当您运行此代码时,它将产生以下输出:

5! = 120

当重复次数已知时,for 循环非常适合。但是,循环行为可以通过 **for** 循环体内的 **break** 和 **continue** 关键字 来控制。嵌套 **for** 循环也经常用于处理二维 数组

c_decision_making.htm
广告