内容正文:
山东省计算机类高考技能教学
循环结构程序设计
一、教学目标
【知识目标】
1.理解 while 循环、do…while 循环和 for 循环的语法格式及执行流程
2.掌握循环语句的语法格式及关键组成部分
3.掌握多重循环的语法格式及执行流程
【能力目标】
1. 能根据需求选择合适的循环结构
2. 能独立编写含循环的简单程序(如累加、计数)
【素养目标】
1. 培养逻辑思维与问题分解能力
2. 建立调试程序的耐心与严谨性
二、基本知识讲解
while 循环
语法格式:
while (条件表达式) {
循环体语句;
}
说明:
· 条件表达式:可以是关系表达式(如 i < 10)、逻辑表达式(如 i < 10 && j > 5)或数值表达式(非 0 视为真,0 视为假)。
· 循环体语句:若只有一条语句,可省略大括号 {};若有多条语句,必须用大括号包裹。
执行流程:
① 先判断 条件表达式 的真假。
② 若条件为真,执行循环体语句,然后返回步骤 1 继续判断。
③ 若条件为假,跳出循环,执行循环后的下一条语句。
特点:先判断,后执行。若初始条件不满足,循环体可能一次都不执行。
关键组成部分
条件表达式(必选):
· 作用:控制循环是否继续执行,结果为真(非 0)时执行循环体,为假(0)时跳出循环。
· 示例:i < 10(关系表达式)、i < 10 && j > 5(逻辑表达式)、a(若a≠0则为真)。
循环体语句(可选):
· 作用:重复执行的代码块。
do…while 循环
语法格式:
do {
循环体语句;
} while (条件表达式);
说明:
· 结尾的 while (条件表达式); 后必须加 ;,否则编译报错。
· 循环体结构与 while 循环一致。
执行流程:
① 先执行一次循环体语句。
② 判断 条件表达式 的真假。
③ 若条件为真,返回步骤 1 继续执行循环体;若条件为假,跳出循环。
特点:先执行,后判断。无论条件是否满足,循环体至少执行一次。
关键组成部分
循环体语句(必选):
· 作用:先于条件判断执行一次,确保循环至少执行一次。
条件表达式(必选):
· 作用:循环体执行后判断条件,决定是否继续循环。
for 循环
语法格式:
for (表达式1; 条件表达式; 表达式2) {
循环体语句;
}
说明:
· 表达式1:初始化变量(如 int i = 0;),可省略,但分号 ; 不能省。
· 条件表达式:判断循环是否继续(如 i < 10),若省略则视为条件恒真。
· 表达式2:更新变量(如 i++),可省略。
执行流程:
① 执行 表达式1(仅执行一次)。
② 判断 条件表达式 的真假。
③ 若条件为真,执行循环体语句,然后执行 表达式2,再返回步骤 2。
④ 若条件为假,跳出循环。
特点:初始化、条件判断、变量更新集中在一行,结构清晰,适合已知循环次数的场景。算符的关键特性。
关键组成部分
· 表达式 1(初始化表达式,可选):
作用:初始化循环变量(如int i = 0;),仅在循环开始时执行一次。
省略场景:若变量已在循环外初始化(如int i = 1; for (; i<=10; i++))。
· 条件表达式(必选):
作用:每次循环前判断是否继续执行,与 while 循环的条件表达式逻辑相同。
省略场景:若需构造无限循环(如for (; ; ) { ... },需手动用break跳出)。
· 表达式 2(更新表达式,可选):
作用:循环体执行后更新变量(如i++、i += 2),控制循环次数。
省略场景:更新操作在循环体内完成(如for (i=1; i<=10; ) { sum += i; i++; })。
三种循环的对比表格
循环类型
语法结构
执行顺序
循环体最少执行次数
适用场景
while 循环
while(条件) { 语句; }
先判断后执行
0 次
条件驱动的不确定次数循环
do…while 循环
do { 语句; } while(条件);
先执行后判断
1 次
至少需要执行一次的循环
for 循环
for(初始化; 条件; 更新) { 语句; }
先初始化再判断
0 次(条件不满足时)
已知次数或计数型的循环
示例:计算 1+2+3+…+10 的和。
// while 循环实现
#include <stdio.h>
int main() {
int i = 1, sum = 0;
while (i <= 10) {
sum += i;
i++;
}
printf("while循环结果:%d
", sum);
return 0;
}
// do…while 循环实现
#include <stdio.h>
int main() {
int i = 1, sum = 0;
do {
sum += i;
i++;
} while (i <= 10);
printf("do-while循环结果:%d
", sum);
return 0;
}
// for 循环实现
#include <stdio.h>
int main() {
int i, sum = 0;
for (i = 1; i <= 10; i++) {
sum += i;
}
printf("for循环结果:%d
", sum);
return 0;
}
· while 循环:先判断 i<=10,再累加 i。
· do…while 循环:先累加 i=1,再判断 i<=10。
· for 循环:i 从 1 开始,每次累加后更新 i++,直到 i>10 结束。
多重循环的定义与作用
多重循环指在一个循环结构的循环体中嵌套另一个循环结构,通常用于解决需要 “多层重复执行” 的问题(如打印二维表格、矩阵运算、穷举搜索等)。常见形式包括:
· 双重循环:外层循环嵌套内层循环(最常用)。
· 三重及以上循环:多层嵌套(复杂问题中使用)。
多重循环的语法格式(以双重循环为例):
· while 循环嵌套 while 循环
while (外层循环条件) {
// 外层循环体
while (内层循环条件) {
// 内层循环体(含操作语句)
内层循环变量更新;
}
外层循环变量更新;
}
· for 循环嵌套 for 循环
for (外层循环初始化; 外层循环条件; 外层循环变量更新) {
// 外层循环体
for (内层循环初始化; 内层循环条件; 内层循环变量更新) {
// 内层循环体(含操作语句)
}
}
· do…while 循环嵌套 for 循环
do {
// 外层循环体
for (内层循环初始化; 内层循环条件; 内层循环变量更新) {
// 内层循环体(含操作语句)
}
外层循环变量更新;
} while (外层循环条件);
多重循环的执行流程(以双重循环为例)
· 外层循环执行逻辑:
先初始化外层循环变量(如for循环的初始化表达式)。
检查外层循环条件,若为真则进入外层循环体。
外层循环体执行完毕后,更新外层循环变量,再次检查条件,直至条件为假时退出外层循环。
· 内层循环执行逻辑(嵌套在外层循环体内):
每次进入外层循环体时,内层循环会重新初始化变量(如for循环的内层初始化表达式)。
检查内层循环条件,若为真则执行内层循环体,直至内层条件为假时退出内层循环,回到外层循环体的后续步骤。
完整执行流程示例(以 for 嵌套 for 循环为例):
for (int i = 1; i <= 3; i++) { // 外层循环:i从1到3
printf("外层循环i=%d开始
", i);
for (int j = 1; j <= 2; j++) { // 内层循环:j从1到2
printf(" 内层循环j=%d
", j);
}
printf("外层循环i=%d结束
", i);
}
执行顺序:
i=1 → 进入外层循环体 → 初始化j=1 → 检查j<=2为真 → 执行内层循环体(打印j=1)→ j=2 → 执行内层循环体(打印j=2)→ j=3 → 内层条件为假,退出内层循环 → 外层更新i=2 → 重复上述流程,直至i=4时外层条件为假,结束循环。
多重循环的关键组成部分
· 循环变量隔离:
外层与内层循环变量需使用不同名称(如外层用i,内层用j),避免变量冲突。
示例:错误写法for (int i=1; i<=5; i++) { for (int i=1; i<=3; i++) { ... } }(内层i会覆盖外层i)。
· 循环条件控制:
外层循环控制 “大循环次数”,内层循环控制 “每轮大循环中的小循环次数”。
例:打印 3 行 2 列的表格,外层循环控制行数(3 次),内层循环控制列数(2 次 / 行)。
· 循环变量更新:
内层和外层循环变量均需在合适位置更新,避免死循环。
例:while (i<10) { while (j<5) { j++; } i++; }(内外层变量均需更新)。
多重循环的执行次数计算:
若外层循环执行m次,内层循环每次执行n_i次(i为外层循环的第i轮),则总执行次数为n_1 + n_2 + ... + n_m。
特例:内层次数固定(如外层循环m次,内层每次循环n次),总次数为m × n。
例:外层i从1到3(3 次),内层j从1到2(2 次 / 轮),总次数为3×2=6次(见前例执行流程)。
三、例题讲解
1.输入一个正整数 n,使用 while 循环计算 n 的阶乘(即 n! = 1×2×3×...×n)。例如:
输入 5,输出 120(5! = 1×2×3×4×5 = 120)
输入 0,输出 1(0! = 1,数学定义)
#include <stdio.h>
int main() {
int n, i = 1;
long long result = 1; // 使用long long避免大数溢出
printf("请输入一个非负整数: ");
scanf("%d", &n);
// 处理n为负数的情况
if (n < 0) {
printf("负数没有阶乘!
");
return 1;
}
// while循环计算阶乘
while (i <= n) {
result *= i; // 等价于 result = result * i
i++; // 计数器递增
}
printf("%d! = %lld
", n, result);
return 0;
}
2.输入正整数 n,使用 for 循环打印斐波那契数列的前 n 项。斐波那契数列定义为:
F(0) = 0, F(1) = 1
F(n) = F(n-1) + F(n-2)(n ≥ 2)
例如:
输入 n=6,输出 0, 1, 1, 2, 3, 5。
#include <stdio.h>
int main() {
int n, a = 0, b = 1, c;
printf("请输入斐波那契数列的项数: ");
scanf("%d", &n);
printf("斐波那契数列前%d项: ", n);
// for循环生成斐波那契数列
for (int i = 0; i < n; i++) {
printf("%d ", a); // 输出当前项
// 计算下一项并更新变量
c = a + b;
a = b;
b = c;
}
return 0;
}
3.使用双重循环打印完整的九九乘法表,格式如下:
1×1=1 1×2=2 1×3=3 ... 1×9=9
2×1=2 2×2=4 2×3=6 ... 2×9=18
...
9×1=9 9×2=18 9×3=27 ... 9×9=81
#include <stdio.h>
int main() {
for (int i = 1; i <= 9; i++) { // 外层循环控制行数
for (int j = 1; j <= 9; j++) { // 内层循环控制每行星式数量
printf("%d×%d=%d\t", i, j, i * j);
}
printf("
"); // 换行
}
return 0;
}
四、课堂小结
三种循环对比:
while:先判断后执行,循环体可能不执行。
do…while:先执行后判断,循环体至少执行一次。
for:初始化、条件判断、变量更新集中,适合已知循环次数场景。
多重循环:外层循环每执行一次,内层循环完整执行一轮,用于打印图形、遍历二维数据等。
核心要点:合理设置循环条件和变量更新,避免死循环;嵌套循环控制变量需区分,避免混淆。
原创精品资源学科网独家享有版权,侵权必究!
学科网(北京)股份有限公司
$$