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

下载本文档

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

文档简介

1、C语言程序设计,计算机学院,第六章 循环结构的程序设计,6.1 循环的基本概念 6.2 用while语句设计循环结构程序 6.3 用do_while语句设计循环结构程序 6.4 用for语句设计循环结构程序 6.5 Break语句与continue语句 6.6 几种循环语句的比较 6.7 循环的嵌套,6.1 循环的基本概念,求 S=1+2+3+.+100,S=0; S=S+1; S=S+2; . S=S+100;,S=0 S=S+i (i=1,2,.,100),s=0,i=1,i100,s=s+i,i=i+1,y,n,6.1 循环的基本概念,重复作某件事的现象称为“循环”; 循环结构就是在满足

2、循环条件时,重复执行某程序段,直到循环条件不满足为止,重复执行的程序称为循环体; 循环结构有“当型”和“直到型”两种形式;,6.2 用while语句设计循环结构程序,while 语句: 形式: while(表达式K) 循环体S(由若干语句组成) 功能:先判断条件,当条件为真时反复执行循环 体,条件为假则退出循环。,6.2 用while语句设计循环结构程序,while语句说明: while语句构成的循环属于“当型”循环; 表达式是控制循环的条件,可以是任何类型的表达式; while语句的特点是:先判断,后执行,有可能循环一次也不执行;,6.2 用while语句设计循环结构程序,求和: 1+2+3

