当前位置:首页 >> 其它课程 >>

5、C语言循环结构


第五章

循环结构

1

本章主要内容
? 5.1 工作场景导入

? 5.2 while型循环
? 5.3 do-while型循环 ? 5.4 for型循环

?
?

5.5 其他控制语句
5.6 回到工作场景
2

5.1 工作场景导入

3

? 【工作场景】 ? 北京某毕业生需要贷款100万买房,贷款的银行年利率为7%,由于此同 学工资水平有限,欲尽量拖延还款的结束日期,但其认为还款总金额不 可超过150万。此外,银行规定,还款期限不得超过30年。试为此人编 程求出满足他的要求的最大还款期限,得到如下图所示的输出结果(精 确到年)。

4

? ? ? ?

【引导问题】 (1) 如何通过循环控制结构来解决此问题? (2) 运用何种循环结构来具体描述此场景? (3) 循环结构(while、do-while或者for短语)具体如何使用?

5

5.2 while型循环

6

? 例1:模拟一个超市收 银系统,计算多件商 品的总价格,当输入0 时结束价格输入。

开始

sum=0

输入价格x

x!=0 非0 sum=sum+x

0

输出sum

输入下一个 x 结束

7

5.2.1 while结构的形式
?语句格式: while(条件表达式)
{
语句1; 语句2;
条件判断 不成立 其他语句 成立 语句 1...n

...
语句n;

} ?语句功能:当条件表达式的值为真时,重复执行循环体中的各语句。

?其中表达式是循环条件,语句为循环体。
?先判断,后执行,若条件不成立,循环体有可能一次也不执行 ?其循环结构的基本流程可用右图来表示。
8

5.2.2 while循环的语义
?先计算表达式的值并判断,若表达式值为“真”(即非零值),则执行循 环体中的语句;然后再计算再判断,如此重复,直到表达式值为“假”( 即0值)时,则跳出循环。
?例 编程实现求1+2+3+4+5+ … +100的结果。 ?程序代码如下:
#include "stdio.h" main() { int i, sum; sum=0; i=1; //赋初值 while(i <= 100) { sum += i; //sum = sum + i,循环一次执行一次加法 i++; //改变被加数的值 } printf("sum=%d\n", sum); //输出结果 }

9

运行结果如下图所示。

10

练习
? 从键盘接收多个学生的C语言程序设计这门 课程的成绩,输入-1则结束输入。统计其中 及格和不及格的学生人数,并计算平均分。

11

5.3 do-while型循环

12

5.3.1 结构形式
语句格式: do { 语句1; 语句2; ... 语句n; } while(表达式); --此处有分号 语句功能: ? 当条件表达式的值为真时,重复执行循环体中的各语句。 ? 若条件不成立,就跳出循环
? ? 循环体至少执行一次 while(表达式)后面的“;”不能少

其循环结构的基本流程可用右图来表示。

13

5.3.2 do-while循环的含义
? do-while型循环是先执行后判断的循环,首先无条件地执行一次循 环体中的语句,然后再判断表达式的值,若表达式值为“真”(即 非零值),则执行循环体中的语句;然后再计算再判断,如此重复 ,直到表达式值为“假”(即0值)时,则跳出循环。

14

? while语句和do…while语句比较
– while语句是先判断后执行,只要不满足条件,循环体语句根本 不会执行 – do…while语句是先执行后判断,不管条件是否满足,循环体语 句总会执行一次
#include <stdio.h> int main() { int i=1,sum=0; do { sum+=i; i++; }while(i<=10); printf("%d",sum); return 0; } #include <stdio.h> int main() { int i=1,sum=0; while(i<=10) { sum+=i; i++; } printf("%d",sum); return 0; }

15

练习
? 用do …while语句重新编写超市收银问题。 ? 将输入的正整数按逆序输出,例如,输入 135,则输出531。

16

5.4 for型循环

17

