C语言while和do while循环详解(附带实例)
在有些时候,可能需要多次执行同一个语句或者语句块。C语言提供了循环结构以达到这个目的,循环结构允许多次执行同一个语句或语句块。
C语言中的循环结构有 3 种,分别是 while 循环、do while 循环和 for 循环。本节主要带大家学习前两种,关于 for 循环,可以阅读《C语言for循环的用法(非常详细)》一文。
while 循环的具体格式如下:
while 循环的特点为:如果 while 语句中的条件一开始就不成立,那么循环体中的语句永远不会被执行。
【实例】通过 while 循环统计 1~100 的和。代码如下:

图 1 程序执行流程图
【实例】输入一行字符(以回车作为结束),分别统计出其中英文字母、空格、数字和其他字符的个数。代码如下:

图 2 执行流程图
编译运行,结果如下:
do while 的语法格式如下:
与 while 循环一样,要确保 do while 循环的循环体部分修改了 condition 中的某个变量,从而改变 condition 的判断结果,能够结束循环,否则循环将永远重复下去,成为“死循环”。
【实例】统计十进制正整数 n 转换为二进制数后,其二进制序列中包含的 1 和 0 的个数。
这个实例相对较难,先理解转换过程。将十进制正整数 n 转换成二进制数,一般采用“除 2 取余,倒序输出”的方法,即用 2 整除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数。如此反复进行,直到商小于 1,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
本例中,n 的初始值取 69,69 一直除以 2,得到的余数逆序排列为 1000101,如下图所示,由此得到 69 转二进制数为 1000101。

图 3 十进制数转二进制数
程序代码如下:

图 4 程序执行流程图
C语言中的循环结构有 3 种,分别是 while 循环、do while 循环和 for 循环。本节主要带大家学习前两种,关于 for 循环,可以阅读《C语言for循环的用法(非常详细)》一文。
C语言while循环
只要给定的条件为真,C 语言中的 while 循环语句就会重复执行一个目标语句。while 循环的具体格式如下:
while ( 条件 )
{
语句1;
语句2;
...
}
具体规定如下:如果条件为真,就会执行循环体中的语句,然后再次判断条件,重复上述过程,直到条件不成立就结束 while 循环。while 循环的特点为:如果 while 语句中的条件一开始就不成立,那么循环体中的语句永远不会被执行。
【实例】通过 while 循环统计 1~100 的和。代码如下:
#include <stdio.h>
const int LOOP = 100;
int main(void)
{
int i=1;
int i_sum = 0; //sum的中文意思是总和
while(i <= LOOP)
{
i_sum += i; /*等价于i_sum = i_sum+i*/
i++; //++为自加, ++i相当于在循环后i = i + 1
}
printf("i_sum = %d\n", i_sum);
return 0;
}
输出结果为:
i_sum = 5050
程序执行的流程图如下图所示:
图 1 程序执行流程图
【实例】输入一行字符(以回车作为结束),分别统计出其中英文字母、空格、数字和其他字符的个数。代码如下:
#include<stdio.h>
int main()
{
char c;
int i_letters=0,i_spaces=0,i_digits=0,i_others=0;
printf("请输入一些字符: \n");
while((c=getchar())!='\n')
{
if((c>='a'&&c<='z')||(c>='A'&&c<='Z'))
i_letters++;
else if(c>='0'&&c<='9')
i_digits++;
else if(c==' ')
i_spaces++;
else
i_others++;
}
printf("字母=%d,数字=%d,空格=%d, 其他=%d\n", i_letters, i_digits, i_spaces, i_others);
return 0;
}
程序的流程图如下:
图 2 执行流程图
编译运行,结果如下:
请输入一些字符:
abc 123
字母=3,数字=3,空格=1,其他=0
C语言do while循环
do while 循环适用于“重复操作直到条件不成立为止”的循环控制结构,因而常被称作直到型循环。do while 的语法格式如下:
do
{
循环体: //一条或多条 C 语句
}while (condition);
do while 循环在执行循环体之后才检查 condition 表达式的值,所以 do while 循环的循环体至少执行一次。与 while 循环一样,要确保 do while 循环的循环体部分修改了 condition 中的某个变量,从而改变 condition 的判断结果,能够结束循环,否则循环将永远重复下去,成为“死循环”。
【实例】统计十进制正整数 n 转换为二进制数后,其二进制序列中包含的 1 和 0 的个数。
这个实例相对较难,先理解转换过程。将十进制正整数 n 转换成二进制数,一般采用“除 2 取余,倒序输出”的方法,即用 2 整除十进制整数,可以得到一个商和余数;再用 2 去除商,又会得到一个商和余数。如此反复进行,直到商小于 1,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
本例中,n 的初始值取 69,69 一直除以 2,得到的余数逆序排列为 1000101,如下图所示,由此得到 69 转二进制数为 1000101。

图 3 十进制数转二进制数
程序代码如下:
#include <stdio.h>
int main( )
{
int i_a=69, i_s1=0, i_s0=0;
do
{
if(i_a%2==1)
i_s1++; //余数为1,则s1加1
else
i_s0++; //余数为0,则s0加1
i_a/=2; //i_a= i_a /2
}
while(i_a!= 0); //非0,则重复 “除2取余” 转换
printf("二进制序列中1的个数是: %d\n", i_s1);
printf("二进制序列中0的个数是: %d\n", i_s0);
return 0;
}
编译运行,结果如下:
二进制序列中1的个数是: 3
二进制序列中0的个数是: 4

图 4 程序执行流程图
ICP备案:
公安联网备案: