Menu Close

循环语句及循环控制语句

For, While, Do While, Break, Continue语句

什么是循环语句?

循环会多次执行语句序列,直到声明的条件变为假。 循环由两部分组成,循环主体和控制语句。 控制语句是一些条件的组合,这些条件指示循环的主体执行直到指定条件变为假。 循环的目的是重复相同的代码多次。该节讲以下内容:

  • 循环类型
  • While循环
  • Do循环
  • for 循环
  • Break声明
  • continue声明
  • goto 语句
  • 选择哪个循环?

循环类型

根据控制语句在程序中的位置,循环分为两种类型:

1.入口控制循环

2.退出控制循环

入口控制循环在执行循环主体之前检查条件,也称为预检查循环。

退出控制的循环在执行循环主体之后检查条件,它也称为后检查循环。

必须很好地定义和指定控制条件,否则循环将执行无数次。

不断的执行执行语句的循环称为无限循环,无限循环也称为“无结束循环”。

以下是无限循环的一些特征:

  1. 没有结束条件
  2. 结束条件永远不满足

C 语言提供了以下几种循环类型。

循环类型 描述
while 循环 当给定条件为真时,重复语句或语句组。它会在执行循环主体之前测试条件。
for 循环 多次执行一个语句序列,简化管理循环变量的代码。
do…while 循环 除了它是在循环主体结尾测试条件外,其他与 while 语句类似。

While 循环

while循环是最直接的循环结构。 while循环的基本格式如下:

while (condition) {
             statements;
}


算出一到一百的总和,利用while语句可以采用以下算法:

main() 
{ 
 int i=1,sum=0; 
  while(i<=100) 
 { 
    sum=sum+i; 
    i++; 
 } 
 printf("%d\n",sum); 
}

While 循环是入口控制的循环。 在while循环中,在处理循环主体之前先评估条件。 如果条件为真,则执行循环主体。 在执行了循环的主体之后,控制又从头开始再次返回,并且检查条件是否为真,执行相同的过程,直到条件变为假。 一旦条件变为假,则控件退出循环。

退出循环后,控制转到循环之后的语句。 循环的主体可以包含多个语句。 如果仅包含一条语句,则大括号不是必需的。 但是,我们要形成一个习惯,即使循环主体只有一个语句,也要使用花括号,这样设计出来的程序很容易看懂。

在while循环中,如果条件不成立,则不会执行循环主体,甚至不会执行一次。 我们将很快看到,它在do while循环中是不同的。

以下程序说明了while循环:

例一:

#include<stdio.h>
#include<conio.h>
int main()
{
	int num=1;	//initializing the variable
	while(num<=10)	//while loop with condition
	{
		printf("%d\n",num);
		num++;		//incrementing operation
	}
	return 0;
}

执行结果:

上面的程序说明了while循环的用法。 在上面的程序中,我们使用while循环打印了一系列从1到10的数字。

 

  1. 初始化一个名为num的值为1的变量。我们将从1到10进行打印,因此该变量将以值1进行初始化。
  2. 在while循环中,提供了一个条件(num <= 10),这意味着循环将执行主体直到num的值变为10。此后,循环将终止,并且控制将落在循环之外。
  3. 在循环的执行语句中,一个打印函数来打印数字,以及一个递增操作,每次执行循环时递增该值。 num的初始值为1,执行后将变为2,在下次执行期间将变为3。此过程将继续进行,直到该值变为10,然后将其打印在控制台上并终止循环 。

\ n用于格式化目的,令其一行。如果改为 \t 

输出结果如下:

Do-While循环

do-while循环与while循环类似,除了条件始终在循环主体之后执行。 也称为出口控制循环。

如果利用do-while语句计算一到一百的和,算法为:

while循环的基本格式如下:

do {
  statements
} while (expression);

正如我们在while循环中看到的那样,当且仅当条件为true时,才执行主体。 在某些情况下,即使条件为假,我们也必须至少执行一次循环主体。 这种类型的操作可以通过使用do-while循环来实现。

