C 中的循环


2022年3月5日, Learn eTutorial
2254

在本教程中,您将掌握 C 语言中循环的各个方面。C 编程语言通过 for 循环、while 循环和 do-while 循环这三种独特的方式支持循环。此外,您还将了解无限循环在 C 语言中是如何工作的。 

很多时候我们会遇到一些情况,需要重复执行特定的代码块。例如,当我们计算一个数字(比如 7)的阶乘时,乘法会持续与下一个较小的数字(6、5、4……)进行,这个循环会一直持续到 1。如果我们能只编写一次通用的乘法代码,并让它重复执行直到达到期望的值(这里是 1),那将非常棒。这组被重复执行的通用代码在编程语言中统称为“循环”。 

在编程中使用循环的主要好处是

  • 循环实现了代码的可重用性
  • 循环减少了代码的复杂性和冗余
  • 循环有助于非常轻松地遍历数组、链表等数据结构。

C 语言中的循环类型

在 C 语言编程中,循环基本上分为三种

  1. for 循环
  2. while 循环 
  3. do-while 循环

C 语言中的 For 循环

C 语言中的 'for' 关键字可以使循环执行看起来简单易懂。for 循环是 C 程序中最常用的循环,也被称为前测试循环。这是因为条件在循环体执行之前被评估。For 循环用于预先知道迭代次数的情况。
for 循环的结构以关键字 ‘for’ 开始,后跟一对括号 (),在括号中你必须写三样东西,并用分号隔开

i. 初始化 (i=1)
ii. 条件 (i<=5)
iii. 增量 (i=i+1 或 ++i 或 i++)

 

for 循环的语法

for (initialization; condition test; increment or decrement)
{
       //loop body contains statements to be executed
}

FLOWCHART OF FOR LOOP

FOR 循环流程图

步骤 1:首要步骤是初始化计数器变量。

步骤 2:在第二步中评估条件,其中计数器变量将根据指定条件进行测试。

  • 如果条件返回真,则执行 for 循环体内的代码。
  • 如果条件返回假,则 for 循环终止,控制退出循环。

步骤 3:在最后一步中,计数器变量根据操作(++ 或 --)进行递增或递减。


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

}

输出

1
4
9
16
25
36
49
64
81
100

这个例子可以解释如下。

步骤 1:最初,计数器变量 i 被初始化为值 1。
步骤 2:评估条件 i <= 10,即检查 1 是否小于或等于 10,条件返回真。 
步骤 3:控制转移到循环内的语句,即打印 (i*i),意味着 1*1。打印出结果 1。
步骤 4:由于操作是 i++,计数器变量的值增加到 2,并重复这些步骤直到条件失败。即当计数器变量的值达到 11 时,它将终止循环并退出循环。

循环体 

包含在大括号{}内的语句构成了 for 循环的主体(循环体)。如果循环只包含一个语句,则没有必要将其括在大括号中。大括号确定了主体的作用域,因此被称为块分隔符。在 for 循环内部声明的变量的生命周期仅限于该循环,而不是外部。

#include<stdio.h>
void main()
{
    int i;
      for(i=1;i<=10;++i)
       {
         int j = 5;
         printf("%d , %d\n",i,j);
       }

}

输出

1 , 5
2 , 5
3 , 5
4 , 5
5 , 5
6 , 5
7 , 5
8 , 5
9 , 5
10 , 5

C 语言中的嵌套 For 循环

C 语言也支持 ‘for 循环’ 的嵌套。循环内部的循环通常称为嵌套循环。嵌套可以达到任何级别,但在编写脚本时保持简单和无复杂性是更好的选择。嵌套 for 循环通常用于表示二维数组。

嵌套 for 循环的语法

for (initialization; condition; increment/decrement)   
{  
    for(initialization; condition; increment/decrement)  
    {  
           // body of inner loop.  
    }  
    // body of outer loop.  
}  

请看下面的简单代码片段,展示了如何使用嵌套 for 循环打印乘法表。

#include<stdio.h>
void main()
{
    for (int i=1; i<2; i++)
   {
 for (int j=1; j<=10; j++)
 {
    printf("%d x %d = %d\n",i ,j,(i*j));
 }
   }

}

输出

1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10

C 语言中的 While 循环

C 语言中另一种可用的循环是 while 循环。像 for 循环一样,while 循环也被称为前测试循环,因为在执行前会检查条件。当我们事先不知道迭代次数时,通常使用 while 循环。

while 循环的语法

while(condition){  
//body of while loop 
}  

在这种循环结构中,'while' 后面跟着一个条件,如果条件满足,循环就开始执行。在每个周期执行后,编译器会检查 while 下的条件是否仍然满足。如果满足,循环将一遍又一遍地执行,否则不会。

FLOWCHART OF WHILE LOOP

WHILE 循环流程图

While 循环示例

让我们看看我们如何更改前面打印数字平方的例子。

