(四)语句形式 -- 6 while语句

6. while语句

最简单的迭代结构就是while语句,它重复执行一条简单语句或程序块,直到条件表达式变为FALSE为止。

  • while循环
    整条语句(包括while控制行本身和循环体)一起构成了一个while循环。

程序执行while语句时,先计算出条件表达式的值,看它是TRUE还是FALSE。
如果是FALSE,循环终止(terminate),并接着执行在整个while循环之后的语句。
如果是TRUE,将执行整个循环体,而后再回到while语句的第一行,再次对条件进行检查。

  • 周期(cycle)
    对循环中所有语句的一次执行叫一个周期。

考察while循环的操作时,两个重要原则:

(1) 条件测试是在每个循环周期之前进行,包括第一个周期。
如果一开始测试结果便为FALSE,则根本不会执行循环体。

(2) 对条件的测试只在一个循环周期开始时进行。
如果碰巧条件值在循环体的某处变为FALSE,程序在整个周期完成之前都不会注意它。
在下一个周期开始前再次对条件进行计算,倘若为FALSE,则整个循环结束。


代码示例

#include <stdio.h>

/* Sum the digit. */

main() {
    
    
    int n, sum;
    sum = 0;
    printf("Which number? ");
    scanf("%d", &n);
    while (n > 0) {
    
    
        sum += n % 10;
        n /= 10;
    };
    printf("Digit sum is %d.\n", sum);
}


6.1 无限循环

  • 无限循环(infinite loop)
    如果while的控制行中的条件总是为TRUE,那么计算机将一个周期接着一个周期不停地执行下去,这种情况叫做无限循环。

要结束一个无限循环,必须从键盘上输入特殊的命令以中断程序执行并强制退出。



6.2 半途退出问题

  • 半途退出问题(loop-and-a-half problem)
    当一个循环中有一些操作必须在条件测试之前执行时,称为半途退出问题。

例如,对于读入数据直到读到标志值的问题:
在循环的最开始时没有能决定循环是否该结束的测试,循环的结束条件要到读入值等于标志值时才出现。
为了检查这个条件,程序必须先读入某个值。如果程序还没有读到值,那么终止条件没有任何意义。
在程序能作任何有意义的测试之前,程序必须已经执行了循环中读入数据的部分。


解决:使用break语句
break语句除了能在switch语句中使用之外,还具有使最内层的循环立即终止的作用。

使用break来编写标志问题中的循环:

while (TRUE) {
    
    
	提示用户并读入数据
	if (value == sentinel) break;
	根据数据作出处理
}

按照while循环的定义,循环将一直执行直到括号里的条件值变为FALSE为止。
TRUE是一个常量,它不会变为FALSE。因此就while语句本身而言,循环永远不会结束。
程序退出循环的唯一方法就是执行其中的break语句。


代码示例

#include <stdio.h>

/* Add numbers inputted and break if input number is zero. */

main() {
    
    

    int n, total;
    total = 0;
    printf("Input a number: ");
    scanf("%d", &n);
    while (n != 0) {
    
    
        total += n;
        printf("Input a number: ");
        scanf("%d", &n);
    };
    printf("Total is %d.\n", total);
}


参考
《C语言的科学和艺术》 —— 第4章 语句形式

猜你喜欢

转载自blog.csdn.net/m0_38111466/article/details/108903461
今日推荐