C第2版(第5章循环结构)_第1页
C第2版(第5章循环结构)_第2页
C第2版(第5章循环结构)_第3页
C第2版(第5章循环结构)_第4页
C第2版(第5章循环结构)_第5页
已阅读5页,还剩42页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计教程

(第2版)第5章循环结构1

第5章循环结构本章主要内容1.

for循环语句结构2.

while循环语句结构3.

do-while循环结构4.

break和continue语句的作用5.循环结构的嵌套6.案例分析2第1章引言2024/5/6第5章循环结构

循环就是重复地执行某些语句。

程序中的循环次数是有限的,由循环条件决定可以确定循环次数。

C语言提供了3种循环结构语句: ①for语句 ②while语句 ③do_while语句3第1章引言2024/5/65.1for语句

for语句是一种计数循环。循环次数由循环变量来控制。

for语句的一般形式为:

for(<初始表达式>;<条件表达式>;<循环表达式>) { <循环体语句> }

for语句的3个重要的组成部分: 1.初始表达式——初始化循环控制变量。 2.条件表达式——测试循环条件。 3.循环表达式——更新循环控制变量的值。4第1章引言2024/5/65.1for语句

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

for语句的流程图:

注意:①若<循环体语句>中有多条语句,则构成复合语句,被包含在一对花括号中。②若<循环体语句>只有一条,可以不使用花括号。6第1章引言2024/5/65.1for语句例1:编写程序,求几何级数之和:分析:该数学表达式为1+2+3+…+100。设:sum为级数的和(初值为零);i为循环变量;将i从1按步长为1增加到100,循环计算:

sum=sum+i;求得该级数的和。程序:example5_1.c

7第1章引言2024/5/65.1for语句

for语句所具有的特性。1.<初始表达式>可以省略,但须保留分号(;),同时在for之前必须给循环控制变量赋值,形式为:

<初始表达式>;for(;<条件表达式>;<循环表达式>)

<循环体语句>2.<条件表达式>一般不可省略,否则为无限循环。例如:

for(i=1;;i++)

sum=sum+i;相当于条件总为真,程序会一直不停地执行直到“数据溢出”。8第1章引言2024/5/65.1for语句3.<循环表达式>亦可省略,但在循环语句体中必须有语句来修改循环变量,以使条件表达式的值在某一时刻为假,使程序能正常结束循环。例如:for(sum=0,i=1;i<=100;){sum=sum+i;

i++;}4.3个表达式均省略,即for(;;),为无限循环,程序中要避免这种情况的发生。9第1章引言2024/5/65.1for语句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循环也可以嵌套,执行时是先执行最里层的循环,再执行其外一层的循环。10第1章引言2024/5/65.1for语句例2:编写程序,从键盘输入两个不等于零的正整数a、b(a<b),求它们之间的几何级数的和,数学表达式为:分析:

①所求级数和的初值和终值由键盘任意输入;②题目要求初值a<b,并且a>0,b>0;③如果a>b,或者输入的值为负数,则程序提示输入错误,不进行任何计算,直接退出程序。11第1章引言2024/5/65.1for语句

程序流程图:程序:example5_2.c

思考:①该算法的缺点;②设计更好的算法。③假如输入的数可以为任意整数,如果a≤b,计算

;如果a>b,则计算

。请设计算法并编写程序验证。12第1章引言2024/5/65.1for语句例3:编写程序,从键盘输入m和n的值,用符号“*”在屏幕上打印出如下所示具有m行n列的矩形图案。********************************************************分析:

①图案有规律,共有m行,每行有n个*号。②可采用循环嵌套的方式:第1层(外层)控制行数,用i来表示,输出m行“*”;第2层(内层)控制列数,用j来表示,输出n列“*”

。13第1章引言2024/5/65.1for语句

算法流程图如图所示:虚线框内是内层循环,用来输出每一行的n个*号。程序:

example5_3.c思考:怎样利用for循环的嵌套,输出更多有规律的平面图案。

关键:找出图案的规律。14第1章引言2024/5/65.1for语句例4:编写一个可以为小学生提供加法、减法和乘法的二元算术运算练习的程序,计算100以内的两个数的和、两个数的差和两个数得的积,每次测试10个题目,依次由学生输入答案,并由计算机判断输入的答案是否正确,最后由计算机给出简单评价。分析:①根据题意,组成算术表达式的操作符有3种形式:

+、−、*,分别用1、2、3来代表。②用ops表示操作符,a,b分别代表两个操作数;③a,b和ops由计算机随机生成,并计算表达式的值result;④用户输入表达式的结果input;⑤将input与result进行比较;⑥通过比较的结果,给出对计算结果的评价。15第1章引言2024/5/65.1for语句

程序算法流程图如图所示:程序:example5_4.c

程序特别处理:如果(a>b),计算(a−b);否则计算(b−a)。思考:1.如果每次测试的题目不止10个,需要怎样修改算法和程序?2.如果要求程序在结束了一组测试之后,可以继续进行测试,需要怎样修改算法和程序?3.如果要加入两位数的除法计算,需要怎样修改算法和程序?16第1章引言2024/5/65.2while语句

while语句的一般形式为:

while(<循环表达式>)

{

循环语句;

循环变量表达式;

}

<循环语句>和<循环变量表达式>一起构成循环体语句。

while语句的语法功能:1.计算<循环表达式>的值,若该值为“假”,则跳出循环,执行循环体后面的语句;若该值为“真”,则执行循环体语句。2.重复步骤1的操作。

while语句的流程图如图所示17第1章引言2024/5/65.2while语句

while(<循环表达式>)

{

循环语句;

循环变量表达式;

}

关于while语句的几点说明。1.<循环变量表达式>不可缺少,其作用是更新计算循环变量的值,使循环能正常结束。2.若没有<循环变量表达式>,则有可能会使程序出现无限循环而发生错误。3.由于while循环是先判断<循环表达式>的值,后决定是否执行<循环体语句>,因此,<循环体语句>有可能一次也没有执行。18第1章引言2024/5/65.2while语句例5:改写程序,将例5-1所示的简单几何级数求和问题用while语句来实现。

(阅读、思考、比较)19第1章引言2024/5/65.2while语句例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循环实现?20第1章引言2024/5/65.2while语句例7:编写程序,统计从键盘输入的字符个数(回车换行符也是一个字符),当遇到结束标志时程序结束。分析:关键是循环计数。设置一个累加器count(初值为0),每次从键盘输入一个字符,只要该字符的值不等于结束标志,累加器的值就增1:count=count+1;

算法流程图如图所示。程序:

example5_7.c21第1章引言2024/5/65.2while语句例8:

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

思考:算法流程图的其他表示方法。22第1章引言2024/5/65.3do-while语句

do_while语句的一般形式为:

do

{

<循环体语句>

}while(<条件表达式>);

do_while语句的语法功能:1.执行<循环体语句>,2.计算<条件表达式>;若该表达式的值为“真”,则执行步骤1;若该表达式的值为“假”,则退出循环语句结构。

do_while语句的流程图如图所示

注意:要避免出现无限循环而发生错误。23第1章引言2024/5/65.3do-while语句

集中循环的特点比较:①do_while与while和for循环的区别:

do_while循环中的<循环体语句>至少会执行一次;而while和for循环中的<循环体语句>有可能一次也不被执行。②

for循环和while循环的算法流程图描述是一致的。③for循环适合于循环次数确定的情况。④对大多数问题,do_while、while和for循环是可以互换的。24第1章引言2024/5/65.3do-while语句例9:求几何级数的和:用do_while语句的形式实现。分析:循环变量i的值从1~100递增,i的初值为1、终值为100,累加器sum的初值为0循环计算:sum=sum+i。

算法流程图如图所示。程序:exam5_9.c25第1章引言2024/5/65.3do-while语句例10:编写程序,从键盘输入x的值,求

,直到最后一项绝对值小于le−7(即10−7)为止(注:x为弧度值)。分析:关键是对多项式进行分解计算。①第1项为x;②从第2项开始,每一项都是前一项乘以一个因子:

(n=3,5,7,9……)③用s代表sinx的值,s的初值为0;

用t代表每一项的值,t的初值为x;从第2项开始,后面每1项的值为:(n=3,5,7,9……)④循环计算表达式:s=s+t;直到t的值满足精度要求为止。26第1章引言2024/5/65.3do-while语句

算法流程图如图所示。程序:

example5_10.c

思考:①程序怎样控制计算的精度?②可否用while和for循环来实现?③其他算法。27第1章引言2024/5/65.4用于循环中的break语句和continue语句1.break语句

break语句可用于分支结构和循环语句结构。

break语句的作用:跳出当前的控制结构。

在循环语句中,要谨慎使用break语句。常用于循环语句体内某一个if条件分支的语句中,用来表示在循环过程中满足某一条件时,结束循环。28第1章引言2024/5/65.4用于循环中的break语句和continue语句例11:编写程序,求圆面积在100平方米为以内的半径,输出所有满足条件的半径值和圆面积的值,并输出第1个大于100的圆半径和圆面积。分析:计算圆面积的表达式为:

r2。①依次取半径为1,2,3…,循环计算圆的面积area;②当area>100时结束。

算法流程图如图所示,外层虚线框为循环结构,内层虚线框为if结构。程序:

example5_1129第1章引言2024/5/65.4用于循环中的break语句和continue语句①循环结构中若采用了break语句,其算法结构属于非结构化的设计。②用于结束当前循环语句的break语句都可以修改成不使用break语句的形式。③应尽量避免使用break语句,满足结构化的要求。

思考:怎样修改例11的程序,使其成为结构化的程序。提示30第1章引言2024/5/65.4用于循环中的break语句和continue语句2.continue语句

continue语句的一般形式为:

continue;

continue的语法规则:

结束本次循环,提前进入下一轮循环。注意:①continue语句不会跳出循环结构,而是提前进行下一个循环。②while语句和do_while语句遇到continue时,程序会立刻转到条件表达式,开始下一轮循环;而在for语句中遇到continue时,程序会立刻转到〈循环表达式〉,更新循环变量,开始下一轮循环。31第1章引言2024/5/65.4用于循环中的break语句和continue语句例12:编写程序,输出在50~100中不能被3整除的数。分析:对任意正整数n,若n%3≠0,则输出该数n;

如果n%3=0,则不输出该数n。

算法流程图如图所示:程序:example5_12.c思考:不使用continue语句,怎样修改程序?32第1章引言2024/5/65.4用于循环中的break语句和continue语句

continue语句同break语句一样,也有可能会破坏程序的结构化,使程序成为非结构化的程序,因此,应当尽量避免使用continue语句。提示33第1章引言2024/5/65.4用于循环中的break语句和continue语句例13:编写程序,循环地从键盘输入整数,计算并输出数的个数、总和以及算术平均值,若输入了数字0,则不计入总数,以结束标志作为输入的结束。分析:假设从键盘输入的整数为n,数据的个数为count,数据的总和为sum,算术平均值为average。①如果n=0,则计数count的值不增加,不计入总和;否则count的值增1,总合sum=sum+n。②最后的算术平均值为average=sum/n。

算法流程图如图所示:程序:example5_

13.c思考:不使用continue语句,怎样修改程序?34第1章引言2024/5/65.4用于循环中的break语句和continue语句比较break语句和continue语句的区别:例14:阅读程序:

example5_14.c和example5_14a.c。比较break语句和continue语句在程序中的区别。注意:为确保算法的结构化,清尽量不用或少用break和continue语句。35第1章引言2024/5/65.5循环结构的嵌套

循环结构的嵌套,指的是在某一种循环结构的语句中包含有另一个循环结构。

理论上,循环嵌套的深度不受限制,但实际中不提倡使用嵌套层次太多的循环结构。

循环结构嵌套时,要注意:①嵌套的层次不能交叉;②嵌套的内外层循环不能使用同名的循环变量;③并列结构的内外层循环允许使用同名的循环变量。36第1章引言2024/5/65.5循环结构的嵌套例15:编写程序,在屏幕上输出阶梯形式的乘法口诀表。分析;乘法口诀表可以由9行9列来表示,其中第i行有i列。

利用循环嵌套,算法流程图如图所示:程序:

example5_15.c37第1章引言2024/5/65.6goto语句

goto语句是一种无条件转向语句,可以用在程序的任何地方。

goto语句的一般形式为:

goto<语句标号>;

goto语句的作用:转到标号语句所在的地方继续执行。说明:①

<语句标号>为任何合法的标识符;②

<语句标号>放在某个语句前面并加上冒号“:”作为语句的标号;③

<语句标号>只对goto语句有意义,带有标号的语句被称作标号语句。例如:error:、end:、exp:等均为合法的语句的标号。38第1章引言2024/5/65.6goto语句

goto语句是一种非结构化的语句。

goto语句会破坏结构化程序的逻辑结构,严重时会造成程序错误,因此,在程序设计中应尽量少用或不用goto语句。

goto语句常用于在深层嵌套的情况下从里层完全退出到嵌套的最外层。特别提示如:

for(){for(){for(){……;if(mistake)gotoerror;}}}……;error:……;39第1章引言2024/5/65.6goto语句例16:阅读【例5-16】,用

goto语句计算简单几何级数的和。回顾该问题的其他解决方案。例17:编写程序,输出40以内的能同时被3和4整除的数。

分别给出两种算法:①使用goto语句。40第1章引言2024/5/65.6goto语句

算法流程图:算法为非结构化的或:程序:example5_17.c41第1章引言2024/5/65.6goto语句②不使用goto语句来实现。

算法流程图:程序:

example5_18.c比较例5-17和例5-18的算法。思考结构化算法的思想。42第1章引言2024/5/65.7程序范例【例5-19】编写程序,输出ASCⅡ序列中从33~127(十进制)的字符对照表。算法核心:简单的循环输出。【例5-20】设公鸡每只5元,母鸡每只3元,小鸡每元

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论