在do-while循环中,循环主体始终至少执行一次。 执行主体后,将检查条件。 如果条件为真,则它将再次执行循环的主体,否则控制权将移出循环。

与while循环类似,一旦控件退出循环,将立即执行循环之后的语句。

while和do-while循环之间的关键区别在于,在while循环中,while是在开始时写入的。 在do-while循环中,while条件写在最后,并以分号(;)终止

下面的程序说明了do-while循环的工作方式:

我们将使用do while循环打印偶数数字。

例二:

#include<stdio.h>
#include<conio.h>
int main()
{
	int num=1;	//initializing the variable
	do	//do-while loop 
	{
		printf("%d\n",2*num);
		num++;		//incrementing operation
	}while(num<=10);
	return 0;
}

运行结果:

在上面的示例中,我们使用do-while循环语句打印出了偶数表。 让我们看看该程序是如何运行的。

  1. 首先,初始化变量’num’为一。然后,我们编写了一个do-while循环
  2. 在每一个循环中,我们有一个打印功能,打印出num的值乘以2。
  3. 每次增加后,num的值将增加1,并将该数乘于二打印在屏幕上。
  4. 当num的值变为10以后,该循环将终止,并在循环之后立即执行一条语句。 在这种情况下,返回0。

For 循环语句

for循环是“ C”编程中更有效的循环结构。 for循环的一般结构如下:

for (initial value; condition; incrementation or decrementation ) 
{
  statements;
}
  • for循环的初始值仅执行一次
  • 条件是一个布尔表达式,每一次执行前和一个固定值进行比较,如果出现false,停止for循环。
  • 初始值递增或递减。

for语句每个部分用英文分号“;”区别开。

以下程序说明了简单的for循环的用法:

例四

#include<stdio.h>
int main()
{
	int number;
	for(number=1;number<=10;number++)	//for loop to print 1-10 numbers
	{
		printf("%d\n",number);		//to print the number
	}
	return 0;
}

执行结果

上面C语言程序for循环语句分行打印出 数字 1 – 10 。

  1. 声明一个int数据类型的变量
  2. 在for循环中,在初始化部分,变量初始值设为1;在条件部分,我们指定条件:该变量小于等于10;最后控制没到一次,变量加一
  3. 在循环的主体中,每一个新行打印一个数字。 我们将值1赋予整数变量,在第一次循环执行后,该变量值将递增,并变为2。现在,变量具有数值2。将重新检查条件,并且由于条件为true,因此将执行循环, 它将在屏幕上打印2。 该循环将继续执行,直到变量的值变为10。此后,循环将终止,并在屏幕上打印一系列的1-10。

for循环在每个部分中可以有多个用逗号分隔的表达式

例如:

for (x = 0, y = num; x < y; i++, y--) 
{ 
  statements; 
}

另外,我们可以把初始表达式放在forloop之外,通过添加分号来跳过初始值表达式。

例五


int i=0;
int max = 10;
for (; i < max; i++) {
  printf("%d\n", i);
}

循环也可以嵌套在有外循环和内循环的地方。 对于外循环的每次迭代,内循环都会重复其整个循环。
下面示例使用嵌套的for循环语句输出一个乘法表:

例六

#include <stdio.h>
int main() {
int i, j;
int table = 2;
int max = 5;
for (i = 1; i <= table; i++) { // outer loop
  for (j = 0; j <= max; j++) { // inner loop
    printf("%d x %d = %d\n", i, j, i*j);
  }
  printf("\n"); /* blank line between tables */
}}

嵌套循环可以出现无限多次。编程时记着每个循环前面对齐,这样可以很容易阅读和理解。为自己,也为别人。有时自己编的程序自己过一段时间再看,就不是很明白。
嵌套循环大部分应用于数组和矩阵运算。

goto语句

goto 语句是一种无条件转移语句, 与 BASIC 中的 goto 语句相似。goto 语句的使用格式为:

goto 语句标号;

其中标号是一个有效的标识符, 这个标识符加上一个“:”一起出现在函数内某处, 执行goto 语句后,程序将跳转到该标号处并执行其后的语句。另外标号必须与 goto 语句同处于一个函数中,但可以不在一个循环层中。通常 goto 语句与 if 条件语句连用, 当满足某一条件时, 程序跳到标号处运行。

goto 语句通常不用,主要因为它将使程序层次不清,且不易读,但在多层嵌套退出时, 用 goto 语句则比较合理。

用goto语句和if语句构成循环, 算出一到一百数的总和:

例九

main() 
{ 
      int i,sum=0; 
      i=1; 
loop: if(i&lt;=100) 
 {
    sum=sum+i; 
    i++; 
    goto loop;
 } 
   printf("%d\n",sum); 
}

如果用For 循环语句,很快就解决了这个问题。

例十

main()
{
   int i, sum=0;
    for (i = 1; i &lt;=100; i++ )
    {
      sum=sum+i;
    }
  printf("%d\n", sum);
}

不建议大家使用GOTO语句,介绍goto语句的目的,是让大家能够看懂别人写的程序。

 

Break 语句

break语句主要在switch语句中使用。 对于立即停止循环也很有用。下列程序引入了一个中断以退出while循环:

例七

#include <stdio.h>
int main() {
int num = 5;
while (num > 0) {
  if (num == 3)
    break;
  printf("%d\n", num);
  num--;
}}

Continue 语句

当您想跳出该循环,进入下一个循环中时,应使用continue语句。该语句忽略了本循环后面的所有语句,进入了下一个循环。
例如:

例八

#include <stdio.h>
int main() {
int nb = 7;
while (nb > 0) {
  nb--;
  if (nb == 5)
    continue;
 printf("%d\n", nb);
}}

数字“5”忽略了。

 

main() 
{ 
   char c; 
   while(c!=13)  
  { 
    c=getch(); 
    if(c==0X1B) 
    continue; 
    printf("%c\n", c); 
 } 
}

ASCII码。 13是回车键,0X1B是ESC (escape),换码(溢出)键。

 

Break 和 Continue 语句的流程图

使用无穷级数来计算 Pi值

使用格雷戈里 – 莱布尼茨无穷级数。数学家们发现了若干个数学级数,如果实施无穷多次运算,就能精确计算出 Pi 小数点后面的多位数字。其中部分无穷级数非常复杂,需要超级计算机才能运算处理。但是有一个最简单的无穷级数,即格雷戈里-莱布尼茨级数。尽管计算较费时间,但每一次迭代的结果都会更接近 Pi 的精确值,迭代 500,000 次后可准确计算出 Pi 的 10 位小数。公式如下:

  • π = (4/1) – (4/3) + (4/5) – (4/7) + (4/9) – (4/11) + (4/13) – (4/15) …

也可以用以下算式求出PI的值

PI/4 = 1-1/3+1/5-1/7+1/9-1/11…

#include<math.h>
main()
{
   int s;
   float n,t,pi;
   t=1,pi=0;n=1.0;s=1;
   while(fabs(t)>1e-5)
   {
      pi=pi+t;
      n=n+2;
      s=-s;
      t=s/n;
   }
   pi=pi*4;
   printf("pi=%10.5f\n",pi);
 }

选择什么样的循环语句 ?

对于程序员来说,选择什么样的循环语句始终是一项艰巨的任务。

要选择一个什么样的循环语句,可以通过下列步骤选择:

  • 分析问题并考虑(problem solving) 它是否需要预测试循环或后测试循环。
  • 如果需要预测试,请使用while 或者 for 循环。
  • 如果需要后测试,请使用do-while循环。

 

摘要

  1. 循环是任何编程语言上的关键概念之一;
  2. 它多次执行一个语句块,直到条件变为假
  3. 循环有两种类型:入口控制和出口控制。
  4.  C语言为我们提供了1)while  2)do-while 和 3)for循环。
  5. For和while循环是入口控制的循环。
  6. Do-while是退出控制的循环。