C语言程序设计教程 (第4版) 第5章 循环结构 李丽娟 2013年2月.

Slides:



Advertisements
Similar presentations
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
Advertisements

数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
10.2.switch语句.
循环模式 流程图的画法: 条件 y 循环体 伪代码: n Do while 条件 循环体 loop 每个循环模式的结构都是一个入口,一个出口.
第六章 循环控制.
第4章 循环结构 程序设计2 本章主讲 赵家刚 计算机编程导论.
分式的乘除.
第4章 循环结构 程序设计 本章主讲 赵家刚、李俊萩 计算机编程导论.
《高等数学》(理学) 常数项级数的概念 袁安锋
C 语言程序设计 主讲人:王 英.
小学生游戏.
一、原函数与不定积分 二、不定积分的几何意义 三、基本积分公式及积分法则 四、牛顿—莱布尼兹公式 五、小结
C语言实验 第一课 标题:学号+姓名.
数学建模与MATLAB 第五讲:循环结构(1) 2017/9/12.
第3章 While循环程序设计.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
C#程序设计基础 $5 流程控制.
C程序设计.
第 四 章 循环结构 while语句 do {} while 语句 break和continue语句
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
第二章 矩阵(matrix) 第8次课.
循环结构 NEAU ACM-ICPC TEAM 主讲人:NEAU_ACM_Team.
第3章 C语言的基本语句 和程序结构设计.
走进编程 程序的顺序结构(二).
第5章 循环结构程序设计 5.1 为什么需要循环控制 5.2 用while语句实现循环 5.3 用do---while语句实现循环
第六章 循环结构程序设计 概述 while 语句 do-while 语句 for 语句 循环的嵌套 几种循环的比较
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
ENVI-IDL可视化程序设计 楚雄师范学院地理科学与旅游管理学院 杨云源 QQ:
§2 求导法则 2.1 求导数的四则运算法则 下面分三部分加以证明, 并同时给出相应的推论和例题 .
第五章 循环结构的C程序设计 5.1 while循环语句 5.2 do-while循环语句 5.3 for循环语句 5.4 多重循环
第3章 选择结构与循环结构 王德俊 上海交通大学继续教育学院.
第二章 Java语言基础.
第六章 循环控制.
第4章 PHP流程控制语句.
程序的三种基本结构 if条件分支语句 switch多路开关语句 循环语句 循环嵌套 break,continue和goto语句
数列.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
线 性 代 数 厦门大学线性代数教学组 2019年4月24日6时8分 / 45.
Java软件设计基础 3. 流程控制.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
用计算器开方.
C语言程序设计 第一章 数据类型, 运算符与表达式 第二章 顺序程序设计 第三章 选择结构程序设计 第四章 循环控制 第五章 数组.
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
《计算机应用基础》 第9章 程序设计基础(二).
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
用穷举法设计程序 南京师范大学 教育技术系 倪佳慧
3.16 枚举算法及其程序实现 ——数组的作用.
算法初步 §1.1.2 程序框图.
College of Computer Science & Technology
1.2基本算法语句 1.2.3循环语句.
输入语句 输出语句 赋值语句 条件语句 循环语句
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第二章 Java基本语法 讲师:复凡.
第二章 Java基本语法 讲师:复凡.
§2 方阵的特征值与特征向量.
2.3.运用公式法 1 —平方差公式.
输入语句 输出语句 赋值语句 条件语句 循环语句
五 循环结构程序设计 厦大附中信息技术.
第四节 向量的乘积 一、两向量的数量积 二、两向量的向量积.
第三节 数量积 向量积 混合积 一、向量的数量积 二、向量的向量积 三、向量的混合积 四、小结 思考题.
第十七讲 密码执行(1).
第十二讲 密码执行(上).
1.2.2条件语句.
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
§4.5 最大公因式的矩阵求法( Ⅱ ).
顺序结构程序设计 ——关于“字符串”和数值.
第二次课后作业答案 函数式编程和逻辑式编程
9.3多项式乘多项式.
Presentation transcript:

C语言程序设计教程 (第4版) 第5章 循环结构 李丽娟 2013年2月

第5章 循环结构 本章主要内容 1. for循环语句结构 2. while循环语句结构 3. do-while循环结构 4. break和continue语句的作用 5. 循环结构的嵌套 6. 案例分析

第5章 循环结构 循环就是重复地执行某些语句。 程序中的循环次数是有限的,由循环条件决定可以确定循环次数。  C语言提供了3种循环结构语句: ① for语句 ② while语句 ③ do_while语句

5.1 for语句 for语句是一种计数循环。循环次数由循环变量来控制。  for语句的一般形式为: for (<初始表达式>;<条件表达式>;<循环表达式>) { <循环体语句> } for语句的3个重要的组成部分: 1.初始表达式——初始化循环控制变量。 2.条件表达式——测试循环条件。 3.循环表达式——更新循环控制变量的值。

5.1 for语句 for (<初始表达式>;<条件表达式>;<循环表达式>) { <循环体语句> } for语句的语法功能: 1.计算<初始表达式>的值。该表达式是对循环控制变量进行初始化。 2.判断<条件表达式>的值。该表达式就是循环条件,若该表达式的值为“真”,则执行<循环体语句>; 若该表达式的值为“假”,则退出循环,执行循环结构外的语句。 3.计算<循环表达式>的值。该表达式更新循环控制变量的值。 4.转第2步。

5.1 for语句 for语句的流程图: 注意: ①若<循环体语句>中有多条语句,则构成复合语句,被包含在一对花括号中。 ②若<循环体语句>只有一条,可以不使用花括号。

5.1 for语句 例1:编写程序,求几何级数之和: 分析: 该数学表达式为1+2+3+…+100。 设:sum为级数的和(初值为零); i为循环变量; 将i从1按步长为1增加到100,循环计算: sum=sum+i; 求得该级数的和。 程序:example5_1.c

5.1 for语句  for语句所具有的特性。 1.<初始表达式>可以省略,但须保留分号(;),同时在for之前必须给循环控制变量赋值,形式为: <初始表达式>; for(;<条件表达式>;<循环表达式>) <循环体语句> 2.<条件表达式>一般不可省略,否则为无限循环。 例如: for(i=1;; i++) sum =sum+i; 相当于条件总为真,程序会一直不停地执行直到“数据溢出”。

5.1 for语句 3.<循环表达式>亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为假,使程序能正常结束循环。 例如: for(sum=0, i=1; i<=100;) { sum = sum +i; i++; } 4.3个表达式均省略,即for(;;),为无限循环,程序中要避免这种情况的发生。

5.1 for语句 5.条件表达式可以是关系表达式、数值表达式。只要表达式的值不等于零,就执行循环体语句。 如: for( i=0; (c=getchar())!='\n';i+=c); 6.初始表达式、循环表达式可以是逗号表达式,用来完成逗号表达式中各表达式的功能。 例如: for (sum=0, i=1; i<=100; i++, i++) 相当于: sum=0; for(i=1; i<=100; i=i+2) 7.for循环也可以嵌套,执行时是先执行最里层的循环,再执行其外一层的循环。

5.1 for语句 例2:编写程序,从键盘输入两个不等于零的正整数a、b(a<b),求它们之间的几何级数的和,数学表达式为 : 分析: ①所求级数和的初值和终值由键盘任意输入; ②题目要求初值a<b,并且a>0,b>0; ③如果a>b,或者输入的值为负数,则程序提示输入错误,不进行任何计算,直接退出程序。

5.1 for语句 程序流程图: 程序:example5_2.c 思考: ①该算法的缺点; ②设计更好的算法。 ③假如输入的数可以为任意整数, 如果a≤b,计算 ; 如果a>b,则计算 。 请设计算法并编写程序验证。

5.1 for语句 例3:编写程序,从键盘输入m和n的值,用符号“*”在屏幕上打印出如下所示具有m行n列的矩形图案。 * * * * * * * 分析: ①图案有规律,共有m行,每行有n个*号。 ②可采用循环嵌套的方式: 第1层(外层)控制行数,用i来表示,输出m行“*” ; 第2层(内层)控制列数,用j来表示,输出n列“*” 。

