首页 > 编程笔记 > C语言笔记 阅读:10

C语言while和do while循环用法详解(附带实例)

程序在运行时可以通过判断、检验条件做出选择,帮我们解决许多问题。此处,程序还必须能够重复,也就是能反复执行一段指令,直到满足某个条件为止,这种重复的过程就称为循环。

C语言中有 3 种循环语句,即 while、do while 和 for 循环语句,本节重点介绍前两种循环语句的用法。

C语言while语句

使用 while 语句可以解决当某个条件满足时反复执行某个循环体的问题。其一般形式如下:
while(表达式)
{
    语句块(循环体)
}
while 语句的执行流程图如下图所示:


图 1 while 语句的执行流程图

while 语句首先检验一个条件,也就是括号中的表达式。当条件为真时,就执行紧跟其后的循环体语句或者语句块。每执行一遍循环,程序都将回到 while 语句处,重新检验条件是否满足。

如果一开始条件就不满足,则跳过循环体中的语句,直接执行后面的程序代码。如果第一次检验时条件满足,那么在第一次或其后的循环过程中,必须得有使条件为假的操作,否则循环将无法终止。

无法终止的循环常被称为死循环或者无限循环。

例如下面的代码:
#include <stdio.h>

int main() {
    int iSum = 0; // 初始化iSum为0
    while(iSum < 100) {
        iSum += 1; // 每次循环iSum加1
    }
    printf("iSum 为:%d", iSum); // 打印iSum的值
    return 0;
}
执行结果为:

iSum 为:100

在这段代码中,while 语句首先判断 iSum 变量是否小于常量 100,如果小于 100,为真,那么执行紧跟其后的循环语句块;如果不小于 100,为假,那么跳过循环语句块中的内容直接执行 printf() 语句。

在循环语句块中,可以看到对其中的变量进行加 1 的运算,这里的加 1 运算就是循环结构中使条件为假的操作,也就是使得 iSum 不小于 100,否则程序会一直循环下去。

初学者很容易在 while 语句后添加英文分号(;),从而导致编译报错。一定要注意,if、if else、while 语句的判断表达式后是没有分号的。

【实例】用户输入一个值,从这个值开始,依次与之后的连续若干个自然数相加,当该自然数大于 100 时结束,并输出这若干个自然数的和。这里用到 while 循环,代码如下:
#include<stdio.h>
int main()
{
    int n, sum = 0; /*定义变量 n 表示输入的数据,sum 表示累加和*/
    printf("请输入一个自然数:"); /*输入自然数 n*/
    scanf("%d", &n);
    while(n <= 100) /*使用 while 循环,当 n 小于等于 100 时*/
    {
        sum = sum + n; /*进行累加,并将累加和保存在 sum 中*/
        n++; /*n 自增运算,表示后续一个自然数*/
    }
    printf("结果为:%d\n", sum); /*输出 n~100 的累加和*/
    return 0;
}
执行结果为:

请输入一个自然数:1
结果为:5050

在程序代码中,因为要计算 n~100 的累加结果,所以要定义两个变量,n 表示用户输入的数据,sum 表示累加的和。

使用 while 语句判断 n 是否小于等于 100,如果条件为真,则执行其后语句块中的内容;如果条件为假,则跳过语句块执行后面的内容。当用户输入 90 时,表示 n 的初始值为 90,判断的条件为真,因此执行累加操作。

在 while 语句块中,总和 sum 等于先前计算的总和结果加上现在 n 表示的数字,完成累加操作,n++ 通过自身加 1 操作表示下一个自然数。语句块执行结束后,while 会再次判断新的 n 值。也就是说,“n++;”语句可以使得循环停止。

当 n 大于 100 时,循环操作结束,将结果 sum 输出。

注意,使用 while 语句时,很容易多执行一次或少执行一次循环,这类错误被称为“差一错误”。例如,把“number <= 20”写作“number < 20”,就会少执行一次循环,因此一定要给出正确的循环条件。

C语言do while语句

在有些情况下,不论条件是否满足,循环过程必须执行至少一次,这时可以采用 do while 语句。

do while语句的特点就是先执行循环体语句块中的内容,然后再判断循环条件是否成立。其一般形式如下:
do{
    语句块(循环体)
}while(表达式);
do while 语句的执行流程如下图所示:

图 2 do while语句的执行流程图

do while 语句是这样执行的,首先执行一次循环体语句中的内容,然后判断表达式,当表达式的值为真时,返回重新执行循环体语句,然后再次判断表达式,直到表达式的值为假,此时循环结束。

while 语句和 do while 语句的区别在于,while 语句在每次循环之前检验条件,do while 语句在每次循环之后检验条件。这也可以从两种循环结构的代码上看出来,while 结构中的 while 语句出现在循环体的前面,do while 结构中的 while 语句出现在循环体的后面。

例如下面的代码:
do{
    iNumber++;
}while(iNumber<100);
在上面的代码中,首先执行 iNumber++ 的操作,也就是说,不管 iNumber 是否小于 100,都会执行一次循环体中的内容。然后判断 while 后括号中的内容,如果 iNumber 小于 100,则再次执行循环语句块中的内容;条件为假时,执行后续的程序操作。

注意,在使用 do while 语句时,条件表达式要放在 while 关键字后面的括号中,最后必须加上一个分号(;),这里和 while 语句不同,初学者一定要格外注意。

【实例】计算 n~100 所有数字的累加方法使用的是 while 语句,在本实例中使用 do while 语句实现相同的功能。在程序运行过程中,虽然两者的结果是相同的,但是要了解其中操作的区别。
#include <stdio.h>
int main()
{
    int n, sum = 0; /*定义变量 n 表示输入的数据,sum 表示累加和*/
    printf("请输入一个自然数:"); /*提示输入自然数*/
    scanf("%d", &n); /*读取用户输入的自然数*/
    do {
        sum = sum + n; /*累加输入的自然数*/
        n++; /*n 自增,准备下一次循环*/
    } while (n <= 100); /*当 n 小于等于 100 时继续循环*/
    printf("结果为:%d\n", sum); /*输出累加和*/
    return 0;
}
运行结果为:

请输入一个自然数:1
结果为:5050

在程序中,同样定义 n 表示用户输入的数字,而 sum 表示计算的总和。

do 关键字之后是循环语句,在语句块中进行累加操作,并对 n 变量进行自加操作。语句块下方是 while 语句检验条件,如果检验为真,则继续执行上面的语句块操作;为假时,程序执行下面的代码。

在循环操作完成之后,将结果输出。

相关文章