3、+.+100=? main() int i,s; i=1;s=0; while(i=100) s=s+i;i+; printf(“s=%dn”,s); ,问题:是否可以 1、去掉while语句的 2、去掉i+; 3、将i+; 移到s=s+i;之前,while语句-实例,例1:从键盘输入10个整数,求这10个整数之和。,count=count+1,成立,不成立,输出结果total,计数器count=0,累加器total=0,输入num,total += num,开始,结束,while ( count=10 ) ,count = count + 1;,scanf(%d, ,total = tota

4、l + num;,程序主体,while语句-实例,#include main ( ) int count,num,total; /* count:计数器,num:输入的整数 */ count = total = 0; /* total:存放累加和 */,while ( count=10 ) /* 循环控制条件 */ count = count + 1; /* 循环体 */ printf (Enter the No.%d=, count); scanf (%d, /* 计算累加和 */ ,printf(Total=%dn, total); ,while语句-实例,例2:求 1 到 10 的阶乘

5、n!。,n = n * i,成立,不成立,计数器 i = 1,累积器 n = 1,输入结果,i = i + 1,开始,结束,while ( i = 10 ) ,n = n * i;,printf(%d, n);,i = i + 1;,程序主体,递推公式: f(n)=1 当n=1时 f(n)=f(n-1)*n 当n1时,while语句-实例3,循环嵌套: 在循环体中,又包含有循环语句。 例3:输出下三角形乘法九九表。 1 2 3 4 5 6 7 8 9 - 1 2 4 3 6 9 4 8 12 16 5 10 15 20 25 6 12 18 24 30 36 7 14 21 28 35 42

6、49 8 16 24 32 40 48 56 64 9 18 27 36 45 54 63 72 81 假设:行号为i ,列号为j,i=6 j=5 i*j,(1=i=9),(1=j=i),则:第 i 行中一共要输出 i 个乘积。,while语句-实例,#include main ( ) int i=1, j; /* i:行计数器 j:列计数器 */ while ( i = 9 ) /* 控制打印表头 */ printf ( %4d, i+ ); printf (n-n); i=1; while ( i= 9 ) j = 1; /* 列计数器置1 */ while ( j = i ) /* 嵌套

7、的二重循环。输出第i行 */ printf (%4d, i*j ); j +; /* 列计数器+1 */ printf (n); /* 一行输出结束后,输出n */ i +; /* 行计数器+1 */ ,外层循环体每执行1次,内层循环要完成由内循环条件所决定的次数,while语句使用注意,1.while (0) . 由于循环的条件表达式恒等于0,循环体永远也不会执行,是编程者的错误。 2.while (1) . 由于循环的条件表达式恒等于 1,所以不可能通过循环控制条件来结束循环体的执行,称为“死循环”。 3.为了保证循环正常运行,应该特别注意: 循环控制条件 控制条件的初始状态(初始值) 循

8、环体内部对控制条件的影响,6.3 用do_while语句设计循环结构程序,do_while语句 形式: do 循环体Swhile(K); 先执行循环体,当条件为真时反 复执行循环体,条件为假则退出循环。,6.3 用do_while语句设计循环结构程序,do_while语句说明: do_while语句构成“直到型”循环结构; do_while语句的特点是先执行后判断,循环体至少执行一次; 重复执行循环体,直到表达式为假时退出循环;,6.3 用do_while语句设计循环结构程序,求积: n!=1*2*3*.*n main() /* 求n! */ int i,n ,s; scanf(“%d”,;

9、double s;,%f,用do_while语句设计循环结构,main() int s=0,x; scanf(%d, ,main() int s=0,x; scanf(%d, ,输入:12 输出: s=12,循环至少 执行一次,循环没有 被执行,输入:12 输出: s=0,while 与do while的比较,6.4 用for语句设计循环结构程序,for语句: 形式: for(k1;k2;k3) S(循环体) 功能: ki-表达式 k1 - 用来确定循环变量的初值 k2 - 确定循环控制条件 k3 - 确定循环变量的增量 先计算k1,当k2为真时执行循环体 并计算k3,然后再判断k2,直到k2

10、为 假时退出循环。,6.4 用for语句设计循环结构程序,计算1*2*100=? main( ) int i;double s=1; for(i=1;i=100;i+) s=s*i; printf(“s=%fn”,s); ,循环变量初值,循环条件,循环变量步长,循环体中,如有多条语句要用 括起来。,for语句中的三个表达式(表达式1,表达式2和表达式3)中的任意一个都可省略,但是分号不能省略。,for (n=0;n+) 缺表达式2, 造成死循环,不可使用! (除非循环体中有使循环退出的条件) for (n=0;n100;) 缺表达式3, n增量应在循环体内进行 for (; ;) 三个表达式都

11、缺省, 死循环(同2) for (;n100;) 缺表达式1和表达式3,for语句的其它几种变化形式,for (;n100;n+) 缺表达式1, n 应在循环之前赋初值,分号始终不能缺!,for 语句-实例,输出图形 * * * * * 使用嵌套循环完成,main() int i,j,n; scanf(%d, ,外循环对行 内循环对列,6.5 Break语句与continue语句,break语句: 形式:break; (用于循环或switch语句中) 功能:终止执行所在的循环(或switch)语句 continue语句: 形式:continue; (只能用于循环体中) 功能:结束本次循环.(不

12、是结束整个循环),6.5 Break语句与continue语句,main() /*求1-13中不能被3整除的数*/ int i; for(i=1;i=13;i+) if(i%3 = 0) continue; printf(“%d,”,i); 输出 ?,1,2,4,5,7,8,10,11,13,1,2,若把continue; 换成 break;则输出,break;,6.6 几种循环语句的比较,三种循环语句可以处理同一问题; for和 while循环语句: 先判断, 后执行(可能不执行循环)。do_while循环语句: 先执行, 后判断(至少执行一次循环) for语句用于循环次数确定的情况,whi

13、le、do_while用于循环次数不确定的情况; do_while语句更适合首次循环肯定执行的情况;,while、do_while语句只能表达循环控制条件,而for语句有3个表达式,不仅能控制循环,而且能控制循环变量的初值及其变化,功能更强。 其中for语句中的三个表达式都可省掉(不采用)或部分省掉。 通常表达式2不可少,否则循环中必须有使循环退出的条件 如果省掉第一、二表达式,分号不可少,6.6 几种循环语句的比较,循环体可放入表达式 3,for ( i=1; i=10; printf (“%5d”, i ) , i+) ;,因为循环体在表达式 2 之后,表达式 3 之前执行,如果将 循环体

14、语句放入表达式 3,循环体语句与原来的表达式 3构成逗 号表达式,作为循环语句新的表达式 3,而 for 语句就无循环体 语句了。,语法上循环结构必须要有循环体语句,否则会出现语法错误。,为解决这个问题,在for 语句后加一空语句,作为循环体 语句用以解决语法的要求。,空语句,6.6 几种循环语句的比较,6.7 循环的嵌套,循环嵌套:循环语句的循环体中又出现循环语句。 main() /*2重循环*/ int i; for(i=1;i=2;i+) /*外循环*/ printf(“i=%d,j=”,i); for(j=1;j=3;j+)/*内循环*/ printf(“%d,”,j); printf

15、(“n”); 输出 ?,外循环的每一次循环(i), 均对应整个内循环(j=1,2,3),i=1,j=,1,i=2,j=,1,2,3,2,3,嵌套结构规则,外循环,内循环,交叉循环,外循环 入口,内循环出口,内循环出口,外循环出口,外循环出口,1. 在嵌套的循环中外循环与内循环变量不可同名。,2. 外循环与内循环不可交叉。,6.8 应用实例,main() /*求10到12中的素数*/ int i,j,k; scanf(“%d”, 输入10 输出 输入11 输出 输入12 输出,for(k=10;k13;k+) /* 外循环提供要检测的数 k*/ ,内循环,10 no,11 yes,12 no,输

16、出: 10 no 11 yes 12 no,6.8 应用实例,求Fibonacci 数列 1,1,2,3,5,8.的前20项 递推公式: f1=1,f2=1 fi=fi-1+fi-2 (i=3,4,20),main( ) long f1,f2,f; int i; f1=f2=1; printf(%12ld %12ldn,f1,f2); for(i=3;i=20;i+) f=f1+f2; f1=f2;f2=f;/* 为下一项做准备*/ printf(%12ld ,f); if(i%2=0) printf(“n”);/*每行2个数*/ ,6.8 应用实例,f1,f2,f1,f2,f1 .,main

17、( ) long f1,f2; int i; f1=f2=1; for(i=1;i=10;i+) printf(%12ld %12ldn,f1,f2); f1=f1+f2; f2=f2+f1;/*一次产生两个数*/ ,6.8 应用实例,main( ) int i,j,k,a,t=0; for(i=1;i=9;i+) for(j=1;j=9;j+) for(k=1;k=9;k+) for(a=1;a=9;a+) if(i=j|i=k|i=a) continue; if(j=k|j=a|k=a) continue; if(i+j+k+a!=12) continue; printf(“%d,%d,%

18、d,%d ”,i,j,k,a); t+;if(t%6=0) printf(“n”);/*每行6个排列*/ ,从1到9中选出4个互不相同的数构成排列, 并使它们的和等于12,输出所有这样的排列.如1,2,3,6,循环94次 判断8*94=52488次,6.8 应用实例,main( ) int i,j,k,a,t=0; for(i=1;i=6;i+) for(j=1;j=6;j+) for(k=1;k=6;k+) for(a=1;a=6;a+) if(i=j|i=k|i=a) continue; if(j=k|j=a|k=a) continue; if(i+j+k+a!=12) continue; printf(“%d,%d,%d,%d ”,i,j,k,a); if(t%6=0) printf(“n”); ,4个数中任意3个数的和最小值为6,所以4个数均不超过6,循环64次 判断8* 64=10368次,6.8 应用实例,main( ) int i,j,k,a,t=0; for(i=1;i6|

温馨提示

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

评论

0/150

提交评论