5.4.1 for循环的表现形式
? 语句格式: for(表达式1; 表达式2; 表达式3) { 语句1; 语句2; ... 语句n; } ? 表达式1:循环初始表达式,用于进入循环体前为 循环变量赋初值。由算术、赋值、逻辑和逗号表达 式构成。 ? 表达式2:循环控制表达式,用于控制循环体语句 的执行次数。由关系表达式或逻辑表达式构成。 ? 表达式3:修改循环变量表达式,即每循环一次使 得表达式1的值就要变化一次。由算术、赋值、逻 辑或逗号表达式构成。 ? 语句功能:当表达式2的值为真时,执行循环体中 的各语句。
表达式1

表达式2 非0 语句序列

0

表达式3

18

5.4.2 for语句的变型
上述的for循环格式只是一般的情况。在缺少表达式1或表达式2或表达 式3时,我们来看看此时特殊的for循环将如何执行。 (1) for(; 表达式2; 表达式3) 该种格式常用于无需给变量赋初值的情况。 (2) for(表达式1; ; 表达式3) 即失去了对循环变量的控制,为此将导致无限循环。 (3) for(表达式1; 表达式2; ) 即失去了修改循环变量值的操作,为此,在体内必须设有替代表达式3 的功能。
(4) for( ; 表达式2;) 该种格式完全等价于while语句,即进入循环体前必须有赋初值语句,而且在 体内要有修改循环变量的值的语句。 (5) for( ; ; ) 完全等价于while(1)循环,是一个死循环。在设计程序时也要借助于本章后面 一节要讲的break语句来结束死循环。
19

练习
? 例:使用for循环实现1到100之和。 ? 例:求100-999之间的所有水仙花数。
#include<stdio.h> – 水仙花数:如果一个数的各个数位上的数字之 int main() 立方和等于该数本身,则次数为水仙花数。如 { 3 + 33 153=13 + 5int i,m,n,k; for(i=100;i<1000;i++) { m=i/100; k=i%10; n=(i-100*m)/10; if(i==m*m*m+n*n*n+k*k*k) printf("%d ",i);

}

} return 0;

20

5.5 其他控制语句

21

5.5.1 break语句
break语句主要是用于switch结构和循环结构中,强制退出循环或跳出 0 表达式1 switch选择语句。其执行形式为: break; 非0 break语句在循环中,其功能是终止当前的循环,转向后续语句执行。 语句序列1 下面给出各种循环语句中break语句的使用例子比较: while() do for( ;; ) { { { 非0 表达式2 break ... ... ... 0 break; break; break; 语句序列2 ... ... ... } } while(); }

后续语句
22

练习
? 例: 输出半径为1到10的圆的面积,若面积 超过100,则结束输出 。
#include<stdio.h> #define PI 3.1415926 int main() { int r; double area; for(r=1;r<=10;r++) { area=PI*r*r; if(area>100.0) break; printf(" %.2lf",area); } return 0; }

5.5.2 continue语句
其一般形式为: continue; 0 该语句是专用于循环结构中改变某一次循环流程的语句。其作用是使程 表达式1 序流程提前结束本次循环,从而开始下一次循环。 非0 下面给出各种循环语句中continue语句的使用例子比较: 语句序列1 for( ;; ) while() do { { { ... ... ... 非0 表达式2 continue continue; continue; continue; 0 ... ... ... } } while(); 语句序列2 }

后续语句
24

练习
? 例:说出下列程序的功能: 完成下列程序:输出 100~200之间不能被3 #include<stdio.h> 整除的数 int main()
{
int num; for(num=100;num<=450;num++) { if(num>150 && num<400) continue; if(num%9==0) printf("%6d",num); } return 0; } #include<stdio.h> int main() { int k; for(k=100;k<=200;k++) { if(k%3==0) continue; printf(" %d ",k); } return 0; }

输出100~150之间和 400~450之间能被9整除的数

5.5.3 循环语句的嵌套
? 循环语句的嵌套:一个循环语句的循环体 中又包含循环语句
while() { …… while() { …… } …... } do { { …… do while() { …… do { …… }while( ); ……. } for( ; ;) { …… do { …… }while(); …… while() { …… } …... }

…… }while( ); …... }while( );

?三种循环可互相嵌套,层数不限。 ?外层循环可包含两个以上内循环,但不能相互交叉。 ?嵌套循环的执行流程:外层循环执行一次,内层循环要执行完。 ?嵌套循环的跳转:只能跳转出本层循环。 ?禁止从外层跳入内层、禁止跳入同层的另一循环和向上跳转。

