第五章 循环结构程序设计.ppt_第1页
第五章 循环结构程序设计.ppt_第2页
第五章 循环结构程序设计.ppt_第3页
第五章 循环结构程序设计.ppt_第4页
第五章 循环结构程序设计.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

付费下载

下载本文档

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

文档简介

1、课题:循环结构程序设计 授课时间:10.4.12 课型:新授 课时:理论2 节 教学方法:理论讲解 教学目的: 介绍结构化程序设计的第三种基本结构:循环结构程序设计中的while和do-while结构,要求学生掌握语句的使用方法,并逐步建立程序设计的思想。 教学重点: 掌握循环结构程序设计的应用场合,设计方法 教学难点: 能编制出较复杂的循环结构的C程序。,教学过程:新课导入-新课讲授-小结-布置作业-课后反思,第5章 循环结构程序设计,5.1 while语句和用while语句构成的循环结构 5.2 do while语句和用do while语句构成的 循环结构 5.3 for语句和用for语句

2、构成的循环结构 5.4 循环结构嵌套 5.5 break语句和continue语句 5.6 语句标号和goto语句,算法2: 首先,置累加变量sum=0; 第一步:sum=sum+1; 第二步:sum=sum+2; 第三步:sum=sum+3; 第一百步:sum=sum+100;,例如:求1100的累计和。,可以用三种算法来解决:,算法1: 因为是一个等差数列,可以用求等差数列的求和公式来解决:和=(首项+末项)*项数/2,即sum=(1+100)*100/2。,算法3: 换个思路来考虑:首先设置一个累计器sum,其初值为0,利用sum += n来计算(n依次取1、2、100),只要处理以下步

3、骤即可: 第一步:置累计变量sum的初值为0,即sum=0; 第二步:置加数变量n的初值为1;即n=1; 第三步:执行sum += n; 第四步:n增加1,即n=n+1; 第五步:当n小于等于100时,转到第三步执行;当增到101时,停止计算。此时,sum的值就是1100的累计和。,以上算法运用的重复计算结构(称为循环结构),C语言提供了3条循环语句来实现,以简化、并规范循环结构程序设计。,(1)用while语句。 (2)用do-while语句。 (3)用for语句。,(4)用goto语句和if语句构成循环。(不提倡),5.1 while语句和用while语句构成的循环结构,while语句的语

4、法格式为:,while (条件表达式) 循环体;,5.1.1 while循环的一般形式,程序语法流程图:,5.1.2 while循环的执行过程,循环变量初始化,继续条件,循环体 (改变循环变量),0,非0,while循环由4部分组成: 循环变量初始化 判断条件 循环体 改变循环变量的值。,例如,计算sum=1+2+3+10,while循环结构如下: int sum=0; int i=1; /循环变量初始化 while (i=10) /判断条件 /循环体 sum=sum+i; i+; /改变循环变量的值 ,注意:,如果循环体包含一个以上的语句,则应该用花括号括起来,以块语句形式出现。,仔细定义循

5、环变量的初始值和判断条件的边界值。,int sum=0; int i=1; /循环变量初始化 while (i=10) /判断条件 /循环体 sum=sum+i; i+; /改变循环变量的值 ,0,i+; sum=sum+i;,i=9,sum+=i+;,sum+=+i;,对条件表达式的计算总是比循环体的执行多一次。这是因为最后一次判断条件为假时不执行循环体。,例: int a=5, b=2, j=0; while( a+b ) j+;,printf(b=%d, j=%d, b, j);,b=5, j=2,ab+,b=6, j=3,当循环体不实现任何功能时,要使用空语句作为循环体,表示为: wh

