C 语言编程教程

C 语言首页

C 语言基础

C 语言概述 C 语言特性 C 语言发展历史 C 语言下载安装和环境配置 C 语言程序结构 C 语言 Hello World C 编译过程 C 注释 C 标记 C 关键字 C 标识符 C 用户输入 C 基本语法 C 数据类型 C 变量 C 整数提升 C 类型转换 C 类型转换 C 布尔值

C 语言中的常量和文字

C 常量 C 字面量 C 转义序列 C 格式说明符

C 语言中的运算符

C 运算符 C 算术运算符 C 关系运算符 C 逻辑运算符 C 位运算符 C 赋值运算符 C 一元运算符 C 递增和递减运算符 C 三元运算符 C sizeof 运算符 C 运算符优先级 C 其他运算符

C 语言中的决策

C 决策 C if 语句 C if...else 语句 C 嵌套 if 语句 C switch 语句 C 嵌套 switch 语句

C 语言中的循环

C 循环 C While 循环 C For 循环 C Do...while 循环 C 嵌套循环 C 无限循环 C Break 语句 C Continue 语句 C goto 语句

C 语言中的函数

C 函数 C Main 函数 C 按值调用函数 C 按引用调用函数 C 嵌套函数 C 可变参数函数 C 用户定义函数 C 回调函数 C return 语句 C 递归

C 语言中的作用域规则

C 作用域规则 C 静态变量 C 全局变量

C 语言中的数组

C 数组 C 数组的属性 C 多维数组 C 将数组传递给函数 C 从函数返回数组 C 可变长度数组

C 语言中的指针

C 指针 C 指针和数组 C 指针的应用 C 指针运算 C 指针数组 C 指向指针的指针 C 将指针传递给函数 C 从函数返回指针 C 函数指针 C 指向数组的指针 C 指向结构体的指针 C 指针链 C 指针 vs 数组 C 字符指针和函数 C NULL 指针 C void 指针 C 悬垂指针 C 解引用指针 C Near、Far 和 Huge 指针 C 指针数组的初始化 C 指针与多维数组

C 语言中的字符串

C 字符串 C 字符串数组 C 特殊字符

C 语言的结构体和联合

C 结构体 C 结构体和函数 C 结构体数组 C 自引用结构 C 查找表 C 点 (.) 运算符 C 枚举(或 enum) C 结构填充和打包 C 嵌套结构 C 匿名结构和联合 C 联合 C Bit 位字段 C Typedef

C 语言中的文件处理

C 输入和输出 C 文件 I/O(文件处理)

C 语言中的预处理器

C 预处理器 C #pragma 编译指示 C 预处理器操作符 C 宏 C 头文件

C 语言中的内存管理

C 内存管理 C 内存地址 C 存储类

C 其他主题

C 错误处理 C 可变参数 C 命令执行 C 数学函数 C static 静态关键字 C 随机数生成 C 命令行参数

C 语言编程资源

C 语言问题与解答答案 C 语言快速指南 C 语言速查表 C 语言实用资源 C 语言讨论


C 语言中的 Do-While 循环

do-while 循环是 C 语言中最常用的循环类型之一。do 和 while 关键字一起使用可以形成一个循环。do-while 循环是一种退出验证循环,在执行完循环体后会检查测试条件。而 while 循环 是一种进入验证循环。另一方面,for 循环 是一个自动循环。

do while 循环的语法

C 语言中 do-while 循环的语法为 -

do {
   statement(s);
} while(condition);

while 循环如何工作?

循环结构以关键字 do 开头。之后是花括号内的语句块。关键字 while 跟在右花括号后面。while 前面有一个括号,括号内应包含一个布尔表达式。

现在让我们了解 while 循环的工作原理。当 C 编译器 遇到 do 关键字时,程序控制将进入并执行花括号标记的代码块。到达代码块末尾时,将对 while 关键字前面的表达式进行求值。

如果表达式为真,程序控制将返回到循环顶部。如果表达式为假,编译器将停止返回循环块顶部,并继续执行该块之后的下一个语句。注意,while 语句末尾有一个分号。

do while 循环流程图

以下流程图展示了 do-while 循环的工作原理 -

C 语言中的 do...while 循环

由于在程序首次运行循环块后会测试控制循环的表达式,因此 do-while 循环被称为"退出验证循环"。这里需要注意的关键点是,do-while 循环确保循环至少执行一次。

while 关键字表示只要表达式为真,编译器就会继续执行接下来的块。但是,由于条件位于循环结构的末尾,因此每次迭代后都会检查条件(而不是像 while 循环那样在每次迭代之前检查)。

程序无条件执行第一次迭代,然后测试条件。如果条件为真,编译器将执行下一次迭代。一旦表达式为假,循环体将被跳过,并执行 while 循环后的第一个语句。

让我们通过几个示例来理解 while 循环的行为。

do while 循环示例

以下程序打印了五次 Hello world 消息。

#include <stdio.h>
 
int main(){

   // 局部变量定义
   int a = 1;

   // while 循环执行
   do{
      printf("Hello World
");
      a++;
   } while(a <= 5);
   printf("End of loop"); 
   
   return 0;
}

输出

此处,do-while 循环充当计数循环。运行代码并检查其输出 -

Hello World
Hello World
Hello World
Hello World
Hello World
End of loop

控制循环次数的变量"a"初始化为1。程序无条件进入循环,打印消息,并将"a"加1。

当循环结束时,将测试while语句中的条件。由于条件"a <= 5"为真,程序返回循环顶部并重新进入循环。

现在"a"为2,因此条件仍然为真,因此循环再次重复,直到条件变为假。循环停止,程序控制转到该块的下一步。

现在,将"a"的初始值更改为10,然后再次运行代码。它将产生以下输出 -

Hello World
End of loop

这是因为程序无条件地进入循环块。由于 while 关键字之前的条件为 false,因此该块不会在下一次重复执行。因此,do-while 循环至少需要一次迭代,因为测试条件位于循环的末尾。因此,do-while 循环被称为"退出验证循环"。

while 循环和 do-while 循环之间的区别

用 while 和 do-while 构造的循环看起来相似。您可以轻松地将 while 循环转换为 do-while 循环,反之亦然。然而,两者之间存在一些关键区别。

明显的语法差异在于,do-while 循环以 do 关键字开头,以 while 关键字结尾。而 while 循环不需要 do 关键字。其次,在 do-while 循环中,while 前面有一个分号。而 while 循环中没有分号。

示例

控制循环的测试条件的位置是两者之间的主要区别。while 循环的测试条件位于开头,而 do-while 循环的测试条件位于结尾。这如何影响循环行为?请看以下代码:

#include <stdio.h>
 
int main(){

   // 局部变量定义
   int a = 0, b = 0; 

   // while 循环执行
   printf("Output of while loop: 
");
   
   while(a < 5){
      a++;
      printf("a: %d
", a);
   }

   printf("Output of do-while loop: 
");
   
   do{
      b++;
      printf("b: %d
",b);
   } while(b < 5);

   return 0;
}

输出

最初,"a"和"b"被初始化为"0",并且两个循环的输出相同。

Output of while loop:
a: 1
a: 2
a: 3
a: 4
a: 5

Output of do-while loop:
b: 1
b: 2
b: 3
b: 4
b: 5

现在将两个变量的初始值都改为 3,然后再次运行代码。两个循环的输出都没有变化。

Output of while loop:
a: 4
a: 5

Output of do-while loop:
b: 4
b: 5

现在将两个变量的初始值都改为 10,然后再次运行代码。在这里,您可以观察到两个循环之间的区别 -

Output of while loop:

Output of do-while loop:
b: 11

请注意,while 循环不会进行任何迭代,但 do-while 循环会执行一次其循环体。这是因为在 while 循环中,循环条件在循环块顶部进行验证,由于条件为假,程序不会进入循环。

在 do-while 循环中,程序无条件进入循环,将"b"递增至 11,然后由于条件为假而不再重复执行。这表明,无论循环变量的初始值如何,do-while 都能保证至少执行一次循环。

do-while 循环也可用于构造条件循环。您还可以在 do-while 循环中使用 break 和 continue 语句。

c_loops.html