练习
? 例1:编写C语言程序,输出乘法九九表。

练习
? 例2:编写C程序,实现100元人民币换成1 元、2元、5元的所有兑换方案。
设i、j、k分别代表1元、2元和5元的数量 则:i+2j+5k=100
#include<stdio.h> int main() { int i,j,k; for(i=0;i<=100;i++) for(j=0;j<=50;j++) for(k=0;k<=20;k++) if(i+2*j+5*k==100) printf("%d %d %d\n",i,j,k); return 0; }

5.6回到工作场景

29

? 通过对以上各小节内容的学习,我们了解了while语句、do-while语句 以及for语句实现循环的过程之后,现在是时候回到我们5.1节的工作 场景任务中了。 ? 运用循环结构控制的结束条件应该是本金和利息之和超过150万;本 金和利息之和通过变量sum得到,即sum+=sum*0.07,循环最大次数 可由银行还款最大期限决定,即通过i来控制最大循环次数。此处先用 for循环实现该场景。

30

程序代码如下:
#include <stdio.h> main() {
int i; float sum = 1000000; for(i=1; i<=30; i++) {
sum += sum*0.07; if(sum > 1500000) break;

//初始化为原贷款金额

//累加得到最终还款额 //程序出口,本息之和大于150万时,不满足题意

} printf("最大年限为:%d\n", i-1); //注意为i-1,而非i

}

程序运行结果如右图所示。
31

练习
? 例:从键盘输 入一个正整数 ,判断该数是 否为素数。
#include<stdio.h> #include<math.h> int main() { int i,m,n; scanf("%d",&n); if(n<0) { printf("输入数据错误!\n"); exit(0); } m=sqrt(n); for(i=2;i<=m;i++) if(n%i==0)break; if(i>m) printf("%d是素数\n",n); else printf("%d不是素数\n",n); return 0; }
32

练习2
? 模拟银行登录系统:从键盘输入密码,给三次机 会,如果输入的密码为12345,则结束验证,显 示“登录成功”,否则,显示“登录失败”。

练习3
? 求斐波那契(Fibonacci)数列前40项。 开始
F1 ? 1 ? ? F2 ? 1 ? ?F ? F ? F n ?1 n?2 ? n
( n ? 1) ( n ? 2) ( n ? 2)
输出f1和f2 f1=1,f2=1

i=1

i<=20

f1=f1+f2

f2=f2+f1

结束

#include<stdio.h> int main() { int i,f1=1,f2=1; for(i=1;i<=20;i++) { printf("%12d %12d",f1,f2); if(i%2==0) /*每行输出4个数*/ printf("\n"); f1=f1+f2; f2=f2+f1; } return 0; }

5.7 工作实训营

? 1. 训练内容 ? 编写程序,问题描述:某公司为了防止数据信息泄露,采取了数据加 密,数据是小于8位的整数。加密规则如下:将每位数字都加上5,再 用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 如输入1234,则应输出9786。请你帮助实现加密。 ? 2. 训练目的 ? 掌握各类循环结构的使用方法以及各自的适用范围。

36

本章小结
本章介绍了循环结构设计。在C语言中,用while语句、do-while语句和 for语句均能实现循环控制。结合使用break语句、continue语句,还可以 改变程序的执行流程,提前退出循环或提前结束本次循环。 本章的知识结构如下图所示。
一般形式 while 循环 注意问题 条件为真执行循环 多个语句应使用大括号 注意循环条件,避免死循环 可以由 while 语句构成多重循环 一般形式 循环结构 do-while 循环 注意问题 do-while 语句后面要加分号 可以和 while 相互嵌套 循环体有多个语句也要用大括号 与 while 循环替换时注意修改条件 书写形式和执行过程 for 循环 书写格式注意问题 表达式 1,3 可以替换 表达式 2 可以省略,但循环不停止 表达式可以为任意型,执行顺序不变 作用:终止循环 continue 和 break 区别:结束本次循环和结束整个循环

37


