内容正文:
5.1、5.2节:循环的概念与while语句
C语言程序设计
电子工业出版社
理解循环的概念,掌握while语句的格式和执行过程
能够运用while语句解决简单的编程问题,如累加、计数等
培养逻辑思维能力和程序设计的基本思想,提升解决问题的能力
知识目标
能力目标
素养目标
01
01
01
学习目标
目录
Part 01
教学导入
Part 02
知识讲授
Part 03
师生互动
Part 04
课堂练习
Part 05
课堂小结
教学导入:一个有趣的问题
如何让计算机计算从 1 加到 100 的总和?
请先在脑海中构思
教学导入:“笨办法”—重复的加法
工作量巨大
手动编写上百行重复代码,不仅枯燥乏味,而且极易在输入过程中出现笔误。
代码极度冗余
大量重复的“sum + n”逻辑,使得代码文件体积庞大,阅读和理解成本极高。
核心痛点:这种“笨办法”虽然能得到结果,但在实际开发中是不可接受的。一旦需求变更(如加到200),修改成本将呈指数级上升。这引出了我们对循环结构的需求。
程序文本
// 这是一个非常繁琐的方法
intsum =0;
sum = sum +1;
sum = sum +2;
sum = sum +3;
// ...
// 需要写100行这样的代码
sum = sum +100;
教学导入:高效的解决方案——“循环”
基本概念与定义
循环是结构化程序设计的基本结构之一。它允许我们在给定条件成立时,反复执行某段程序代码,直到条件不成立为止。这是控制程序流程的关键手段。
核心价值:自动化
循环就像一个“自动化”的重复操作。它解放了人力,让计算机代替我们完成繁琐、重复的劳动,极大地提高了编程效率和代码的可读性,是实现复杂算法的基础。
“用有限的代码,解决无限的重复” —— 循环的艺术
知识讲授
循环的概念与while语句
循环的概念与while语句
while语句的应用
第一部分
循环的概念与while语句
知识讲授
知识讲授:循环的概念
在日常生活和程序设计中,我们经常遇到需要重复处理的问题:
音乐播放器的“循环播放”功能
计算全班50个学生的平均成绩(重复输入和计算50次)
检查30个学生的成绩是否及格(重复判断30次)
循环结构就是为了解决这类重复操作而设计的。
知识讲授:循环的概念
知识讲授:C语言中的循环结构
while 语句
执行逻辑:先判断条件,再执行循环体。若条件不满足,循环体一次都不执行。
do-while 语句
执行逻辑:先执行一次循环体,再判断条件。至少保证循环体执行一次。
for 语句
执行逻辑:将初始化、条件判断和更新操作集中在一起,结构紧凑,适合次数已知的循环。
本堂课重点:深入理解 while 语句的执行流程与条件控制逻辑。
知识讲授:while语句——“当型”循环结构
C语言一般格式:
while(表达式)
{
循环体语句
}
核心机制:先判断,后执行
执行流程:首先计算表达式的值。
条件为真(非0):执行循环体,返回继续判断。
条件为假(0):直接跳出循环,执行后续代码。
重要提示:
由于 while 语句是“先判断”,如果一开始表达式就为假,那么循环体有可能一次都不执行。这是它与 do-while 循环的本质区别。
知识讲授:while语句的执行过程
1. 计算表达式值
首先计算 while 后括号内表达式的值,这是循环的入口判断依据。
2. 判断条件真假
若值为真(非0),执行步骤3进入循环;若为假(0),执行步骤4退出循环。
3. 执行循环体
执行大括号内的循环体语句,完成一次循环后,回到步骤1重新判断。
4. 退出循环
跳出 while 循环结构,程序继续执行循环体后面的语句。
背诵记忆
循环的定义
在给定条件成立时,反复执行某段程序代码,直到条件不成立为止。
while 语句格式
标准语法结构:while(表达式){循环体;}
while 执行过程
先判断表达式,值为真则执行循环体;若为假则直接退出循环。
while 循环特点
先判断后执行。如果初始条件就不满足,循环体可能一次都不执行。
例题分析:求1+2+...+100的和
核心解题思路
1. 变量初始化:设置累加器 sum=0,计数器 i=1。
2. 循环条件:使用 while 循环,当 i ≤ 100 时执行循环体。
3. 循环操作:将 i 累加到 sum 中,并执行 i++ 使计数增加。
4. 结果输出:循环结束后,sum 即为 1 到 100 的总和。
关键点总结:该例题展示了 while 循环在累加问题中的经典应用。核心在于利用计数器变量 i 控制循环次数,利用累加器变量 sum 存储中间结果。注意循环体内必须有改变循环条件的语句(如 i++),否则会导致死循环。
i≤100
真
假
sum=0
i=1
sum=sum+i
i=i+1
例题分析:求1+2+...+100的和
程序文本:求1+2+...+100的和
#include <stdio.h>
main( )
{int i=1,sum=0; //定义变量i的初值为1,sum的初值为0
while(i<=100) //当i>100,条件表达式i<=100的值为假,不执行循环体
{ //循环体开始
sum=sum+i; //第1次累加后,sum的值为1
i++; //加完后,i的值加1,为下次累加做准备
} //循环体结束
printf("sum=%d
",sum); //输出1+2+3…+100的累加和
}
例题分析:求1+2+...+100的和
课堂问答
Q1:while循环的循环体什么时候会被执行?
当while后的表达式值为真(非0)时,循环体才会被执行。
Q2:如果while后的表达式一开始就为假,循环体执行几次?
0次。这体现了while循环“先判断,后执行”的特点。
课堂练习:打印100以内的所有偶数
题目要求
编写一个程序,使用 while 循环结构,打印出 100 以内(包含 100)的所有偶数。
思路一:步长控制(高效)
初始化变量 i = 0(第一个偶数)
循环条件:i <= 100
循环体:打印 i,i += 2(步长为2,直接遍历偶数)
思路二:条件判断(通用)
初始化变量 i = 1
循环条件:i <= 100
循环体:判断 i % 2 == 0,若是则打印,i += 1
思考:对比两种思路,哪种执行效率更高?为什么?
课堂练习:打印100以内的所有偶数
i≤100
i+=2
真
假
i=0
输出i
i≤100
真
假
i=0
输出i
i%2==0
真
i++
假
课堂练习:打印100以内的所有偶数
方法一:步长控制(高效遍历)
int i = 0;
while(i <= 100)
{
printf("%d ", i);
i += 2;// 步长为2,跳过奇数
}
方法二:条件判断(通用判断)
int i = 1;
while(i <= 100)
{
if(i % 2 == 0)
{
printf("%d ", i);
}
i++;
}
核心差异对比
效率与次数:
方法一仅循环50次(步长2),计算量减半,效率更高。
通用性与逻辑:
方法二需循环100次,但条件判断逻辑更通用,适合复杂筛选。
课堂练习:打印100以内的所有偶数
课堂练习:计算1到n的奇数和
题目要求
编写一个程序,输入一个正整数n,计算并输出1到n之间所有奇数的和。
解题思路提示
1. 初始化变量sum = 0存储总和。
2. 初始化变量i = 1(第一个奇数)。
3. 使用 while 循环,条件为i <= n。
4. 循环内累加sum += i,且i += 2。
5. 循环结束后输出 sum。
i<=n
真
假
输出i
sum+=i;i=i+2
输入n
i=1,sum=0
结束
开始
课堂练习:计算1到n的奇数和
程序文本:计算1到n的奇数和
#include<stdio.h>
main()
{
int n, sum = 0, i = 1;
printf("请输入一个正整数n:");
scanf("%d", &n);
while(i <= n)
{
sum += i;// 累加当前奇数
i += 2;// 步长为2,指向下一个奇数
}
printf("1到%d之间的奇数和为:%d", n, sum); }
课堂练习:计算1到n的奇数和
第二部分
知识讲授
while语句的应用
知识讲授:计算n!
题目要求
输入正整数 n,计算并输出 n 的阶乘。
公式:n! = 1 × 2 × 3 × ... × n
解题思路提示
初始化变量 t 为 1,用于存储乘积结果。
使用 while 循环,从 1 乘到 n,逐步更新 t。
循环结束后,输出 t 的值。
i<=n
真
假
输出t
t*=i;i++;
输入n
i=1,t=1;
结束
开始
知识讲授:计算n!
程序文本:计算n!
#include<stdio.h>
main()
{ int i,n;
long t;
i=1,t=1;
printf("
请输入n的值:
");
scanf("%d",&n);
while(i<=n)
{
t=t*i;
i++; }
printf("
n!=%ld
",t); }
知识讲授:计算n!
知识讲授:统计元音字母个数
题目要求
输入一个字符串,统计其中元音字母(a, e, i, o, u,不区分大小写)的个数。
解题思路提示
使用getchar()逐个读取字符,直到遇到换行符。
利用while循环持续读取,条件为字符不等于 '
'。
判断字符是否为元音(覆盖大小写),若是则计数器count++。
知识讲授:统计元音字母个数
程序文本:统计元音字母个数
#include<stdio.h>
main()
{ char c;
int count=0;
while((c=getchar())!='
')
{
switch(c)
{
case 'a':case 'A':case 'e':case 'E':
case 'i':case 'I':case 'o':case 'O':
case 'u':case 'U':count++;break;
}
}
printf("元音字母的个数为:%d",count);
}
知识讲授:统计元音字母个数
知识讲授:猜数字游戏
题目要求
计算机随机生成1-100的整数作为谜底,用户输入猜测值,程序提示“大了”或“小了”,直到猜对为止。
解题思路提示
随机数生成:使用 rand() 和 srand() 生成1-100随机数。
用户交互:使用 scanf 获取用户输入的猜测值。
智能提示:利用 if-else 判断大小关系,输出提示。
循环机制:while(1) 构建循环,猜对时 break 跳出。
知识讲授:猜数字游戏
程序文本:猜数字游戏
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
main()
{ int secret, guess;
srand((unsigned)time(NULL));
secret =rand() % 100 + 1; // 生成1-100随机数
printf("猜数字游戏开始!
");
while(1) // 无限循环直到猜对
{ printf("请输入猜测:");
scanf("%d", &guess);
if(guess>secret) printf("大了!
");
else if(guess<secret) printf("小了!
");
else
{ printf("恭喜猜对!
");break; } // 猜对退出循环
} }
知识讲授:猜数字游戏
背诵记忆
循环三要素
初始化变量
条件判断逻辑
更新操作语句
避免死循环
循环体内必须包含
能改变循环条件的语句
防止程序无限执行
常用应用场景
数值累加与计数
用户输入验证
图形打印与游戏逻辑
💡 核心记忆:明确边界条件,确保循环有始有终,灵活运用解决实际问题。
课堂练习:输入验证
题目要求
编写程序,要求用户输入一个正整数,直到输入正确为止。若输入非正整数,提示错误并要求重新输入。
解题思路提示
核心:构建无限循环确保输入合法,典型的“输入验证”场景。
框架:使用while(1)作为主体循环结构。
读取:循环内部使用scanf获取用户输入。
判断:if(num <= 0)检查是否为正整数。
控制:非法则提示错误继续循环;合法则break跳出。
1
真
假
提示:重新输入
break;
输入num
int num;
结束
开始
num>0
真
课堂练习:输入验证
程序文本:输入验证
#include<stdio.h>
main()
{
int num;
printf("请输入一个正整数:");
while(1)// 无限循环,直到break
{
scanf("%d", &num);
if(num > 0) break;//输入正确,跳出循环
else
printf("输入错误,请重新输入:");
}
}
课堂练习:输入验证
课堂小结
循环概念
解决重复操作的高效方法,避免代码冗余,提升效率。
while语句
先判断后执行的“当型”循环。格式:while(表达式){循环体;}
执行过程
判断表达式 → 执行循环体 → 更新变量 → 重复直到表达式为假。
应用场景
广泛应用于累加、计数、输入验证、图形打印以及游戏逻辑控制等。
注意事项
务必避免死循环,确保循环体内有能改变表达式结果的变量更新语句。
核心目标
掌握循环思维,能够将复杂的重复任务转化为计算机可执行的高效代码。
编程不仅是代码,更是逻辑思维的艺术 —— 持续练习,熟能生巧
课堂小结
课后任务
基础题:平方和计算
编写程序,计算 1 到 n 的平方和,巩固循环累加的基本逻辑。
提高题:打印倒三角形
编写程序,利用嵌套循环打印出由星号(*)组成的倒直角三角形图案。
挑战题:改进猜数字游戏
限制用户最多猜 7 次,若 7 次均未猜对则结束游戏并提示正确答案。
谢谢观看
THANKS
$