5.1 for语句 算法流程图如图所示: 虚线框内是内层循环,用来输出每一行的n个*号。 程序: example5_3.c 思考: 怎样利用for循环的嵌套,输出更多有规律的平面图案。 关键:找出图案的规律。

5.1 for语句 例4:编写一个可以为小学生提供加法、减法和乘法的二元算术运算练习的程序,计算100以内的两个数的和、两个数的差和两个数得的积,每次测试10 个题目,依次由学生输入答案,并由计算机判断输入的答案是否正确,最后由计算机给出简单评价。 分析: ①根据题意,组成算术表达式的操作符有3种形式: +、−、*,分别用1、2、3来代表。 ②用ops表示操作符,a,b分别代表两个操作数; ③ a,b和ops由计算机随机生成,并计算表达式的值result ; ④用户输入表达式的结果input; ⑤将input与result进行比较; ⑥通过比较的结果,给出对计算结果的评价。

5.1 for语句 程序算法流程图如图所示: 程序:example5_4.c 程序特别处理:如果(a>b), 计算(a−b);否则计算(b−a)。 思考: 1.如果每次测试的题目不止10个,需要怎样修改算法和程序? 2.如果要求程序在结束了一组测试之后,可以继续进行测试,需要怎样修改算法和程序? 3.如果要加入两位数的除法计算,需要怎样修改算法和程序?

5.2 while语句 while语句的一般形式为: while(<循环表达式>) { 循环语句; 循环变量表达式; } <循环语句>和<循环变量表达式>一起构成循环体语句。 while语句的语法功能: 1.计算<循环表达式>的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行循环体语句。 2.重复步骤1的操作。 while语句的流程图如图所示

5.2 while语句 while(<循环表达式>) { 循环语句; 循环变量表达式; } 关于while语句的几点说明。 1.<循环变量表达式>不可缺少,其作用是更新计算循环变量的值,使循环能正常结束。 2.若没有<循环变量表达式>,则有可能会使程序出现无限循环而发生错误。 3.由于while循环是先判断<循环表达式>的值,后决定是否执行<循环体语句>,因此,<循环体语句>有可能一次也没有执行。

5.2 while语句 例5:改写程序,将例5-1所示的简单几何级数求和问题用while语句来实现。 (阅读、思考、比较)

5.2 while语句 例6:编写程序,从键盘输入一个正整数n,求n!。 分析:n!=n*(n−1)*(n−2)*…*2*1 (约定:n≥0,0!=1) 计算机在计算阶乘时,是从1开始计算直到n为止。 用i代表循环变量,s代表n!的结果值,则循环计算表达式:s=s*i,即可求得n!。 算法流程图如图所示。 程序: example5_6.c 思考:能否用for循环实现?

5.2 while语句 例7:编写程序,统计从键盘输入的字符个数(回车换行符也是一个字符),当遇到结束标志时程序结束。 分析:关键是循环计数。 设置一个累加器count(初值为0),每次从键盘输入一个字符,只要该字符的值不等于结束标志,累加器的值就增1:count=count+1; 算法流程图如图所示。 程序: example5_7.c

5.2 while语句 例8:阅读练习: 【例5-8】 编写程序,进行学生某门课程成绩的分类统计。从键盘输入每位学生的成绩等级,以大小写的A、B、C、D和E表示成绩等级,A为最高,D为最低。统计出总人数及各成绩段的人数,忽略回车键和空格键,以EOF作为输入结束。 思考:算法流程图的其他表示方法。

5.3 do-while语句 do_while语句的一般形式为: do { <循环体语句> }while(<条件表达式>); do_while语句的语法功能: 1.执行<循环体语句>, 2.计算<条件表达式>; 若该表达式的值为“真”,则执行步骤1; 若该表达式的值为“假”,则退出循环语句结构。 do_while语句的流程图如图所示 注意:要避免出现无限循环而发生错误。

5.3 do-while语句 集中循环的特点比较: ① do_while与while和for循环的区别: ② for循环和while循环的算法流程图描述是一致的。 ③ for循环适合于循环次数确定的情况。 ④ 对大多数问题,do_while、while和for循环是可以互换的。

