好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

六章循环结构程序设计.ppt

43页
  • 卖家[上传人]:cn****1
  • 文档编号:585162656
  • 上传时间:2024-09-01
  • 文档格式:PPT
  • 文档大小:413.52KB
  • / 43 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第六章 循环结构程序设计第六章第六章 循环结构程序设计循环结构程序设计6.1 while语句语句6.2 do-while语句语句6.3 for语句语句6.4 多重循环多重循环6.5 continue和和break语句语句6.6 练习练习6.7 程序设计举例程序设计举例6.8 作业和实验作业和实验 第六章 循环结构程序设计6.1 while语句语句1. 形式:while(表达式) 循环体2. 执行过程:先判断,后执行 循环体表达式非非0 00 0 第六章 循环结构程序设计例1 用while语句求1+2+3+…+99+100的值main( ){int sum=0, i=1; while(i<=100) {sum=sum+i; i++; } printf(“%d\n”,sum);}sum=0i=1当i<=100sum=sum+ii=i+1输出sum的值 第六章 循环结构程序设计3. 说明(1)while语句是先判断, 后执行 如果循环条件一开始就不成立(条件表达式为假), 则循环一次都不执行。

      2)while循环中的表达式一般是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值非零,就可执行循环体 (3)循环体为多条语句时, 必须采用复合语句,要加上一对花括号 (4)循环体中必须有改变循环条件的语句, 否则循环不能终止, 形成死循环 第六章 循环结构程序设计#includemain( ){int m=0; char ch; ch=getchar( ); while(ch!=‘\n’) {m++; ch=getchar( ); } printf(“%d”, m);}ch=getchar( )m=0当ch!=‘\n’m=m+1ch=getchar( )输出m的值#includemain( ){int m=0; char ch; while( (ch=getchar( ) )!=‘\n’) m++; printf(“%d”, m);}例2 从键盘连续输入字符,直到输入回车为止, 统计输入的字符个数 第六章 循环结构程序设计6.2 do-while语句语句1. 形式:do 循环体 while(表达式) ; 2. 执行过程:先执行,后判断。

      到此do-while语句结束循环体真假表达式 第六章 循环结构程序设计例3 用do-while语句求1+2+3+…+99+100的值main( ){int sum=0, i=1; do {sum=sum+i; i++; }while(i<=100); printf(“%d\n”,sum);}sum=0i=1直到i>100sum=sum+ii=i+1输出sum的值 第六章 循环结构程序设计3. 说明(1)do-while语句是先执行, 后判断如果循环的条件一开始就不成立, 循环也将执行一次2)do-while循环中的表达式一般也是关系表达式或逻辑表达式,但也可以是数值表达式或字符表达式,只要其值非零,就可执行循环体 (3)循环体为多条语句时必须采用复合语句 (4)与while语句一样, 循环体中同样必须有改变循环条件的语句, 否则循环不能终止,将形成死循环 (5)对于同一个问题,while循环与do-while循环的条件表达式是完全相同的 第六章 循环结构程序设计#includemain( ){int m=0; char ch; ch=getchar( ); do {m++; ch=getchar( ); }while(ch!=‘\n’); printf(“%d”, m);}ch=getchar( )m=0直到ch= =‘\n’m=m+1ch=getchar( )输出m的值例4 从键盘连续输入字符,直到输入回车为止, 统计输入的字符个数。

      第六章 循环结构程序设计6.3 for语句语句1. 形式: for( 表达式1 ; 表达式2 ; 表达式3) 循环体2. 执行过程:先判断,后执行e2假真求解e1循环体求解e3循环变量赋初值循环条件循环变量增值 第六章 循环结构程序设计例 for(a=1; a<=3; a++) printf(“%d”, a);执行步骤:①执行a=1,a值为1②判断a<=3,成立,输出1③执行a++,a值为2④判断a<=3,成立,输出2⑤执行a++,a值为3⑥判断a<=3,成立,输出3⑦执行a++,a值为4⑧判断a<=3,不成立,循环结束 第六章 循环结构程序设计例5 用for语句求1+2+3+…+99+100的值main( ){int sum=0, i; for(i=1; i<=100; i++) sum=sum+i; printf(“%d\n”,sum);}sum=0for i=1 to 100sum=sum+i输出sum的值 第六章 循环结构程序设计3. 说明(1)for语句是先判断,后执行。

      如果循环条件一开始就不成立,则循环一次都不执行2)for语句的使用很灵活,形式多样化 (3)循环体为多条语句时, 必须采用复合语句,要加上一对花括号 (4)循环变量的增值并不受限于1,可以为正,也可为负但必须使循环变量的值发生改变,使循环条件能趋向假,否则会造成死循环 第六章 循环结构程序设计4. for语句的灵活使用(1)for语句中的初始化表达式和增值表达式也常为逗号表达式如:for(sum=0, i=1; i<=100; i++) sum=sum+i;又如:for(a=0, b=8; a

      例4可改用for语句来实现:#includemain( ){int m ; char ch; for(m=0; ( ch=getchar( ) ) !=‘\n’ ; m++ ) ; printf(“%d”, m);}比较:比较:几种循环可互相替换,其中for语句的功能最强,使用最灵活 第六章 循环结构程序设计goto语句(无条件转向语句)语句(无条件转向语句)1. 形式:goto 标号;2. 功能:将程序流程无条件地转移到标号所在的那个语句开始执行,与if语句一起可构成循环例 用goto求1~100之和 main( ) {int i=1, sum=0; loop: if(i<=100) {sum=sum+i; i++; goto loop; } printf(“%d”, sum); } 第六章 循环结构程序设计6.4 多重循环多重循环 当一个循环体内又包含另一个完整的循环结构时,称为多重循环或循环嵌套,其循环结构可用上述三种循环语句的任意一种。

      形如: sum=0; for(a=1;a<=3;a++) for(b=1;b<=3;b++) sum=sum+b; 内外重循环的循环变量不同,b变化的速度比a快,赋值语句共执行9次 第六章 循环结构程序设计例6 求s=1+(1+2)+(1+2+3)+…+(1+2+3+…+100)的值t=0for j=1 to it=t+js=0for i=1 to 100s=s+t输出s的值求出第i个加项tmain( ){int i, j, t; long s; for(s=0, i=1; i<=100; i++) { t=0; for(j=1; j<=i; j++) t=t+j; s=s+t; } printf(“s=%ld\n”, s);} 第六章 循环结构程序设计例7 打印九九表(每个数占4列) 第六章 循环结构程序设计S1:打印表头S2:打印分隔线S3:打印表体(1)打印表头 for(i=1; i<=9; i++) printf(“%4d”, i );(2)打印分隔线 for(i=1; i<=36; i++) printf(“%c”, ‘-’ );(3)打印表体 for(i=1; i<=9; i++) 打印第i行 第六章 循环结构程序设计进一步考虑如何“打印第i行”?for(j=1; j<=9; j++) 打印第j个数“打印第j个数”即在第i行的第j列上打印一个数,大小为i*j,占4列,故可写为: printf(“%4d”, i*j);最后考虑如何“换行”?显然不能在每个数字后面都换行,而应该在第九个数字后面换行。

      因此,换行的语句不应该放在第二重循环内,而应在第二重循环外,与第二重循环并列 第六章 循环结构程序设计main( ){int i, j; for(i=1; i<=9; i++) /*打印表头*/ printf(“%4d”, i ); printf(“\n”); for(i=1; i<=36; i++) /*打印分隔线*/ printf(“%c”, ‘-’ ); printf(“\n”); for(i=1; i<=9; i++) /*用双重循环打印表体*/ { for(j=1; j<=9; j++) printf(“%4d”, i*j); printf(“\n”); /*换行*/ }} 第六章 循环结构程序设计6.5 continue和和break语句语句6.5.1 continue语句语句 1. 格式:continue;  2. 功能:终止本次循环的执行,即跳过当前这次循环中continue语句后尚未执行的语句而立即开始下一轮循环对于while和do-while来讲,这意味着立即进行下一次循环条件的判断;而对于for语句来讲,则意味着立即求解表达式3。

       3. 说明:continue语句往往与if 语句联用 第六章 循环结构程序设计例 main( ) {int n; for(n=1; n<=20; n++) { if(n%3= =0) continue; printf(“%d_”, n); } }功能:打印1~20之间不能被3整除的数 第六章 循环结构程序设计6.5.2 break语句语句1. 格式:break;2. 功能:跳出switch结构,也可以跳出循环结果,提前结束一整个循环,执行循环结构后面的语句3. 说明:(1) break语句只能用于switch结构或循环结构,且往往与if 语句联用2)在循环语句嵌套使用的情况下, break语句只能跳出(或终止)它所在的循环,而不能同时跳出(或终止)多层循环 第六章 循环结构程序设计#define PI 3.1415926 main( ) { int r ;  float area ;  for (r=1; r<=10; r++) { area=PI*r*r;  if (area>100) break;  printf("r: %d,area is: %f\n", r, area);  } } 功能:计算半径为1~10的圆的面积,直到面积大于100为止。

      第六章 循环结构程序设计6.6 练习练习1. 下列程序段的输出结果是( ) x=3; do printf(“%d”, x--); while(!x);A.321 B.3 C.21 D.2102. 下面程序的输出结果为( )main( ){int y=10; while( y- - ) ; printf(“y=%d”, y);}A.y=0 B.while构成死循环 C.y=1 D.y= -1BD 第六章 循环结构程序设计3. 以下程序的输出结果是( )includemain( ){int i; for(i=1; i<5; i++) { if(i%2) putchar(‘<’); else continue; putchar(‘>’); } putchar(‘#’);}A.< > < > < > # B.> < > < > < # C.< > < > # D.> < > < #C 第六章 循环结构程序设计4.下述for循环语句( )。

      int i, k; for(i=0, k= -1; k=1; i++, k++) printf(“***”);A.判断循环结束的条件非法 B.是无限循环C.只循环一次 D.一次也不循环5. 执行下列语句的结果为( ) for(i=0; i<5; ++i) { if( i= =2) break; printf(“%d”, i ); }A.01 B.0134 C.01234 D.不打印BA 第六章 循环结构程序设计5. 若x,y为int型变量,下列语句结果为 for(x=1; x<5; x=x+2) { for(y=2; y<5; y++) printf(“%2d”, x*y); if(y= =5) printf(“\n”); }_2_3_4_6_912 第六章 循环结构程序设计6.7 程序设计举例程序设计举例6.7.1 两种基本算法两种基本算法1. 穷举法:对问题所有可能出现的状态一一测试,直到找到解或将全部可能的状态都测试过为止。

      2. 迭代法:用新值取代旧值,或由旧值递推出新值 主要考虑: ①初值:在循环体外给出 ②迭代公式:通常即为循环体 ③迭代次数:循环条件的设定 第六章 循环结构程序设计6.7.2 迭代法的应用迭代法的应用例8 用 …公式求出π的近似值,直到最后一项的绝对值小于10-6为止考虑: ①迭代公式 ②迭代次数 ③初值 第六章 循环结构程序设计#includemain( ){int s; float n, t, pi; t=1; pi=0; n=1; s=1; while( fabs(t) >=1e-6 ) { pi=pi+t; n=n+2; s= - s; t=s/n; } pi=pi*4; printf(“pi=%.7f\n”, pi);}t=1, pi=0, n=1, s=1当| t | >= 10-6pi=pi+t输出pi的值n=n+2s = - st=s/npi=pi*4 第六章 循环结构程序设计例9 求Fibonacci数列的前40个数。

      F1=1 (n=1)公式 F2=1 (n=2) Fn=Fn-1+Fn-2 (n>=3)f1=1, f2=1for i=1 to 20f1=f1+f2输出f1,f2的值f2=f2+f1main( ){int i; long f1=1, f2=1; for( i=1; i<=20; i++ ) { printf(“%12ld%12ld”, f1, f2); f1=f1+f2; f2=f2+f1; if(i%2= =0) printf(“\n”); } } 第六章 循环结构程序设计例10 求两个正整数m和n的最大公约数和最小公倍数最小公倍数=m*n/最大公约数最大公约数的求法:辗转相除法其算法可描述为: 当n不为0时,进行辗转操作: r=m%n; m=n; n=r;消去相同的因子,直到n=0时,m的值即为所求的解。

      第六章 循环结构程序设计6.7.3 穷举法的应用穷举法的应用例11 判断n是否素数输入nk=sqrt(n)n%m= =0breakm=m+1for m=2 to k 打印“Yes”打印“No”m<=kYNYN#includemain( ){int n, m, k; scanf(“%d”, &n); k=sqrt(n); for(m=2; m<=k; m++) if(n%m= =0) break; if(m<=k) printf(“No!\n”); else printf(“Yes!\n”);} 第六章 循环结构程序设计例12 求出100~200之间的全部素数k=sqrt(n)n%m= =0breakm=m+1for m=2 to k 打印“Yes”打印“No”m<=kYNYNfor n=100 to 200 #includemain( ){int n, m, k; for(n=101; n<200; n=n+2) {k=sqrt(n); for(m=2; m<=k; m++) if(n%m= =0) break; if(m<=k) printf(“No!\n”); else printf(“Yes!\n”); }} 第六章 循环结构程序设计例13 百钱买百鸡。

      《算经》中提出了“百鸡问题”:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一百钱买百鸡,问鸡翁、母、雏各几何?可得一不定方程问题: cocks+hens+chicks=100 5*cocks+3*hens+chicks/3=100容易得到三个变量的取值范围: cocks: 0~19 hens: 0~33 chicks: 0~100 第六章 循环结构程序设计main( ){int cocks, hens, chicks; for(cocks=0; cocks<=19; cocks++) for( hens=0; hens<=33; hens++) { chicks=100-cocks-hens; if(5*cocks+3*hens+chicks/3= =100) printf(“cocks=%d, hens=%d, chicks=%d\n”, cocks, hens, chicks); }} 第六章 循环结构程序设计例14 译码。

      输入一行字符,将其中的每个字母转换成其后的第4个字母要求输出相应的密码includemain( ){char c; while( (c=getchar( ) )!=‘\n’ ) { if( (c>=‘a’&&c<=‘z’) | | (c>=‘A’&&c<=‘Z’) ) { c=c+4; if( (c>’Z’&&c<‘Z’+4) | | c>’z’) c=c-26; /*避免把已译好的小写字母改动*/ } printf(“%c”, c); }} 第六章 循环结构程序设计6.8 作业和实验作业和实验(一)1.习题6.22.打印如下图形(_表示空格,每行五个*): ***** _***** _ _***** _ _ _***** _ _ _ _*****3.习题6.34.习题6.1 第六章 循环结构程序设计(二)1.习题6.62.求100之内所有素数的平均值。

      3.一道算式中7个数字只能看清3个数字,且第一个数字不为1,试找出辩认不清的数字,算式为:□*(□3+□)=8□9(□表示辩认不清的数字)4.了解习题6.11~6.13的解题思路。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.