内容正文:
第四章 循环结构
C语言程序设计
循环机理
现实生活中,需要不断反复去做和判断的情况有很多
不断学习,直到我们成功
不断骑行,直到团队完成赛程
从海口到上海,有多少种选择,哪一种最合适
输入密码验证,错误三次锁机
通过手机通信记录中寻找说了“特朗普”的人
循环结构简述
C语言程序设计
循环结构的应用场景
1. 国家安全领域
“谍影重重”——反复搜索“郁金香”
2. 人工智能领域
Alpha GO围棋挑战——反复计算落子的可能性
3. 日常生活领域
“双11”购物车决策——反复搜索“最合算”
循环结构特征——反复去做 直到合适
C语言程序设计
C 语言中的循环结构
分为三类:
1. for 循环
2 . while 循环
3 . do while 循环
循环:程序自动重复某几个语句
食材
烹饪
菜肴
C语言程序设计
本章学习任务
理解循环结构的基本流程
掌握for循环的语句结构
掌握while循环的语句结构
掌握do while循环的语句结构
理解三种循环结构之间的区别
循环结构应用实践
C语言程序设计
C语言中最灵活、最复杂的循环语句;
可以用于循环次数确定的情况;
可以用于循环次数不确定的情况;
可实现while和do--while语句的所有功能。
for 循环语句
for 循环语句基本流程
循环条件初始值
for(条件)
{
执行语句;
}
成立
条件
执行语句
不成立
条件变化
C语言程序设计
for 循环语句基本流程
考试分数
for(分数 < 60 )
{
继续学习;
参加考试;
}
获得证书
成立
条件
执行语句
不成立
条件变化
C语言程序设计
for 循环语句基本流程
grade=55;
for(; grade < 60 ; )
{
继续学习;
考试 grade= ?;
}
获得证书
成立
条件
执行语句
不成立
条件变化
C语言程序设计
基本流程小结
开始是 变量初始化
接着是 条件判断语句
再者是 一对表示循环体范围的大括号
最后是 大括号中的执行语句
C语言程序设计
for 循环语句基本结构
for语句的一般形式
for( 语句1; 语句2; 语句3 )
{
循环体
}
注意
不能丢
for的形式:
for (语句1;语句2;语句3)
循环体
循环变量
赋初值
循环终止
条件
循环变量
控制
语句1:初值表达式,用于在循环开始前为循环变量赋初值
语句2:循环控制逻辑表达式,它控制循环执行的条件,决定循环的次数
语句3:循环控制变量修改表达式,它使for循环趋向结束
循环体:需要重复执行的语句
for的形式:
for (语句1;语句2;语句3)
循环体
说明:
for语句中语句1、语句2 、语句3 类型任意,都可省略,但分号;不可省;
无限循环: for( ; ; )
for语句可以转换成while结构
循环变量
赋初值
循环终止
条件
循环变量
控制
for的形式示例:
for (语句1;语句2;语句3)
循环体
#include<stdio.h>
void main( )
{ int i;
for(i=0; i<10; i++)
{
printf("%d
",i);
}
}
程序 4.2.1 输出 数字 0 至 9
#include<stdio.h>
void main( )
{ int i=0;
for( ; i<10; i++)
{
printf("%d
",i);
}
}
#include<stdio.h>
void main( )
{ int i=0;
for( ; i<10;)
{
printf("%d
",i);
i++;
}
}
for 循环语句执行顺序
for语句的一般形式
for( 语句1; 语句2; 语句3 )
{
循环体
}
循环起点
仅执行一次
条件比较
直到不成立
循环体
条件成立执行
条件改变
执行多次
条件比较
直到不成立
循环体
条件成立执行
条件改变
执行多次
条件比较
直到不成立
for循环语句程序示例
程序 4.2.2
void main( )
{
int grade=0;
printf(“输入考试成绩: ”);
scanf(“%d”, &grade);
for( ;grade<60 ; )
{
printf(“输入考试成绩: ”);
scanf(“%d”, &grade);
}
printf(“以%d分通过考试,获得证书”,grade);
}
条件初始值
循环体
成立
条件
执行语句
不成立
条件变化
C语言程序设计
for循环语句程序示例
程序 4.2.3 输出10至20的值
int main( )
{
int a;
for(a=10 ;a <= 20 ;a++)
{
printf(“a的值: %d
”,a);
}
}
执行时产生下列结果:
成立
条件
执行语句
不成立
条件变化
C语言程序设计
for循环应用实战
1. 输出1+2+3+...+29+30的结果。
2. 输出100以内所有能同时被3和5整除的数。
3.中国工商银行活期存款年利率为1.79%。从键盘输入客户存款和存款期限(年),计算并输出到期客户本息数额。
C语言程序设计
for循环结构特征
1. 先判断,后执行
2. 条件为真(非0)执行循环体,为假(0)跳出循环
3. 循环条件在循坏体内部必须得到改变
4. 循环体语句可能一次也不被执行
5. 统计变量进循环前必须初始化(求和为0,求乘积为1)
成立
条件
执行语句
不成立
条件变化
C语言程序设计
while循环语句基本结构
条件
执行语句
成立
不成立
循环条件初始值
while(条件)
{
执行语句;
}
C语言程序设计
过渡语
下面咱们借用一个实际案例来分析一下
我们都经历很多考试,在考试处理的实际中,成绩不及格就要进行继续学习,然后再次考试,接着再判断成绩是否不及格,如果不及格,再继续学习,考试,反复去做。考试及格,直接获得证书。
C语言程序设计
while循环语句基本结构
考试分数
while(分数 < 60 )
{
继续学习;
参加考试;
}
获得证书
成立
不成立
条件
执行语句
C语言程序设计
二、while循环语句基本结构
grade=55;
while(grade < 60 )
{
继续学习;
考试 grade= ?;
}
获得证书
条件
执行语句
成立
不成立
C语言程序设计
基本结构小结
通过前面的讲解,while循环的基本结构已经很清晰
开始是 变量初始化
接着是 条件判断语句
再者是 一对表示循环体范围的大括号
最后是 大括号中的执行语句
C语言程序设计
while循环语句程序示例
程序
int main( )
{
int grade=0;
printf(“输入考试成绩: ”);
scanf(“%d”, &grade);
while( grade<60 )
{
printf(“输入考试成绩: ”);
scanf(“%d”, &grade);
}
printf(“以%d分通过考试,获得证书”,grade);
}
条件初始值
循环体
条件
执行语句
成立
不成立
C语言程序设计
while循环语句程序示例
程序 :输出10至20的值
int main( )
{
int a=10;
while( a <= 20 )
{
printf(“a的值: %d
”,a);
a++;
}
}
执行时产生下列结果:
条件
执行语句
成立
不成立
C语言程序设计
while循环结构特征
1. 先判断,后执行
2. 条件为真(非0)执行循环体,为假(0)跳出循环
3. 循环条件在循坏体内部必须得到改变
4. 循环体语句可能一次也不被执行
5. 统计变量进循环前必须初始化(求和为0,求乘积为1)
条件
执行语句
成立
不成立
C语言程序设计
C语言循环语句中用得相对较少的一个;
可以用于循环次数确定的情况;
可以用于循环次数不确定的情况;
先做再看,循环体至少被执行一次。
do while 循环语句
do while 循环语句基本流程
循环条件初始值
do
{
执行语句;
}
while(条件);
条件
执行语句
成立
不成立
条件变化
C语言程序设计
do while 循环语句基本流程
考试分数
do
{
学习;
参加考试;
}
获得证书
while(分数 < 60 );
条件
执行语句
成立
不成立
条件变化
C语言程序设计
do while 循环语句基本流程
grade=55;
do
{
学习;
考试 grade= ?;
}
获得证书
while(grade < 60 );
条件
执行语句
成立
不成立
条件变化
C语言程序设计
基本流程小结
开始是 变量初始化
接着是 do
再者是 一对表示循环体范围的大括号
最后是 while (条件);
C语言程序设计
do while循环语句程序示例
程序 4.6.1 判断是否通过课程考核
void main( )
{
int grade=0;
do {
printf(“输入考试成绩: ”);
scanf(“%d”, &grade);
}while(grade<60);
printf(“以%d分通过考试,获得证书”,grade);
}
条件初始值
循环体
条件
执行语句
成立
不成立
条件变化
C语言程序设计
do while循环语句程序示例
条件初始值
循环体
程序 4.6.2 输出 数字 0 至 9
#include<stdio.h>
void main( )
{ int i=0;
do
{
printf("%d
",i);
i++;
} while(i<=9);
}
条件
执行语句
成立
不成立
条件变化
C语言程序设计
do while循环语句程序示例
程序 4.6.3 输出10至20的值
void main( )
{
int a=10;
do
{
printf(“a的值: %d
”,a);
a++;
}while(a<20)
}
执行时产生下列结果:
条件
执行语句
成立
不成立
条件变化
程序存在什么问题呢?
;
C语言程序设计
do while 循环结构特征
1. 先执行,后判断
2. 条件为真(非0)执行循环体,为假(0)跳出循环
3. 循环条件在循坏体内部必须得到改变
4. 循环体语句至少被执行一次
5. 统计变量进循环前必须初始化(求和为0,求乘积为1)
条件
执行语句
成立
不成立
条件变化
C语言程序设计
三种循环语句结构对比
for语句
初始值
while( 条件 )
条件变化
a=1;
while(a<10)
{
printf(“a的值%d”,a);
a++;
}
for(初始值 ; 条件 ; 条件变化)
for(a=1; a<10;a++)
printf(“a的值%d”,a);
while语句
do while语句
初始值
do {
条件变化
} while( 条件 );
a=1;
do {
printf(“a的值%d”,a);
a++;
}while(a<10);
三种循环语句结构异同
1. for循环与while循环无本质区别,可以互换,都是先判断条件后执行;
2. for循环与while循环的循环体可能一次都不被执行;
3. do while 循环是先做后看,循环体至少被执行一次。
C语言程序设计
一题多解:同一问题不同循环方案
程序 : 输出 5×4×3×2×1 的结果
#include <stdio.h>
void main( )
{
int a,s=1;
for(a=5;a>=1;a--)
s=s*a;
printf(“结果:%d”,s);
}
#include <stdio.h>
void main( )
{
int a,s=1;
while(a>=1)
{
s=s*a;
a--;
}
printf(“结果:%d”,s);
}
#include <stdio.h>
void main( )
{
int a,s=1;
do
{
s=s*a;
a--;
}while(a>=1);
printf(“结果:%d”,s);
}
for语句
while语句
do while语句
C语言程序设计
知识点小结
for循环灵活,最常用
while循环结构流程直观
for 与while先看后做,可以互换
do while 先做再看
C语言程序设计
终止循环并跳出循环
只能跳出当前循环
break语句
void main( )
{
int a;
for(a=1;a<=30;a++)
{
if(a>=10)
break;
printf(“a的值:%d ”, a);
}
}
结果:
1 2 3 4 5 6 7 8 9
?
void main( )
{
int a;
for(a=1;a<=30;a++)
{
while(a>=10)
{ break; }
printf(“a的值:%d ”, a);
}
}
结果:
1 2 3 ...... 30
?
终止本次循环但不跳出循环
只能终止本次循环
continue语句
void main( )
{
int a;
for(a=1;a<=30;a++)
{
if(a%2==0)
continue;
printf(“a的值:%d ”, a);
}
}
结果:
1 3 5 7 9 ... 29
?
void main( )
{
int a;
for(a=1;a<=30;a++)
{
if(a%2==0)
break;
printf(“a的值:%d ”, a);
}
}
结果:
1
?
break与continue比较
1. break直接跳出循环,循环内部语句不再执行;
2. continue仅忽略本次循环,继续执行下一步循环;
3. break常用于避免死循环;
4. continue常用于过滤数据。
C语言程序设计
程序1 : 输入任意整数,逆序输出该整数
循环程序举例
void main( )
{
int t;
long n;
printf("整数:");
scanf("%ld",&n);
while(n!=0)
{
t=n%10; //每次取最末尾的数
printf("%d",t); //输出取出的数
n=n/10; //每取一个数,缩小十倍即可删除这个已被取出的数
}
}
结果:
整数:2356
6532
44
程序2:任意输入一个整数,求该整数各位数字的乘积
循环程序举例
void main( )
{
int s=1,t;
long n;
printf("整数:");
scanf("%ld",&n);
while(n!=0)
{
t=n%10;
s=s*t;
n=n/10;
}
printf("结果是:%d",s);
}
结果:
整数:1234
结果是:24
程序 3 : 中国工商银行活期存款年利率为1.79%。从键盘输入客户存款和存款期限(年),计算并输出到期客户本息数额。
循环程序举例
void main( )
{
int y,i;
float n;
printf("存款额度:");
scanf("%f",&n);
printf("存款期限:");
scanf("%d",&y);
for(i=1;i<=y;i++) //存款几年就重复做几次
n=n*(1+0.0179);
printf("本息数额:%f",n);
}
结果:
存款额度:10000
存款期限:1
本息数额:10179
程序4:和尚算口粮。有一财主到寺庙捐香火钱,和尚建议其第一天捐米2斗,第二天捐4斗,第三天捐8斗,第四天捐16斗,.......第10天捐多少?
循环程序举例
void main( )
{
int i;
long a=2;
for(i=1;i<=10;i++) //已知第1天为2 ,求第10天,所以循环10次
a=a*2;
printf("第10天捐米 %ld 斗",a);
}
程序5:百钱买百鸡。市场中,公鸡价格5元每只,母鸡3元每只,小鸡一元3只。某君欲花费100元买100只鸡,共有几种购买方案?
循环程序举例
void main( )
{ int x,y,z;
for(x=1;x<25;x++)
for(y=1;y<33;y++)
for(z=1;z<100;z++)
if(x+y+z==100 && (int)(5*x+3*y+(float)1/3)==100) //如果总数量和钱数均为100,即要找的方案
printf("公鸡:%d,母鸡:%d,小鸡:%d",x,y,z);
}
循环要件:初始值、终止条件、变量改变
运行流程:外层循环每走一步,内层走一圈。
运行次数:外层循环次数 × 内层循环次数。
嵌套技巧:走得慢的放外层,走得快的放内层。
循环小结
谢谢观看
C语言程序设计
$$