目录
1、编写程序,使用do-while循环计算用户输入数字的各位数字之和
2、实现一个简单的菜单系统,使用do-while循环直到用户选择退出
3、输入一组数字,使用do-while循环统计正数和负数的个数(以0作为输入结束标志)
一、语法形式
do-while循环是C语言中三种循环结构之一,其基本语法格式如下:
cpp
do {
循环体语句;
} while (表达式);
二、执行流程与特点
do-while循环具有以下特点:
-
先执行后判断:与while和for循环不同,do-while会先执行循环体,然后再判断条件
-
至少执行一次:无论条件是否满足,循环体至少会执行一次
-
执行流程:
-
执行循环体语句
-
计算while后的表达式
-
若表达式结果为真(非0),则继续循环
-
若表达式结果为假(0),则退出循环
-
流程图表示:

三、典型应用场景
do-while循环特别适合以下情况:
-
需要至少执行一次的操作
-
循环条件依赖于循环体内操作结果的情况
-
用户交互场景(如菜单选择)
四、实例演示
实例1:打印1~10的值
cpp
#include <stdio.h>
int main()
{
int i = 1;
do {
printf("%d ", i);
i++;
} while(i <= 10);
return 0;
}

实例2:计算整数位数
cpp
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do {
cnt++;
n /= 10;
} while (n != 0);
printf("%d\n", cnt);
return 0;
}
说明:这个例子特别适合使用do-while,因为:
-
任何整数至少有一位(包括0)
-
循环条件(n != 0)依赖于循环体内的操作(n /= 10)
五、注意事项
-
while后面的分号不能省略
-
避免创建无限循环(确保循环条件最终会变为假)
-
可以使用break和continue控制流程(与while循环相同)
六、练习题目
1、编写程序,使用do-while循环计算用户输入数字的各位数字之和
cpp
#include <stdio.h>
int main() {
int num, sum = 0, digit;
printf("请输入一个整数:");
scanf("%d", &num);
// 处理负数情况
if (num < 0) {
num = -num;
}
do {
digit = num % 10; // 获取最后一位数字
sum += digit; // 累加到总和
num /= 10; // 去掉最后一位
} while (num > 0);
printf("各位数字之和为:%d\n", sum);
return 0;
}
说明:
-
使用
do-while
确保至少执行一次(即使是0也能正确处理) -
先处理负数情况,转换为正数计算
-
通过
%10
获取最后一位,/10
去掉最后一位
2、实现一个简单的菜单系统,使用do-while循环直到用户选择退出
cpp
#include <stdio.h>
int main() {
int choice;
do {
printf("\n===== 菜单系统 =====\n");
printf("1. 选项一\n");
printf("2. 选项二\n");
printf("3. 选项三\n");
printf("0. 退出\n");
printf("请选择:");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("执行选项一操作\n");
break;
case 2:
printf("执行选项二操作\n");
break;
case 3:
printf("执行选项三操作\n");
break;
case 0:
printf("感谢使用,再见!\n");
break;
default:
printf("无效选项,请重新选择!\n");
}
} while (choice != 0);
return 0;
}
说明:
-
典型的
do-while
应用场景,确保至少显示一次菜单 -
使用
switch-case
处理不同选项 -
输入0时退出循环
3、输入一组数字,使用do-while循环统计正数和负数的个数(以0作为输入结束标志)
cpp
#include <stdio.h>
int main() {
int num, positive = 0, negative = 0;
printf("请输入一组整数(输入0结束):\n");
do {
scanf("%d", &num);
if (num > 0) {
positive++;
} else if (num < 0) {
negative++;
}
} while (num != 0);
printf("正数个数:%d\n", positive);
printf("负数个数:%d\n", negative);
return 0;
}
说明:
-
使用
do-while
确保至少读取一次输入 -
0作为循环终止条件
-
分别统计正数和负数数量
七、与其他循环的比较
特性 | while | for | do-while |
---|---|---|---|
先判断后执行 | ✓ | ✓ | ✗ |
至少执行一次 | ✗ | ✗ | ✓ |
适合已知循环次数 | ✗ | ✓ | ✗ |
适合未知循环次数 | ✓ | ✗ | ✓ |
通过理解这些差异,可以选择最适合特定场景的循环结构。