C语言while和do while循环用法详解(附带实例)
程序在运行时可以通过判断、检验条件做出选择,帮我们解决许多问题。此处,程序还必须能够重复,也就是能反复执行一段指令,直到满足某个条件为止,这种重复的过程就称为循环。
C语言中有 3 种循环语句,即 while、do while 和 for 循环语句,本节重点介绍前两种循环语句的用法。

图 1 while 语句的执行流程图
while 语句首先检验一个条件,也就是括号中的表达式。当条件为真时,就执行紧跟其后的循环体语句或者语句块。每执行一遍循环,程序都将回到 while 语句处,重新检验条件是否满足。
如果一开始条件就不满足,则跳过循环体中的语句,直接执行后面的程序代码。如果第一次检验时条件满足,那么在第一次或其后的循环过程中,必须得有使条件为假的操作,否则循环将无法终止。
在循环语句块中,可以看到对其中的变量进行加 1 的运算,这里的加 1 运算就是循环结构中使条件为假的操作,也就是使得 iSum 不小于 100,否则程序会一直循环下去。
初学者很容易在 while 语句后添加英文分号(;),从而导致编译报错。一定要注意,if、if else、while 语句的判断表达式后是没有分号的。
【实例】用户输入一个值,从这个值开始,依次与之后的连续若干个自然数相加,当该自然数大于 100 时结束,并输出这若干个自然数的和。这里用到 while 循环,代码如下:
使用 while 语句判断 n 是否小于等于 100,如果条件为真,则执行其后语句块中的内容;如果条件为假,则跳过语句块执行后面的内容。当用户输入 90 时,表示 n 的初始值为 90,判断的条件为真,因此执行累加操作。
在 while 语句块中,总和 sum 等于先前计算的总和结果加上现在 n 表示的数字,完成累加操作,n++ 通过自身加 1 操作表示下一个自然数。语句块执行结束后,while 会再次判断新的 n 值。也就是说,“n++;”语句可以使得循环停止。
当 n 大于 100 时,循环操作结束,将结果 sum 输出。
注意,使用 while 语句时,很容易多执行一次或少执行一次循环,这类错误被称为“差一错误”。例如,把“number <= 20”写作“number < 20”,就会少执行一次循环,因此一定要给出正确的循环条件。
do while语句的特点就是先执行循环体语句块中的内容,然后再判断循环条件是否成立。其一般形式如下:

图 2 do while语句的执行流程图
do while 语句是这样执行的,首先执行一次循环体语句中的内容,然后判断表达式,当表达式的值为真时,返回重新执行循环体语句,然后再次判断表达式,直到表达式的值为假,此时循环结束。
while 语句和 do while 语句的区别在于,while 语句在每次循环之前检验条件,do while 语句在每次循环之后检验条件。这也可以从两种循环结构的代码上看出来,while 结构中的 while 语句出现在循环体的前面,do while 结构中的 while 语句出现在循环体的后面。
例如下面的代码:
注意,在使用 do while 语句时,条件表达式要放在 while 关键字后面的括号中,最后必须加上一个分号(;),这里和 while 语句不同,初学者一定要格外注意。
【实例】计算 n~100 所有数字的累加方法使用的是 while 语句,在本实例中使用 do while 语句实现相同的功能。在程序运行过程中,虽然两者的结果是相同的,但是要了解其中操作的区别。
do 关键字之后是循环语句,在语句块中进行累加操作,并对 n 变量进行自加操作。语句块下方是 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
使用 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
do 关键字之后是循环语句,在语句块中进行累加操作,并对 n 变量进行自加操作。语句块下方是 while 语句检验条件,如果检验为真,则继续执行上面的语句块操作;为假时,程序执行下面的代码。
在循环操作完成之后,将结果输出。