←

C 语言程序设计 · C语言

循环结构程序设计

循环结构程序设计

结构化讲义

S1-5 · 4 个大纲考点讲义 · 已精编

练本节题目

S1-5.1

for 循环结构。

精编讲义 v1#

for (表达式1; 表达式2; 表达式3) 执行顺序与省略规则

必记
  1. 先求解一次 表达式1(循环变量赋初值,整个循环只执行 1 次)。
  2. 求解 表达式2(循环条件):若为真(非 0),则执行循环体语句,然后转第 3 步;若为假(0),立即结束循环。
  3. 每次循环体执行完毕后,求解 表达式3(循环变量步进更新),随后回到第 2 步继续判断表达式2。
  4. 三个表达式均可省略,但两个分号 ; 绝对不能省:省略表达式2时条件默认恒为真(如 for (;;) 构成无限循环,需靠内部 break 退出)。

for 循环条件中的赋值号与末尾分号陷阱

必记

易错陷阱

① 条件写赋值号:如 for (i = 0; i = 0; i++),表达式2为赋值表达式 i = 0(值为 0 即假),循环体 1 次也不执行;若写 for (i = 0; i = 1; i++) 则表达式2恒为 1,变成死循环。<br>② 括号后误加分号:如 for (i = 0; i < 5; i++); printf("%d", i);,分号使循环体为空语句,空转 5 次后退出循环时 i 变为 5,最后仅打印一次 5。

随堂自测(3 题 · 共 152 道关联题)展开作答
单选2 分自测不计入学习进度

27对for(表达式1; ;表达式3)可理解为______。

综合6 分自测不计入学习进度

计算 1!-2!+3!-4!+…-10!

单选2 分自测不计入学习进度

有一个程序段,其功能是画一个圆。如果调用该程序段画 50 个圆, 则适合采用的算法结构是 ( )。

S1-5.2

while 和 do-while 循环结构。

精编讲义 v1#

while 与 do-while 循环结构核心对比

必记
对比维度while (表达式) 循环体do { 循环体 } while (表达式);
执行先后顺序先判断条件,后执行循环体(当型循环)先执行一次循环体,后判断条件(直到型循环)
最少执行次数初始条件为假时,循环体执行 0 次无论初始条件真假,循环体至少执行 1 次
末尾分号要求while (表达式) 圆括号后不能加分号(否则成空语句)do { ... } while (表达式); 末尾分号 ; 绝对不能省略
循环次数关系当第一次判断条件为真时,两者执行效果与次数相同当第一次判断条件为假时,do-while 比 while 多执行 1 次

while 条件带后置自减的求值追踪

重点
c
#include <stdio.h>

int main(void) {
    int n = 3, count = 0;
    while (n--) {             /* 依次用 3, 2, 1 判断为真进入循环;最后用 0 判断为假后 n 变为 -1 */
        count++;
    }
    printf("count=%d, n=%d\n", count, n); /* 输出 count=3, n=-1 */
    return 0;
}
随堂自测(3 题 · 共 199 道关联题)展开作答
单选2 分自测不计入学习进度

15 以下能正确计算10!的程序段是______。

填空2 分自测不计入学习进度

62下面程序的运行结果是______。 #include<stdio.h> main() {int a,s,n,count; a=2;s=0;n=1;count=1; while(count<=7) {n=n*a;s=s+n;++count;} printf("s=%d\n",s); }

填空2 分自测不计入学习进度

64 执行下面程序段后,k值是______。 k=1;n=263; do{k*=n%10;n/=10;}while(n);

S1-5.3

continue 语句和 break 语句。

精编讲义 v1#

break 与 continue 语句全方位对比(高频必考)

必记
对比项break 语句continue 语句
适用范围可用于 循环结构(for/while/do-while)和 switch 语句只能用于循环结构,绝不能单独用于 switch 或 if
执行效果立即终止并跳出当前整层循环(或跳出当前 switch)仅跳过本轮循环体剩余未执行的语句,直接开启下一轮循环
在 for 中的跳转目标直接跳到 for 循环结构之后的第一条语句先跳转到 表达式3(步进更新),再判断 表达式2
在 while / do-while 中直接跳出当前循环直接跳转到 while (表达式) 条件判断处(若步进写在 continue 之后会造成死循环)

for 循环中 continue 与 break 效果对比

重点
c
#include <stdio.h>

int main(void) {
    int i, sum = 0;
    for (i = 1; i <= 5; i++) {
        if (i == 2) continue; /* 跳过 i=2,直接去执行 i++ 进入 i=3 */
        if (i == 4) break;    /* 当 i=4 时直接终止整个 for 循环 */
        sum += i;
    }
    printf("sum=%d, i=%d\n", sum, i); /* sum = 1 + 3 = 4, i = 4 */
    return 0;
}
随堂自测(3 题 · 共 91 道关联题)展开作答
填空2 分自测不计入学习进度

以下程序的功能是求10个数中的正整数之和,请补全程序。 #include "stdio.h" main() {int s=0,i,j; for(i=0;i<10;i++) {scanf("%d",&j); if(j<=0) ____; s+=j;} printf("和=%d",s); }

填空2 分自测不计入学习进度

循环体内,能够强制从循环中退出,执行循环语句的后续部分程序的语句是 “____;”。

判断1 分自测不计入学习进度

在程序设计时,需要完全避免使用 GOTO 语句。

S1-5.4

循环的嵌套。

精编讲义 v1#

多重循环执行次数与内层 break 作用范围

必记
  • 执行规律:外层循环变量每变化 1 次,内层循环就要完整地从头到尾执行 1 轮。若外层执行 $M$ 次、内层独立执行 $N$ 次,则内层循环体总共执行 $M \times N$ 次。
  • 内层与外层耦合:若内层循环的初值或条件依赖外层变量(如 for (i = 0; i < 4; i++) for (j = i; j < 4; j++)),需逐轮列表累加(如 $4 + 3 + 2 + 1 = 10$ 次)。
  • 嵌套中的 break 与 continue:内层循环中的 break 只能跳出内层循环本身,外层循环仍会继续进入下一轮!

二重循环嵌套与内层 break 计数示例

重点
c
#include <stdio.h>

int main(void) {
    int i, j, cnt = 0;
    for (i = 1; i <= 3; i++) {
        for (j = 1; j <= 3; j++) {
            if (j > i) break; /* 仅退出内层 j 循环,外层 i 继续下一轮 */
            cnt++;
        }
    }
    printf("cnt=%d\n", cnt);  /* i=1 计1次, i=2 计2次, i=3 计3次,共 6 次 */
    return 0;
}
随堂自测(3 题 · 共 51 道关联题)展开作答
判断1 分自测不计入学习进度

循环结构可以嵌套,但最多嵌套三层。

判断1 分自测不计入学习进度

一个循环的循环体中套有另一个循环称为循环嵌套定义,一个循环外面仅包围一层循环称为循环嵌套调用。

判断1 分自测不计入学习进度

C语言的三种循环不可以互相嵌套。