高级c语言循环结构程序设计_第1页
高级c语言循环结构程序设计_第2页
高级c语言循环结构程序设计_第3页
高级c语言循环结构程序设计_第4页
高级c语言循环结构程序设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1,高级语言程序设计,孟宇龙 计算机科学与技术学院 ,2,第5章 循环结构程序设计,本章需要掌握的内容 掌握3种基本循环。 掌握多重循环。 掌握continue 和break 的使用。 编写循环结构程序。,3,5.1 引言,什么是循环? 为什么要使用循环?,问题1:,问题2:求学生平均成绩 分数相加后除以课数,在许多问题中需要用到循环控制。循环结构是结构化程序设计的基本结构之一,它和顺序结构、选择结构共同作为各种复杂程序的基本构造单元。,4,goto语句以及用goto语句构成循环,goto语句为无条件转向语句,它的一般形式为 goto 语句标号; 语句标号用标识符表示,它的定名规则与变量名相同,即由字母、数字和下划线组成,其第一个字符必须为字母或下划线。 例如: goto label_1; 合法; goto 123; 不合法。,5,一般来说,goto语句可以有两种用途: (1) 与if语句一起构成循环结构; (2) 从循环体中跳转到循环体外。 但是这种用法不符合结构化原则,一般不宜采用,只有在不得已时(例如能大大提高效率)才使用。,6,goto 语句举例,用if语句和goto语句构成循环,求1到100的和。,void main( ) int i, sum=0; i = 1; loop: if (i=100) sum = sum+i; i+; goto loop; printf(“%dn“ ,sum); ,结构化程序设计方法主张限制使用goto语句,因为滥用goto语句将使程序流程无规律、可读性差。,7,8,5.2 循环的实现方法,三种:while 、dowhile 、for 每种循环都需要下面的元素: 循环变量 循环体 循环的判断条件,9,5.2.1 while循环,while语句用来实现“当型”循环结构。 一般形式: while (表达式) 循环体语句;,10,求1到100的和(while循环),#include void main() int i, sum=0; i=1; while (i=100) sum = sum+i; i+; printf(“%dn“,sum); ,11,例5.1 从键盘输入一组学生成绩,若输入的成绩大于或等于0,将其累加到总成绩上,若成绩小于0,停止输入,然后计算并输出平均成绩。,12,5.2.2 for循环,一般形式,for (expr1 ; expr2 ; expr3) 循环体语句;,13,for (循环变量赋初值;循环条件;循环变量增值) 循环体语句; ,for语句等价于下列语句: 表达式1; while (表达式2) 语句; 表达式3; ,14,例5.2 求1到100的和(for循环),#include void main() int i, sum=0; for (i=1; i=100; i+) sum = sum+i; printf(“%dn“,sum); ,15,例5.3 从键盘输入10个整型数据,找出其中最大数和最小数。,16,for 语句的说明,(1) for语句的一般形式中的“表达式1”可以省略。 for (;i=100; i+) sum = sum+i; (2) 表达式2省略,即不判断循环条件。 for (i=1 ; ; i+) sum = sum+i; (3) 表达式3也可以省略。 for (i=1 ; i=100 ;) sum = sum+i; i+; ,17,for 语句的说明,(4)可以只有表达式2,即只给循环条件。 for( ; i=100 ;) while(i=100) sum=sum+i; 相当于 sum=sum+i; i+; i+; (5) 3个表达式都可省略。 for(; ;) 语句; 相当于 while(1) 语句;,18,for 语句的说明,(6)表达式1可以是设置循环变量初值的赋值表达式,也可以是与循环变量无关的其他表达式。 for (sum=0; i=100; i+) sum = sum+i; for(sum=0, i=1 ; i=100 ; i+) sum=sum+i; for(i=0, j=100 ; i=j ; i+, j-) k=i+j;,19,for语句的说明,(7) 表达式一般是关系表达式(如i=100)或逻辑表达式(如ab ,20,5.2.3 dowhile循环,dowhile语句的特点先执行循环体,然后判断循环条件是否成立。 一般形式: do 循环体语句; while (表达式); 执行流程,21,求1到100的和(dowhile),#include void main() int i, sum=0; i=1; do sum = sum+i; i+; while (i=100); printf(“%dn“,sum); ,22,while 和 dowhile 的比较,#include void main() int i, sum=0; scanf(“%d“, ,#include void main() int i, sum=0; scanf(“%d“, ,比较:i=1和i=11时的输出结果,23,5.2.4 循环的嵌套,while() while() ,do do while(); while();,for() for () ,while() do while(); ,for() while() ,do() for() while();,24,5.3 break语句和continue语句,break语句可以用来从循环体内跳出循环体,即提前结束循环,接着执行循环下面的语句。 一般形式:break; break语句不能用于循环语句和switch语句之外的任何其他语句中。,float pi = 3.14159; for (r=1 ; r100) break; printf(“r=%f,area=%fn“, r , area); ,25,continue语句,continue语句的作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。 一般形式: continue; continue语句和break语句的区别 continue语句只结束本次循环,而不是终止整个循环的执行。,while (表达式1) if (表达式2) break; ,while (表达式1) if(表达式2) continue; ,26,例:把100-200之间的不能被3整除的数输出。,#include void main() int n; for ( ) printf(“n“); ,27,例:把100-200之间的不能被3整除的数输出。,#include void main() int n; for (n=100; n=200; n+) if (n%3=0) continue; printf(“%d “, n); printf(“n“); ,28,5.3 循环的比较,(1)四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。但一般不提倡用goto型循环。 (2)在while循环和do-while循环中,只在while后面的括号内指定循环条件,因此为了使循环能正常结束,应在循环体中包含使循环趋于结束的语句(如i+,或i=i+1等)。,29,5.3 循环的讨论比较,(3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。 (4)while循环、do-while循环和for循环,可以用break语句跳出循环,用continue语句结束本次循环(break语句和continue语句见下节)。而对用goto语句和if语句构成的循环,不能用break语句和continue语句进行控制。,5.4 程序举例,例5.10 求两数的最大公约数。 问题分析 通常用欧几里德方法(又称“辗转相除”法)求解两个数的最大公约数。欧几里德方法的基本思想如下。 设两个数分别为a和b。 计算a和b的余数r; 若r=0,执行;否则执行; b=a,r=b,再计算a和b的余数,执行; b是最大公约数。 求解最大公约数是一个循环过程,循环条件是余数r不为0;循环体包含三个操作:b=a,r=b,计算a和b的余数。 数据结构 定义三个变量。变量a、b分别存储两个原始数据,变量r存储余数。,5.4 程序举例,#include “stdio.h“ void main() int a,b,r; scanf(“%d%d“, ,图5. 20 例5.10运行结果,5.4 程序举例,例5.11 打印输出Fibonacci数列的前20项,每行输出5个数据。 Fibonacci数列的通项如下:,问题分析: 循环体可分为三部分:计算、输出、为下一次循环做准备。计算主要是根据前两项计算当前项。输出部分首先输出当前项,然后控制换行操作。如果当前计算、输出的是第i项,其前两项分别是第i-1项和i-2项;当进入一下次循环时,计算、输出的是第i+1项,它的前两项分别是第i项和第i-1项,在计算第i+1项前,应先将第i项和第i-1项的值存入表示前两项的变量中,这是计算、输出第i+1项前的准备工作。,5.4 程序举例,#include void main() double x1,x0,f,f1; x1=1.5; do x0=x1; f=(2*x0-4)*x0+3)*x0-6; f1=(6*x0-8)*x0+3; x1=x0-f/f1; while(fabs(x1-x0)=1e-5); printf(“The root of equation is 5.2fn“,x1); ,图5.25 例5.12运行结果,5.4 程序举例,例5.13 打印输出下面的图形,行数由键盘输入(行数=9)。,1 121 12321 1234321 123454321 ,先分析图形的特点:图形的行数(n),每的字符数,每字符的起始位置。本例图形

温馨提示

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

评论

0/150

提交评论