C编程从入门到实践
上QQ阅读APP看书,第一时间看更新

7.3.2 while语句

while语句也叫while循环,能够不断执行一个语句块,直到条件为假时停止。while语句的一般格式如下。

    while(表达式)
    语句

其中,“表达式”是循环条件,“语句”是循环体。

上述格式的含义是:计算表达式的值,当值为真(非零)时,执行循环体语句。其执行过程如图7-16所示。

图7-16 while语句的执行过程

例如,可以通过如下代码计算1~100之间的整数和。

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

在C语言中使用while循环语句时,应该注意以下9点。

(1)在使用过程中,指定的条件和返回值都应为逻辑值(真或假)。

(2)应该先检查条件,后执行循环体语句,也就是说循环体中的语句只能在条件为真时才执行,如果第一次检查条件的结果为假,则循环中的语句不会执行。

(3)因为while循环取决于条件的值,所以,它可用在循环次数不固定或者循环次数未知的情况下。

(4)一旦循环执行完毕(当条件结果为假时),程序就从循环体最后一条语句之后的代码行继续执行。

(5)如果循环中包含多条语句,则需要用{}括起来。

(6)while循环体中的每条语句都应用分号“;”来结束。

(7)while循环条件中使用的变量必须先声明并初始化,然后才能用于while循环条件中。

(8)while循环体中的语句必须以某种方式改变条件变量的值,这样循环才可能结束。如果条件表达式中的变量保持不变,则循环将永远不会结束,从而成为死循环。

(9)while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真(非零)就可继续循环。例如下面的代码。

    int main(void){
        int a=0, n;
        printf("\n input n:     ");
        scanf("%d", &n);
        while (n--)
          printf("%d", a++*2);
    }

上述代码将执行n次循环,每执行一次,n值减1。循环体输出表达式a++*2的值。该表达式等效于a*2;a++。

实例7-7

在窗口中依次输出1×20,2×20,…,20×20的积

源码路径daima\7\7-7

本实例的实现文件为“while.c”,具体实现代码如下所示。

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

拓展范例及视频二维码

范例7-7-01:实现一个简单的猜数游戏

源码路径:演练范例\7-7-01\

范例7-7-02:最大公约数和最小公倍数

源码路径:演练范例\7-7-02\

编译并运行上述代码,并在窗口中依次输出1×20,2×20,…,20×20的积,执行效果如图7-17所示。

图7-17 执行效果

在具体应用中,为了满足特殊系统的需求,可以嵌套使用while循环语句。具体格式如下。

    while(i <= 10)
    {
          . . .
        while (i <= j)
        {
              . . .
              . . .
          }
          . . .
    }

在嵌套使用时,只有内循环完全结束后,才会进行下一次外循环。请读者课后仔细品味下面代码的含义。

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