5.3 do-while语句 例9:求几何级数的和: 用do_while语句的形式实现。 分析:循环变量i的值从1~100递增,i的初值为1、终值为100, 累加器sum的初值为0 循环计算:sum=sum+i。 算法流程图如图所示。 程序:exam5_9.c

5.3 do-while语句 例10:编写程序,从键盘输入x的值,求 ,直到最后一项绝对值小于le−7(即10−7)为止(注:x为弧度值)。 分析:关键是对多项式进行分解计算。 ① 第1项为x; ②从第2项开始,每一项都是前一项乘以一个因子: (n=3,5,7,9……) ③用s代表sin x的值,s的初值为0; 用t代表每一项的值,t的初值为x; 从第2项开始,后面每1项的值为: (n=3,5,7,9……) ④循环计算表达式:s=s+t;直到t的值满足精度要求为止。

5.3 do-while语句 算法流程图如图所示。 程序: example5_10.c 思考: ① 程序怎样控制计算的精度? ② 可否用while和for循环来实现? ③ 其他算法。

5.4 用于循环中的break语句和continue语句 1.break语句 break语句可用于分支结构和循环语句结构。 break语句的作用: 跳出当前的控制结构。  在循环语句中,要谨慎使用break语句。 常用于循环语句体内某一个if条件分支的语句中,用来表示在循环过程中满足某一条件时,结束循环。

5.4 用于循环中的break语句和continue语句 例11:编写程序,求圆面积在100平方米为以内的半径,输出所有满足条件的半径值和圆面积的值,并输出第1个大于100的圆半径和圆面积。 分析:计算圆面积的表达式为:r2。 ① 依次取半径为1,2,3…,循环计算圆的面积area; ② 当area>100时结束。 算法流程图如图所示,外层虚线框为循环结构,内层虚线框为if结构。 程序: example5_11

5.4 用于循环中的break语句和continue语句 提示 ①循环结构中若采用了break语句,其算法结构属于非结构化的设计。 ②用于结束当前循环语句的break语句都可以修改成不使用break语句的形式。 ③应尽量避免使用break语句,满足结构化的要求。 思考: 怎样修改例11的程序,使其成为结构化的程序。

5.4 用于循环中的break语句和continue语句 2.continue语句 continue语句的一般形式为: continue; continue的语法规则: 结束本次循环,提前进入下一轮循环。 注意: ① continue语句不会跳出循环结构,而是提前进行下一个循环。 ②while语句和do_while语句遇到continue时,程序会立刻转到条件表达式,开始下一轮循环;而在for语句中遇到continue时,程序会立刻转到〈循环表达式〉,更新循环变量,开始下一轮循环。

5.4 用于循环中的break语句和continue语句 例12:编写程序,输出在50~100中不能被3整除的数。 分析:对任意正整数n,若n%3≠0,则输出该数n; 如果n%3=0,则不输出该数n。 算法流程图如图所示: 程序:example5_12.c 思考: 不使用continue语句,怎样修改程序?

5.4 用于循环中的break语句和continue语句 提示 continue语句同break语句一样,也有可能会破坏程序的结构化,使程序成为非结构化的程序,因此,应当尽量避免使用continue语句。

5.4 用于循环中的break语句和continue语句 例13:编写程序,循环地从键盘输入整数,计算并输出数的个数、总和以及算术平均值,若输入了数字0,则不计入总数,以结束标志作为输入的结束。 分析:假设从键盘输入的整数为n,数据的个数为count,数据的总和为sum,算术平均值为average。 ①如果n=0,则计数count的值不增加,不计入总和; 否则count的值增1,总合sum=sum+n。 ②最后的算术平均值为average=sum/n。 算法流程图如图所示: 程序:example5_ 13.c 思考: 不使用continue语句,怎样修改程序?

5.4 用于循环中的break语句和continue语句 比较break语句和continue语句的区别: 例14:阅读程序: example5_14.c 和example5_14a.c。比较break语句和continue语句在程序中的区别。 注意: 为确保算法的结构化,清尽量不用或少用break和continue语句。

