内容正文:
5.4节:for语句
C语言程序设计
电子工业出版社
理解for语句的基本结构和执行流程,掌握循环控制的核心逻辑
能够独立编写和调试简单的for循环程序,解决实际的计算问题
培养严谨的逻辑思维能力,提升利用编程工具解决实际问题的能力
知识目标
能力目标
素养目标
01
01
01
学习目标
目录
Part 01
教学导入
Part 02
知识讲授
Part 03
师生互动
Part 04
课堂练习
Part 05
课堂小结
教学导入:如何快速计算1到100的和?
思考时刻
如果让你手动计算:
1 + 2 + 3 + ... + 100
你需要多长时间?有没有更高效的方法让计算机帮我们快速完成?
“重复的机械劳动适合交给程序,而我们要做的是找到高效的算法逻辑。”
教学导入
思考:有没有一种方法可以让计算机重复执行相同的操作?
💡 计算机最擅长执行重复任务,接下来我们将深入学习 C 语言中最常用的循环语句 —— for 语句
答案:当然有!这就是我们今天要学习的核心内容——循环结构。
教学导入:C语言中最灵活的循环语句——for语句
今天我们就来学习C语言中最灵活的循环语句——for语句!它将帮助我们轻松解决累加问题,以及更多复杂的重复操作,是编程中处理循环逻辑的核心工具。
高度灵活性:初始化、条件判断、更新操作集中管理
执行高效性:结构紧凑,减少冗余代码,提升执行效率
代码易读性:循环逻辑一目了然,便于调试与维护
知识讲授
for语句
for语句
for语句的应用
第一部分
for语句
知识讲授
知识讲授:for语句的基本格式
for(表达式1;表达式2;表达式3) {
循环体语句;// 重复执行的代码块
}
表达式 1
初始化循环变量
仅在开始时执行一次
表达式 2
循环条件判断
为真时执行循环体
表达式 3
更新循环变量
在每次循环结束后执行
循环体
核心执行逻辑
满足条件时重复执行
Tips: 三个表达式之间必须用分号 ; 分隔,循环体建议始终使用大括号 {} 包裹
知识讲授:表达式1——“初始化”
核心作用
在循环正式开始前,为循环变量赋一个初始值,确立循环的起点。
执行特点
具有“一次性”特性,仅在整个循环结构开始时执行一次,后续迭代不再运行。
💡 关键点回顾:初始化是循环的“起跑线”。它只做一次,用来告诉程序“我们从哪里开始”。
for(i =0; ... ; ... ) {
// 循环体
}
示例: i = 0;
定义整数变量 i,并将其初始化为 0,作为循环的起始计数。
知识讲授:表达式2——“条件判断”
循环条件判断机制
核心作用:决定循环是否继续执行的关键“关卡”。
执行时机:每次执行循环体代码前,都会先进行此判断。
判断规则:结果为真(非0)则继续循环;结果为假(0)则立即跳出循环。
代码示例解析
for(i = 0;i < 10; i++) { ... }
示例中,i < 10即为条件判断表达式。只要变量 i 的值小于 10,循环就会持续进行;一旦 i 达到或超过 10,循环将终止。
执行流程可视化
1. 执行表达式1(初始化)
2. 执行表达式2(判断)
3. 执行循环体代码
4. 执行表达式3(更新)
知识讲授:表达式3——“更新变量”
执行时机与作用
在每次循环体执行完毕后执行,负责更新循环变量的值,为下一次判断做准备。
常见操作
通常用于变量的递增(如 i++)或递减(如 i--),是控制循环次数的关键。
代码解析:示例中的i++表示每次循环结束后,将变量 i 的值加 1。正是这个操作让 i 最终会大于等于 10,从而使条件不满足,循环结束。
for(i =0; i <10;i++) {
//执行语句
}
知识讲授:循环体
知识讲授:循环体
核心作用
当条件判断表达式为真时,需要重复执行的代码块。这是循环结构的执行核心。
语法特点
可以是一条简单语句,也可以是多条语句组成的复合语句(需用大括号 {} 括起来)。
代码示例
累加操作:sum = sum + i;
for_loop.c
for(i = 0; i < 10; i++){
// 这就是循环体
sum = sum + i;
// 可以包含多条语句
}
💡 重点提示:
即使循环体只有一条语句,也推荐使用大括号包裹,这能提高代码的可读性和可维护性,避免逻辑错误。
知识讲授:for语句的执行流程
1. 初始化
执行表达式1,仅在循环开始时执行一次。
2. 条件判断
执行表达式2,判断布尔值以决定是否继续循环。
3. 执行循环体
若条件为真(true),执行循环体中的语句。
4. 更新变量
执行表达式3,更新循环变量的值。
5. 循环往复
回到步骤2,直到条件为假(false)结束循环。
求解表达式1
表达式2
语句序列
求解表达式3
真(非0)
假(0)
for语句的
下一语句
例题分析:求1到10的和
程序文本:求1到10的和
#include<stdio.h>
main()
{
int i, sum =0;// 初始化累加和sum为0
for(i =1; i <=10; i++) // i从1开始,到10结束,每次加1
{
sum = sum + i;// 将当前的i值累加到sum中
}
printf("sum = %d
", sum);// 输出最终的和
}
例题分析:求1到10的和——“执行过程分析”
循环次数 i 的值 sum 的值 (sum = sum + i)
初始状态 1 0
第 1 次 1 0 + 1 = 1
第 2 次 2 1 + 2 = 3
第 3 次 3 3 + 3 = 6
中间过程 ... ...
第 10 次 10 45 + 10 = 55
循环结束 11 输出 sum = 55
核心逻辑:循环变量 i 从 1 递增到 10,每次将 i 累加到 sum 中。当 i 变为 11 时,不满足 i <= 10 的条件,循环终止。
例题分析:求1到10的和
例题分析:打印1到5的数字
程序文本:打印1到5的数字
#include <stdio.h>
main()
{
int i;
for(i = 1; i <= 5; i++)
// i从1开始,到5结束,每次加1
{
printf("%d ", i);// 打印当前的i值
}
printf("
"); }
例题分析:打印1到5的数字——执行过程分析
循环次数 i 的值 输出内容
第 1 次 1 打印 1
第 2 次 2 打印 2
第 3 次 3 打印 3
第 4 次 4 打印 4
第 5 次 5 打印 5
结束 6 循环结束,输出换行
例题分析:打印1到5的数字
背诵记忆
基本格式回顾
for(表达式1; 表达式2; 表达式3) { 循环体 }
标准执行流程
初始化 → 条件判断 → 执行循环体 → 更新变量 → 条件判断...
三大表达式核心作用
表达式1:初始化循环变量(仅执行一次)。表达式2:循环条件判断(决定是否继续)。
表达式3:更新循环变量(每次循环后执行)。
课堂问答
Q1:在 for 循环中,哪个表达式决定了循环是否继续执行?
A1:表达式 2(条件判断表达式)。
Q2:如果在 for 循环中省略了表达式2,会发生什么?
A2:循环会成为死循环,永远执行下去,因为条件永远为真。
课堂练习
练习任务
编写程序,打印出100以内所有能被3整除的数。
解题思路提示
可以使用取模运算符%来判断一个数是否能被另一个数整除(即余数为0)。
课堂练习
程序文本:打印出100以内所有能被3整除的数
#include<stdio.h>
main()
{
int i;
for(i = 1; i <= 100; i++)
{
if(i % 3 == 0) // 判断i是否能被3整除
printf("%d ", i);
// 如果能,就打印出来
}
printf("
");
}
课堂练习
第二部分
知识讲授
for语句的应用
知识讲授:累加求和(奇数和)
程序文本【5.6】计算 1 + 3 + 5 + ... + 99 的累加和。
#include<stdio.h>
main()
{
int i, sum;
sum = 0;
for(i = 1; i <= 99;i += 2)
sum = sum + i;
printf("
sum=%d
", sum);
}
核心逻辑解析
1. 初始化:sum = 0,i 从 1 开始(第一个奇数)。
2. 循环条件:i <= 99,遍历至最后一个奇数。
3. 关键步长:i += 2,每次递增 2,确保只遍历奇数。
知识讲授:累加求和(奇数和)
知识讲授:统计字符个数
程序文本【5.7】统计从键盘上输入的字符个数
#include<stdio.h>
main()
{
int n = 0;
printf("请输入一串字符:");
for(; getchar() !='
'; n++);
printf("字符个数为:%d
", n);
}
核心循环条件
循环条件为getchar() != '
',即当输入字符不是回车符时,循环继续执行。
for循环的简化写法
省略了初始化表达式(表达式1),因为变量 n 已在外部定义;循环体为空,所有操作在条件和增量中完成。
程序逻辑总结:
每次调用getchar()读取一个字符,若不是回车则计数器 n 自增。最终 n 的值即为输入字符的总个数(不包含回车符)。
知识讲授:统计字符个数
知识讲授:阶乘求和
程序文本【5.8】求 1! + 2! + 3! + ... + 20! 的和
#include<stdio.h>
main()
{
float s=0,t=1;// s:和, t:阶乘
int n;
for(n = 1; n <= 20; n++)
{
t = t * n;// 迭代计算阶乘
s = s + t;// 累加
}
printf("1+2!+3!+4!+…+20!=%e
", s);
}
阶乘变量 t
每次循环执行 t = t * n,利用上一次的结果快速计算当前 n 的阶乘,避免重复计算。
累加和变量 s
每次循环执行 s = s + t,将当前计算出的阶乘 t 累加到总和 s 中,最终得到所有阶乘的和。
注意事项:
由于 20! 的数值非常巨大(超过 2×10^18),普通 int 类型无法容纳,因此代码中使用 float 类型来存储结果,以确保数据不溢出。
知识讲授:阶乘求和
知识讲授:小球反弹问题
题目描述:
一个球从100m高处自由落下,每次落地后反弹回原高度的一半。求第10次落地时经过的总路程和第10次反弹的高度。
核心逻辑解析:
1.初始化:sn = 100 (初始下落高度),hn = 50 (第一次反弹高度)。
2.循环计算:从第2次落地开始循环至第10次。每次反弹包含上升和下落,因此路程累加 2 * hn。
3.高度更新:每次反弹后高度减半 (hn = hn / 2)。
4.输出结果:最终打印总路程和第10次反弹高度。
知识讲授:小球反弹问题
程序文本【5.9】小球反弹问题
#include<stdio.h>
main()
{
float sn=100,hn=sn/2;
int n;
for(n=2;n<=10;n++)
{
sn=sn+2*hn;
hn=hn/2;
}
printf("第10次落地时共经过%fm。
",sn);
printf("第10次反弹%fm。
",hn);
}
知识讲授:小球反弹问题
背诵记忆
灵活的条件与步长
通过调整表达式2和3来实现不同的遍历方式,例如只遍历奇数或偶数序列。
循环变量的灵活更新
可灵活设置循环变量的步长(如i += 2),实现更高效的遍历。
与其他语句结合
常与 if 条件语句结合,实现条件性的循环操作,例如寻找水仙花数或素数。
表达式的省略
for 循环的三个表达式都可以省略,但必须确保循环体内有能让循环正常结束的逻辑。
掌握这些技巧,让你的程序逻辑更加严密与高效
课堂练习
题目要求
编写程序,输入一个正整数,使用单重for循环判断它是否为素数。
解题思路提示
• 素数定义:大于1,且除了1和自身外,不能被其他自然数整除。
• 使用单重for循环,从2开始,遍历到该数的平方根(或该数本身减一),检查是否能被整除。
• 如果循环结束后都没有找到能整除的数,则该数是素数。
课堂练习
课堂练习
程序文本
#include<stdio.h>
main()
{ int n, i, flag = 1;// flag=1表示是素数
printf("请输入一个正整数:");
scanf("%d", &n);
if(n <= 1)
{printf("%d不是素数。
", n);return 0;}
for(i = 2; i < n; i++)
if(n % i == 0)
{ flag = 0;break; }
if(flag == 1) printf("%d是素数。
", n);
else printf("%d不是素数。
", n); }
课堂练习
课堂小结
for语句结构
标准语法结构:
for(初始化; 条件; 更新) { 循环体 }
执行流程
执行顺序闭环:
初始化 → 判断条件 → 执行循环体 → 更新变量 → 再次判断...
基础应用场景
掌握核心功能:
简单的数值累加、循环计数、批量打印输出等基础操作。
高级应用技巧
掌握进阶技巧:
灵活设置循环变量步长,结合条件判断实现更复杂的循环逻辑。
“编程的核心在于逻辑,for循环是构建逻辑流程的基石。”
课堂小结
课后任务
必做题
复习本次课程所学的 for 语句知识点,重点理解循环逻辑。
独立完成课堂上的所有练习题目,确保代码可正常运行。
选做题
尝试用 for 循环解决生活中的实际问题(如计算月度开销)。
挑战:编写代码打印一个倒过来的九九乘法表。
温馨提示:请将作业代码保存为文件,下节课开始前提交至作业系统。遇到困难可查阅课程回放或在讨论区提问。
谢谢观看
THANKS
$