6、ile (条件表达式) ;,例: int x=0,y=5,z=3; while(z- 0 ,x=3, y=4 ,z=0,x=3, y=3 ,z=0,循环体中,改变循环变量的值很重要。如果循环变量的值恒定不变,或者当条件表达式为一常数时,将会导致无限循环(也即死循环)。若要退出一个无限循环,必须在循环体内用break等语句退出。,例1:输入一行字符,求其中字母、数字和其他符号的个数。,#include main() char c; int letters=0, digit=0, others=0; printf(“Please input a line charatersn”);,while(c

7、!=n) if(c=a ,scanf(“%c”,scanf(“%c”,(c=getchar()!=n),例2:求两个正整数的最大公约数。,#include main() int num1, num2; int r, t; printf(“Please input two integer:”); scanf(“%d%d”,while(r!=0) num1=num2; num2=r; r=num1%num2; printf(“%d”,num2); ,5.2 do while语句和用do while语句构成的循环结构,dowhile语句的语法格式为:,do 循环体; while (条件表达式);,5

8、.2.1 do-while语句构成的循环结构,5.2.2 do-while循环的执行过程,循环变量初始化,循环体 (改变循环变量),继续条件,0,非0,例如:计算sum=1+2+3+10,采用do_while循环结构编写。,int sum=0; int i=1; /循环变量初始化 do /循环体 sum=sum+i; i+; /改变循环变量的值 while (i=10) ; /判断条件,与while语句不同的是:while语句有可能一次都不执行循环体,而dowhile循环至少执行一次,因为直到程序到达循环体的尾部遇到while时,才知道继续条件是什么。,dowhile结构与while结构中都具

9、有一个while语句,很容易混淆。为明显区分它们,dowhile循环体即使是一个单语句,习惯上也使用花括号包围起来,并且while(表达式)直接写在花括号“”的后面。这样的书写格式可以与while结构清楚地区分开来。,例如: do sum+=i+; while (i=100);,例:求满足下式的最小的n值,limit由键盘输入。 1+1/2+1/3+1/nlimit,#include main() int n=0;,double sum=0.0, limit; printf(“Please input limit:n”); scanf(“%lf”, ,小结: while语句 do-while语

10、句,作业: 课后习题 5.3 5.4 5.9 5.12 5.13 5.14 5.16 编写程序 5.17 5.18(2),课后反思: 本节课作为实际编程理论课,应注重培养学生的动手操作能力,对问题的分析能力,判断能力,通过不断设问的方式引导学生积极参与,认真思考,达到了调动学生的学习兴趣,构建知识的目的,在实际动手操作过程中,学生思维有时不够活跃,应积极引导,并且在操作时应注意随时跟踪,遇到问题帮学生及时解决掉,知识不留死角。,课题:上机实训 授课时间:10.4.15 课型:新授 课时:上机2 节 教学方法:指导学生上机操作 教学目的: 通过上机操作,引导学生使用c程序环境编写循环结构程序,并

11、对前面理论课的知识点进行上机实训演练,巩固理论课所学知识。 教学重点、难点: 能够独立编写较为复杂的c语言循环结构程序,并且在教师指导下能够独立完成上机作业。,教学过程:学生上机实训-教学反思,上机题目即为理论课布置的程序编写。,课后反思: 本节课作为实际编程上机课,应注重培养学生的动手操作能力,对问题的分析能力,判断能力,在实际动手操作过程中,学生思维有时不够活跃,缺乏理论知识,应积极引导,并且在操作时应注意随时跟踪,遇到问题帮学生及时解决掉。本次课通过对程序的上机调试,能够使学生自己检测自己的理论不足,更有的放矢的学习理论。,课题:循环结构程序设计 授课时间:10.4.19 课型:新授 课

12、时:理论2 节 教学方法:理论讲解 教学目的: 介绍结构化程序设计的第三种基本结构:循环结构程序设计中的for结构和循环结构嵌套形式,要求学生掌握语句的使用方法,并能够利用程序设计解决相关实际问题。 教学重点: 掌握循环结构中for程序设计和嵌套程序设计的语法规则, 应用场合,设计方法 教学难点: 能编制出较复杂的循环结构的C程序。,教学过程:新课导入-新课讲授-小结-布置作业-课后反思,5.4 for语句,1. for语句的语法格式为:,for(表达式1;表达式2;表达式3) 循环体;,注释: 表达式1可以称为初始化表达式,一般用于对循环变量 进行初始化或赋初值; 表达式2可以称为条件表达式

13、,当它的判断条件为真时,就执行循环体语句,否则终止循环,退出for结构; 表达式3可以称为修正表达式,一般用于在每次循环体 执行之后,对循环变量进行修改操作;循环体是当 表达式2为真时执行的一组语句序列。,2. for语句的执行过程如下: (1)先求解表达式1; (2)求解表达式2,若为0(假),则结束循环,并转到(5); (3)若表达式2为非0(真),则执行循环体,然后求解表达式3; (4)转回(2); (5)执行for语句下面的一个语句。,for循环结构流程图如下:,for(表达式1;表达式2;表达式3) 循环体;,表达式1,表达式2,循环体,表达式3,0,非0,转换成while结构,表达

14、式1; while(表达式2) 循环体; 表达式3; ,除此之外,for语句还充分表现了其灵活性:,1. 表达式1可以省略。此时应在for语句之前给循环变量赋值。若省略表达式1,其后的分号不能省略。,如:求和运算: i=1; for(; i=100; i+) /分号不能省略 sum+=i;,2. 表达式2可以省略。即不判断继续条件,循环无终止进行下去。也就是认为表达式2始终为真。此时,需要在循环体中有跳出循环的控制语句。,例如,求和运算: for(i=1; ; i+) sum+=i; if(i100) break; ,等价于,for(i=1; 1; i+) if(i100) break; su

15、m+=i; ,3. 表达式3可以省略。但此时程序员应另外设法让循环变量递进变化,以保证循环能正常结束。,例如:求和运算: for(i=1;i=100;) /分号不能省略 sum+=i+; /同时改变循环变量,4. 表达式1和表达式3可同时省略。,例如:求和运算: i=1; for(; i=100;) sum+=i+;,5. 三个表达式都可省略。即不设初值,不判断条件(认为表达式2为真),循环变量不增值,无终止执行循环体。,例如:求和运算 i=1; for(; ;) if(i100) break; sum+=i+; ,6. 表达式1,表达式2,表达式3都可以为任何表达式。,例如:求和运算中表达式

16、1为逗号表达式。 for(sum=0,i=1;i=100;i+) sum+=i;,7. 表达式1可以是循环变量定义。C语言的变量定义可以在任何语句的位置,for循环中也不例外。,例如:求和运算 for(int i=1;i=100;i+) sum+=i;,main() int i, n; long s=1; printf(Input n: ); scanf(%d, ,例1:求n的阶乘n!(n!=1*2*n),程序如下:,例2:计算正整数n所有因子(1和n除外)之和。,#include main() int n; int i; int sum=0; printf(“Enter n:”); scan

17、f(“%d”, ,5.5 循环结构嵌套,for语句和while语句允许嵌套,do-while语句也不例外。 三种循环可以互相嵌套。,循环结构嵌套: 一个循环体内又包含另一个完整的循环结构。内嵌的循环中还可以嵌套循环,这就是多层循环。,例:在屏幕上输出九九乘法表。,三种形式:,1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9 2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3

18、*6=18 3*7=21 3*8=24 3*9=27 4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54 7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63 8*1= 8 8*2=16 8*3=24

19、8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72 9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,第一种形式:,1*1= 1 2*1= 2 2*2= 4 3*1= 3 3*2= 6 3*3= 9 4*1= 4 4*2= 8 4*3=12 4*4=16 5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42

20、 7*7=49 8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81,第二种形式:,1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=2

21、7 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45 6*6=36 6*7=42 6*8=48 6*9=54 7*7=49 7*8=56 7*9=63 8*8=64 8*9=72 9*9=81,第三种形式:,#include”stdio.h” main() int i, j; for(i=1;i=9;i+) for(j=1;j=9;j+) printf(“%d*%d=%-4d”, i, j, i*j); printf(“n”); ,实现第一种形式程序如下:,#include”stdio.h”

22、 main() int i, j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(“%d*%d=%-4d”, i, j, i*j); printf(“n”); ,实现第二种形式程序如下:,#include”stdio.h” main() int i, j, k; for(i=1;i=9;i+) for(k=1;k=i-1;k+) printf(“ ”); for(j=i;j=9;j+) printf(“%d*%d=%-4d”, i, j, i*j); printf(“n”); ,实现第三种形式程序如下:,例:百元买百鸡问题。假定小鸡每只5角,公鸡每只2元,母鸡每

23、只3元。现在有100元钱要求买100只鸡,编程列出所有可能的购鸡方案。,解:设母鸡、公鸡、小鸡各为x、y、z只,根据题目 要求,列出方程为: x+y+z=100 3x+2y+0.5z=100 三个未知数,两个方程,此题有若干个解。,解决此类问题采用“试凑法”或“枚举法”或“试探法”,即将可能出现的各种情况一一测试,判断是否满足条件,一般采用循环来实现。,#include”stdio.h” main() int x, y, z; printf(“hen cock chickenn); for(x=0;x=33;x+) for(y=0;y=50;y+) z=100-x-y; if (3*x+2*y

24、+0.5*z=100) printf(“%6d%6d%6dn”,x, y, z); ,程序如下:,5.6 转向语句,常见的跳转语句有三种:break语句、continue语句与goto语句。其中,前两种语句不允许用户自己指定跳转到哪里,而是必须按照相应的原则跳转,而后一种语句可以由用户事先指定欲跳转到的位置,按照用户的需要进行跳转。,一、break语句,break语句的作用是:结束当前正在执行的循环(for、while、dowhile)或多路分支(switch)程序结构,转而执行这些结构后面的语句。,在switch语句中,break用来使流程跳出一层switch语句,继续执行该switch后的

25、语句。,例如,下面的代码在执行了break之后,继续执行 语句是? switch(a%3) case 0:m+; case 1:m+; switch(b%2) default: m+; case 0: m+;break; m+; case 2:m+; printf(“%dn”,m); ,for ( ; ; ) for ( ; ; ) if (i=1) break; a+=1; / ,在循环语句中,break用来从最近的封闭循环体内跳出。,如:分析下面的代码在执行了break之后,继续执行语句是?,例:已知sum=1+2+3+i+,求sum第一次大于20时,i的最小值。,#include mai

26、n() int i, sum=0; for(i=1;i+) sum+=i; if(sum20) break; printf(“%d”, i); ,编写程序:,二、continue语句,continue语句的作用是:结束当前正在执行的这一次循环(for、while、dowhile),接着执行下一次循环。即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。,在for循环中,continue用来转去执行表达式3。,在while循环和dowhile循环中,continue用来转去执行对条件表达式的判断。,continue语句和break语句的区别是:continue语句只结束本次循环,而不

27、是终止整个循环的执行。而break语句则是结束整个循环,不再进行条件判断。,例如: 输出1100之间的不能被7整除的数。 for (int i=1; i=100; i+) if (i%7= =0) continue; printf(“%d”,i); ,三、goto语句,goto语句的语法格式为: goto 标号;,其中,标号是一个用户自定义的标识符,它的命名规则与变量名的命名规则相同。定义标号时,由一个标识符后面跟一个冒号组成。标号的位置自由,可位于goto语句的前面,也可位于goto语句的后面,但必须与goto语句共处于同一函数中。,goto语句的作用是:结束当前正在执行的循环(for、while、dowhile)或多路分支(switch)程序结构,转而执行标号所标识的语句。,例如:求1加到10的总和。 i

温馨提示

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

评论

0/150

提交评论