5.5 循环结构的嵌套 循环结构的嵌套,指的是在某一种循环结构的语句中包含有另一个循环结构。 理论上,循环嵌套的深度不受限制,但实际中不提倡使用嵌套层次太多的循环结构。 循环结构嵌套时,要注意: ①嵌套的层次不能交叉; ② 嵌套的内外层循环不能使用同名的循环变量; ③并列结构的内外层循环允许使用同名的循环变量。

5.5 循环结构的嵌套 例15:编写程序,在屏幕上输出阶梯形式的乘法口诀表。 分析;乘法口诀表可以由9行9列来表示,其中第i行有i列。 利用循环嵌套,算法流程图如图所示: 程序: example5_15.c

5.6 goto语句 goto语句是一种无条件转向语句,可以用在程序的任何地方。 goto语句的一般形式为: goto <语句标号>; goto语句的作用:转到标号语句所在的地方继续执行。 说明: ① <语句标号>为任何合法的标识符; ② <语句标号>放在某个语句前面并加上冒号“:”作为语句的标号; ③ <语句标号>只对goto 语句有意义,带有标号的语句被称作标号语句。 例如:error:、end:、exp:等均为合法的语句的标号。

5.6 goto语句 特别提示  goto语句是一种非结构化的语句。 goto语句会破坏结构化程序的逻辑结构,严重时会造成程序错误,因此,在程序设计中应尽量少用或不用goto语句。  goto语句常用于在深层嵌套的情况下从里层完全退出到嵌套的最外层。 如: for() { ……; if (mistake) goto error; } error: ……;

5.6 goto语句 例16:阅读【例5-16】,用 goto语句计算简单几何级数的和。 回顾该问题的其他解决方案。 例17:编写程序,输出40以内的能同时被3和4整除的数。 分别给出两种算法: ①使用goto语句。

5.6 goto语句 算法流程图: 或: 算法为非结构化的 程序:example5_17.c

5.6 goto语句 ②不使用goto语句来实现。 算法流程图: 程序: example5_18.c 比较例5-17和例5-18的算法。 思考结构化算法的思想。

5.7 程 序 范 例 【例5-19】 编写程序,输出ASCⅡ序列中从33~127(十进制)的字符对照表。 算法核心:简单的循环输出。 【例5-20】 设公鸡每只5元,母鸡每只3元,小鸡每元3只,现用100元钱买100只鸡,编写一个程序,算出可以各买多少只鸡? 算法核心:循环嵌套。

5.7 程 序 范 例 【例5-21】 编写程序,在屏幕上输出下面的结果,输出数据的行数通过键盘输入,要求在5~20行之间。 3 5 7 9 6 8 10 12 9 11 13 15 12 14 16 18 15 17 19 21 算法核心:分析输出数据的规律,简单循环结构。

5.7 程 序 范 例 算法核心:分析输出数据的规律,用循环嵌套。 5.7 程 序 范 例 【例5-22】 输出如图5-19所示的图案,图案的最大宽度值(水平方向*号的个数)由键盘输入。要求最大的宽度值必须为奇数。 算法核心:分析输出数据的规律,用循环嵌套。

5.8 本 章 小 结 1.主要讨论了3种循环语句:for、while和do_while循环。 2.了解了break 语句、 continue 语句和goto语句的作用。 3.3种循环可互相嵌套以构成各种混合嵌套结构。 4.while循环和for循环都要先判断条件再执行循环体语句,因此,有可能一次也不执行循环体语句,而do_while循环不论怎样都会先执行一次循环体语句。 5.使用循环结构时要注意避免以下几个方面的问题。 ①循环体语句为复合语句,但没有使用花括号。 ②程序发生无限循环。 ③混淆break 语句与continue语句的功能。

本 章 习 题 一、填空题。 【题5.1】——【题5.10】 二、单选题。 【题5.11】——【题5.18】 三、编程题。 【题5.22】 【题5.23】 【题5.26】 【题5.227】 【题5.29】 【题5.39】 【题5.43】 附加:编写程序输出下面7种图案。