#include<stdio.h>
void main()
{
    int i;
      i=1;
      while (i<=10)
       {
          printf("%d\n",(i*i));
          i=i+1;
      }

}

输出

1
4
9
16
25
36
49
64
81
100

请注意,我们给 'i' 的初始值为 1。在第一个周期中,'while' 检查它是否小于或等于 10。由于 1<10,代码执行并打印 1 的平方为 1。语句 'i=i+1' 将 'i' 的值从 1 增加到 2。现在 'while' 再次检查,发现 2<10,因此打印出 2 的平方,即 4。同样,3、4、……直到 10 都被打印出来。但在最后一个循环的最后一条语句中,'i' 变为 11。所以 'while' 发现 11 既不小于也不等于 10,循环终止。

嵌套 While 循环

像 for 循环一样,我们也可以在一个 while 循环内部嵌套另一个 while 循环。 

嵌套 while 循环的语法

while(condition)  
{  
    while(condition)  
    {  
         // body of the inner loop.  
    }  
// body of outer loop.  

嵌套 while 循环示例

请看下面的例子,使用嵌套 while 循环打印乘法表。

#include<stdio.h>
void main()
{
    int i=1;
 while(i<2)
 {
     int j =1;
     while(j<=10)
     {
        printf("%d x %d = %d\n",i ,j,(i*j));
        j=j + 1;
     }
     i=i + 1;
 }

}

输出

1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10

C 语言中的 do..while 循环

C 语言中另一种循环是 do-while 循环,它与 while 类似,只有一个例外,即条件评估只在执行 do-while 主体内的语句之后进行。因此,do-while 循环也被称为后置条件循环。do-while 循环主要用于我们需要至少执行一次主体内语句的地方,比如菜单驱动的程序。

为了更清楚地理解,让我们考虑一个电视遥控器的例子,你有多种选择(菜单驱动)来看电视:如果你想在电视上浏览频道,你必须至少看 1 个频道,当你感到无聊时,你可以切换到其他频道。 

do..while 循环的语法

do{  
//body of do-while loop   
} while(condition);  
 
  • 在这种循环的情况下,首先发生值的初始化。
  • 然后是关键字 'do',后面跟着大括号 {},其中写入语句和增量。
  • 紧接着,在关键字 'while' 之后写入要评估的条件。

do..while 循环示例

请看下面的代码,展示了一个 do-while 循环的例子。

#include<stdio.h>
#include
void main()
{
int channel,cursor;
    char c;
    do{
    printf("\n1.TLC\n2.CNN\n3.GEO\n4.Exit\n");
    scanf("%d",&choice);
    switch(channel)
    {
        case 1 :
        printf("I am Watching TLC\n");
        break;
        case 2:
        printf("I am watching CNN\n");
        break;
        case 3:
        printf("I am watching GEO\n");
        break;
        case 4:
        exit(0);
        break;
        default:
        printf("Watching default channel - BBC");
    }
    printf(" \n Do you want to surf another channel?");
    scanf("%d",&cursor);
    scanf("%c",&c);
    }while(c=='y');
}

输出

1.TLC
2.CNN
3.GEO
4.Exit
2
I am watching CNN

Do you want to surf another channel?y

1.TLC
2.CNN
3.GEO
4.Exit
1
I am Watching TLC

Do you want to surf another channel?n

嵌套 do..while 循环

像其他两种循环一样,do-while 循环也支持嵌套

嵌套 do...while 循环的语法

do  
{  
   do  
  {   
      //  body of inner do-while loop.  
   } while(condition);  
   //  body of outer do-while loop.   
} while(condition); 
 

嵌套 do..while 示例

请看下面的例子,使用嵌套的 do-while 循环打印乘法表。

#include<stdio.h>
void main()
{
   int i =1;
 int j=1;
 do
 {
     do
     {

         printf("%d x %d = %d\n",i ,j,(i*j));
         j=j+1;
     }while(j<=10);
     i=i+1;
 }while(i<2);
}

输出

1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10

C 语言中的无限循环

在 C 语言中,无限循环是一种永远执行而不会终止的循环结构。这种类型的循环会产生无限数量的输出,它也被称为无限循环或无尽循环。

无限循环的用途

在用户需要应用程序无限期执行,直到用户需要手动退出应用程序的情况下,无限循环非常有用。使用无限循环的日常应用程序包括所有操作系统、所有服务器和游戏。所有这些应用程序都会持续工作,直到用户关闭或退出。我们可以使用所有三种循环来定义无限循环:for 循环、while 循环或 do-while 循环。此外,你将在下一个教程中学到的 goto 语句也可以用来创建无限循环。

无限循环示例

 这是一个简单的例子


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

}

for (i=1;i++)

这里 I 的值会像 1,2,3... 这样变化。但永远不会小于 '0',从而导致无限循环。输出将会是这样的

infinite loop output