目录
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 | 
|---|---|---|---|
| 先判断后执行 | ✓ | ✓ | ✗ | 
| 至少执行一次 | ✗ | ✗ | ✓ | 
| 适合已知循环次数 | ✗ | ✓ | ✗ | 
| 适合未知循环次数 | ✓ | ✗ | ✓ | 
通过理解这些差异,可以选择最适合特定场景的循环结构。