C程序设计基础(3):基本循环结构语句(for、while、do)

  上一节中,我们学习了C语言中的基本分支结构语句(if/switch)和表达式(结构、逻辑运算符等)。近期出现的作业中常常出现多个重复(或相似)流程的情况,需要用到循环结构以缩短代码长度。下面,我们就来了解一下C语言中的基本循环结构语句(for/while/do),相关特殊用法,解决使用过程中的有关问题。

Basic loop


循环结构

  循环语句使一段程序段(被称为循环体),在一个条件(循环条件)满足的情况下,重复执行,直到条件不被满足。在循环体完成一次loop(循环)前后(取决于循环结构语句),进行表达式的判断,只有判断为真,才能进入下一次loop
下图展示了循环结构语句的一种结构(while)

Loop structure


表达式

有关表达式的内容,请参见:

C程序设计基础(2):基本分支结构语句(if switch)和表达式(逻辑运算符)


循环结构语句

  对于以下所有语句,如果循环体只有一条语句,可以不加大括号,如果多条,则必须加。任何缩进的包含暗示对C编译器无效,详见第二节条件判断语句。

while循环

while循环的语法:

while (expression)
{
    do-something;
}

其中,

  • expression: 循环条件表达式,只有条件成立时才能执行下面语句
  • {}: 循环体,整个大括号内的内容在一次loop时都会执行一次,如果只有一条语句,则可以不加大括号

while循环运行时,在循环体被第一次执行前,会进行一次循环条件判断,如果一开始条件就不满足,则循环体不会被执行。每次循环体运行结束后,会再次进行循环条件判断,如果循环条件表达式仍被满足,则继续进行下一次循环体loop,如果不满足,则退出进入下一语句。注:在循环体执行过程中,不需要考虑循环条件是否满足,不会中途发生判断并退出循环

do-while循环

do-while循环的语法:

do
{
    do-something;
} while (expression);
  • 注意:while后有一个分号,表示整个do语句结束

do-while循环语句和while循环语句差别不大,唯一(几乎?)的区别是,while循环在循环体执行前先进行循环条件判断,如果不满足,则直接退出;do-while语句首先执行一次循环体,无论循环条件一开始是否成立,循环体都至少执行了一次

for 循环

for循环是C语言中最重要的循环结构语句,一般情况下可替代其他循环结构语句

for循环的语法:

for (initialize(); expression; next())
{
    do-something;
}

其中,

  • initialize(): 初始化语句,将在程序还没开始前执行一次可多个,用逗号分隔
  • expression: 循环判断表达式
  • next(): 迭代语句,在每次执行完一次循环体(或执行continue语句)后,会执行一次,可多个,用逗号分隔
运行过程
  1. 执行初始化语句,仅执行一次,以后不会执行
  2. 判断循环表达式是否成立,如果不成立,直接退出
  3. 如果循环表达式成立,就运行循环体
  4. 循环体执行过程中执行到break语句,直接退出循环
  5. 循环体运行完成(或遇到continue语句),执行一次迭代语句
  6. 判断循环表达式是否成立,如果不成立,直接退出
循环内变量

C99标准允许在循环初始化语句中声明循环变量,这个变量作用范围仅限于循环语句,外部无法调用,这为变量声明和命名带来了方便。例如,

int t;
for (int i = 0; i < 10; i++)
{
    printf("%d", i);
    printf("\n");
    for (int j = 0; j < 10 - i; j++)
        t = i + j;
}
//这里使用i,报错“未声明变量i”

变量i只在循环内有定义,并能在循环嵌套的内层循环中使用,但不能在循环外被使用,想要在外面使用,需要在循环外声明变量,而不是在初始化语句中。

初始化、迭代语句

初始化和迭代语句都支持多语句,只需要在两个语句中间使用逗号分隔,从左向右执行。

for (int i = 0, int j = 1; i + j < 10; i++, j += 2)
{
    do-something;
}

如果不需要执行语句,可以将对应部分置空。注意:分隔符;必须保留

for (int i = 1; i < 1024;) i *= 2;
//在循环体结束后不会进行迭代语句,直接进入条件判断

循环体中的循环控制语句

某些情况下,我们在循环体中可能遇到需要进行条件判断,一个分支直接跳出循环或进入下一迭代的情况。这时候,我们就需要循环体中的循环控制语句。

continue

continue语句被执行时,将直接使循环体执行结束,视为执行一次,进行下一次迭代和循环条件判断。

示例:(以下两段程序的执行结果相同,仅作为示例使用)

for (int i = 0; i < 10; i++)
{
    if (i % 2) continue;  //如果i不能被2整除,则进入下一循环,不输出
    printf("%d\n", i); //输出
}

//等效于
for (int i = 1; i < 10; i+=2)
    printf("%d\n", i);

break

break语句被执行时,将直接退出循环,进入循环语句的下一语句

示例:(以下两段程序的执行结果相同,仅作为示例使用)

for (int i = 0; i < 10; i++)
{
    if (i == 5) break; //如果i=5, 直接跳出循环
    printf("%d\n", i); //输出
}

//等效于
for (int i = 0; i < 5; i++)
    printf("%d\n", i);
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值