分析C语言中常见的三种循环语句

时间:2022-10-28 09:58:53


目录

​(一)引言​

​(二)利用while语句实现的循环​

​(三)利用do…while语句实现的循环​

​(四)while语句和do…while语句对比            ​

​(五)利用for语句实现的循环​

​(六)如何选择循环​


(一)引言

       在c语言的学习中,我们会学习到循环结构的程序设计,对于循环结构我们常见的有while循环语句、do…while循环语句和for循环语句这三种,当然我们或许还会见到if和goto搭配使用的循环语句。这里我们就简单提一下后者这种语句。

首先,goto我们能从表面知道是“去到”这样的意思,其实我们可以简单的理解为“返回”。下面我们来看一组代码:

#include<stdio.h>
main(void)
{ int i,sum=0;
i=1;
loop:if(i<=100)
{sum+=i;
i++;
goto loop;
}
printf("%d\n",sum);
}

 上述代码是简单的求和程序,i的初始值为1,在if条件下,完成求和,当完成循环变量增值这一步之后,若i的值仍然满足i<=100时,则继续执行循环体,直到不再满足条件时,程序运行结束。(loop在if与goto构成的循环中起到语句标号的作用)。值得一提的是,该类型循环语句属于无条件转移语句,但是为什么我们还要学习另外的三种语句呢?原因是因为语句标号的条件和goto语句的不方便性:

  1. 不能用整数作为语句标号;
  2. 只能出现在goto函数当中,且唯一;
  3. 标号只能加在可执行语句前面;
  4. 限制使用goto语句(尽量不用),goto语句在一个程序中使用多次必然会使人眼花缭乱。

下面这段代码可以作为了解,感受一下if与goto构成的循环语句。

#include<stdio.h>
main()
{ int number,sum=0;
read_loop:scanf("%d",&number);
if(!number)goto print_sum;
sum+=number;
goto read_loop;
print_sum:printf("The total sum is %d\n",sum);
}

当然,也不能全否定goto语句,在某些特定情况下,使用goto语句还是非常方便的。下面就说一下C语言中常用的三种循环语句。


(二)利用while语句实现的循环

while语句循环的一般形式:while(expression)

                                                    statement;

statement部分可以是简单语句,也可以是花括号括起来的复合语句。

分析C语言中常见的三种循环语句

如果表达式为真(简单地说就是非零),执行语句部分一次,然后判断表达式。在表达式假(0)之前,循环的判断和执行将会一直重复。而每次循环都被成为一次迭代

while语句循环的终止

在构建while语句中,有一个非常重要的一点,那就是保证测试值有变化,表达式最终要为假。否则,循环将会一直进行下去。例如下面这段程序:

index=1;
while(index<5);
printf("Good morning!\n");

上述程序段的运行结果是:出现无限个Good morning!。那么原因是什么呢?没错,就是因为在循环中index的值从未发生改变(一直是1)。我们简单的对上述代码进行修改如下:

index=1;
while(--index<5)
printf("Good morning!\n");

第二段代码虽然改变了index的值,但是与第一段代码相比,并没有多大的改进,但是至少当此段代码在index减少到其类型可容纳的最小负值并变成最大正值时终止循环。

说明:

  • 循环体可能一次也不执行
  • 循环体可为任意类型语句
  • 下列情况退出while循环:<1>条件表达式不成立(为零)
  • <2>循环体内遇到break,return,goto
  • 无限循环while(l)

                           循环体;//进入死循环 

注意:使用while时,要牢记一点,只有在测试条件后的单独语句(简单语句或者复合语句)才是循环语句。


(三)利用do…while语句实现的循环

do…while语句循环的一般形式:do

                                                      statement

                                                  while(expresssion);

分析C语言中常见的三种循环语句

do while语句是一种出口条件循环,即在执行完循环体后才根据测试条件决定是否再次执行环。 do while循环在执行完循环体后才执行测试条件,所以至少执行循环体一次;该类循环适用于那些至少要迭代一次的循环。比如:输入我们在登陆账号输入密码的环节。


(四)while语句和do…while语句对比            


分析C语言中常见的三种循环语句

分析C语言中常见的三种循环语句

  • 结论:当while后面的表达式的第一次的值为“真”时,两种循环得到的结果相同;否则,

             两者结果不相同(指两者具有相同的循环体的情况)。


(五)利用for语句实现的循环

for语句的一般形式:for(initialize;test;update)statement

在test为假或0之前,重复执行statement部分。

示例:

for (initialize; test; update)
printf("%d%d\n",n,2*n+1);

 

分析C语言中常见的三种循环语句

 注意:for语句中的三个语句需要用";"分隔开。initialize表达式在执行for语句之前只执行一次;然后对test表达式求值,如果表达式为真,则执行循环一次,接着对update表达式进行求值,并再次检验test表达式。for语句可能一次都不执行。

for语句和while语句的转换:

  • 可以改写为while语句如下

for(initialize;test;update)statement可以改写为while语句如下:

initialize;

while test;

{

statement

update

}

二者无条件


(六)如何选择循环

首先,需要确定选择出口条件循环还是入口条件循环。一般而言,入口条件循环使用的比较多,理由如下:

  • 一般原则是在执行循环之前进行测试条件比较好;
  • 测试放在循环开头,使程序的可读性更高;
  • 在许多应用中,要求在一开始不满足测试条件时就直接跳过整个循环。

一般而言,当循环涉及初始化和变量更新时,用for循环比较合适,而其它情况下使用while循环更合适。另外,涉及索引计数的循环,用for循环更为合适。

参考文献:C Primer Plus——作者:Stephen Prata

                  C程序设计(第五版)——作者:谭浩强