do...while循环
do…while循环语句和while循环语句功能类似,二者的不同之处在于,while循环语句先判断循环条件,再根据判断结果来决定是否执行大括号中的代码,而do…while循环语句先要执行一次循环体的语句再判断循环条件,其具体语法格式如下:
do
{
执行语句
…
} while(循环条件);
在上面的语法格式中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do…while循环的执行流程如图1所示。
图1 do…while循环的执行流程
下面通过一个案例演示do…while的使用,该案例要求程序实现反转数字的功能,例如,从键盘输入1234,反转输出4321,案例具体实现如例1所示。
例1 dowhile.c
1 #define _CRT_SECURE_NO_WARNINGS
2 #include <stdio.h>
3 int main()
4 {
5 int res, num;
6 printf("请输入num的值:");
7 scanf("%d",&num);
8 do
9 {
10 res = num % 10; //取末尾倒数第一个数
11 printf("%d", res); //输出末尾倒数第一个数
12 num = num / 10; //每去掉末尾一个数之后舍掉该数
13 }while (num != 0);
14 return 0;
15 }
例1运行结果如图2所示。
图2 例1运行结果
在例1中,第5-7行代码定义变量res和num,并调用scanf()函数从键盘输入num的值;第8~13行代码通过do…while循环分解num的数字组成,以不换行的形式打印出来;第10~11行代码使用变量res保存num求余运算后得到的个位数的值,并将该值打印到终端,之后执行第12行代码,去掉数字num的最低位。以上操作执行后,判断num是否不为0,若条件成立,继续执行循环体中的语句,直到num等于0时结束循环。
由图2可知,当输入数据123时,程序输出了反转后的数据321,其反转过程如下:
(1)进入do…while循环;
(2)执行第10行代码,res=num%10=123%10=3;
(3)执行第11行代码,输出res的值,即输出3;
(4)执行第12行代码,num=num/10=123/10=12,执行之后,num的值为12;
(5)执行第13行代码,判断while循环中的条件是否成立,由于num的值为12,因此num!=0成立;
(6)继续执行下一轮循环。
这样直到数据反转完成,while循环不成立,输出321。