相关文章:
C语言-5循环结构_案例_图文.ppt
C语言-5循环结构_案例 - 例: 1+2+3 该如何实现 定义变量sum=0
C语言第5章循环结构程序设计_图文.ppt
C语言5循环结构程序设计 - 第循环结构程序设计 §5.1 概述 前面已介绍了顺序结构,选择结构,本章介绍 循环结构。 实际问题: 一组重复执行的语句。 ...
5、C语言循环结构_图文.ppt
5C语言循环结构 - 第章 循环结构 1 本章主要内容 ? 5.1 工作场景导入 ? 5.2 while型循环 ? 5.3 do-while型循环 ? 5.4 for型循环 ? ...
C语言程序设计(5循环结构)_图文.ppt
C语言程序设计(5循环结构)_计算机软件及应用_IT/计算机_专业资料。C语言程序设计第五章 循环结构 本章目标 ? 了解循环结构、循环语句 ? 重点掌握for语句、 while...
C语言第5章_循环结构._图文.ppt
C语言5章_循环结构. - 第5循环结构 1. §5.1 ~ § 5.5 2学时 2. § 5.6 2学时 问题的提出:对于这样的一类问题: 是否可用一种语句,使这两 ...
c语言程序设计-第5章循环结构_图文.ppt
c语言程序设计-第5循环结构 - The C Programming Language Chapter 5 Control Flow 第5循环结构程序设计 ? 循环结构又称重复结构,是...
5.C语言循环结构_图文.ppt
5.C语言循环结构 - 第章 循环结构程序设计 C语言可实现循环的语句: ?用goto 和 if 构成循环 ?while 语句 ?do ~ while 语句 ?for 语句 5-1. go...
《C语言》第5章 循环结构_图文.ppt
C语言》第5循环结构 - 知识回顾 多重if语句是将给定的条件从第一层if
C语言-5循环结构_图文.ppt
C语言-5循环结构 - 主讲教师 贾月乐 电话:13402866690 例: 1
C语言第5章_循环结构_图文.ppt
C语言5章_循环结构 - 第5循环结构 1. §5.1 ~ § 5.5 2
c语言基础课件5.循环结构_图文.ppt
c语言基础课件5.循环结构 - 第循环结构 回顾 多重if结构就是在主if块的else部分中还包含其他if块 嵌套if结构是在主if块中还包含另一个if 语句 C语言...
第5章 循环结构程序设计(C语言)_图文.ppt
5循环结构程序设计(C语言) - 第5循环结构程序设计 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 为什么需要循环控制 用while语句实现循环 用do---whi....
C语言第5章 循环结构_图文.ppt
C语言5循环结构 - 第5循环结构 ? ? 用while语句和do…w
C语言中-循环结构_图文.ppt
C语言中-循环结构_工学_高等教育_教育专区。主要介绍C语言循环结构这一章节,...break语句和continue语句 2 5.1 while语句语句的一般形式如下: while (表达式)...
c语言第四版(谭浩强著)第5章 循环结构_图文.ppt
c语言第四版(谭浩强著)第5循环结构 - 第5循环结构程序设计 5.1 为什么需要循环控制 5.2 用while语句实现循环 5.3 用do---while语句实现循环 5.4 ...
C语言课件第5章_循环结构_图文.ppt
C语言课件第5章_循环结构_教育学_高等教育_教育专区。第5循环结构5循环结构本章主要内容 1. for循环语句结构 2. while循环语句结构 3. do-while...
第5章__循环结构程序设计C语言程序_图文.ppt
5章__循环结构程序设计C语言程序 - 6.1 循环结构的程序设计 ? 一般形
第5章C语言循环结构程序设计素材_图文.ppt
5C语言循环结构程序设计素材 - 第 5C语言循环结构程序设计 本章要点
C语言循环结构练习题.doc
C语言循环结构练习题 - (1)编写一个程序,求 1 ? 1 1 1 1 1 之
C语言:第5章循环结构程序设计资料_图文.ppt
C语言:第5循环结构程序设计资料 - 第5循环结构程序设计 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 为什么需要循环控制 用while语句实现循环 用do---whi...
更多相关文章: