1 / 25

本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用 while 语句实现循环 6 .4 用 do…while 语句实现循环

第 6 章 循环控制. 本章教学重点 循环的概念 while 语句 for 语句 多重循环. 本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用 while 语句实现循环 6 .4 用 do…while 语句实现循环 6.5 用 for 语句实现循环 6.6 循环的嵌套 6.7 几种循环的比较 6.8 break 语句和 continue 语句 6.9 程序举例. 6.1 概述. 循环是结构化程序设计的基本结构之一,有着非常重要的应用。 问题 1 :

jorryn
Download Presentation

本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用 while 语句实现循环 6 .4 用 do…while 语句实现循环

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第6章 循环控制 • 本章教学重点 • 循环的概念 • while语句 • for语句 • 多重循环 • 本章教学内容: • 6.1 概述 • 6.2goto语句及用goto语句构成循环 • 6.3 用while语句实现循环 • 6.4 用do…while语句实现循环 • 6.5 用for语句实现循环 • 6.6 循环的嵌套 • 6.7 几种循环的比较 • 6.8 break语句和continue语句 • 6.9 程序举例 计算机工程学院 伍俊明

  2. 6.1 概述 • 循环是结构化程序设计的基本结构之一,有着非常重要的应用。 • 问题1: • 问题2:计算班级80名同学C语言课程的平均成绩 计算机工程学院 伍俊明

  3. 6.2 goto语句及用goto语句实现循环 一、无条件转向语句——goto语句 • 形式: goto 语句标号; 二、标号语句 • 形式: 标号:语句; 三、说明 • goto语句常与if语句一起构成循环 • goto语句可从循环体内跳到循环体外,反之不行。 • goto语句因其破坏结构化原则,很少使用。 四、例6.1: 计算机工程学院 伍俊明

  4. 6.2 goto语句及用goto语句实现循环 • 例:编程计算 6!=1*2*3*4*5*6 /*文件名:jsjc.cpp*/ /*计算 6!=1*2*3*4*5*6*/ #include <stdio.h> void main() { int t=1, i=1; loop:t=t*i; i++; if (i<=6) goto loop; printf("%d!=%d\n", i-1, t); } 计算机工程学院 伍俊明

  5. 6.3 用while语句实现循环 • while语句的一般形式 while (表达式) 语句; • 称为内嵌语句或循环体,可以是基本语句、控制语句,必要时用复合语句 • 是循环重复执行的部分 • 一般为关系表达式或逻辑表达式,也可以是C语言其他类型的合法表达式 • 用来控制循环体是否执行 计算机工程学院 伍俊明

  6. 表达式? 假 真 内嵌语句 6.3 用while语句实现循环 • while语句的执行过程 循环控制条件 循环体 计算机工程学院 伍俊明

  7. 6.3 用while语句实现循环 • 例6.2 编程计算 sum=1+2+3+ … +100 • 思路:寻找加数(通项)与累加和sum的规律 • 一般累加和形式: sum = sum +通项; • 通项ai= i,不同题目差异较大 累加和——存于变量sum中 ,累加形式:sum=sum+i, 非通项部分作为sum初值,故 sum的初值设为1—初始化。 通项ai——加数i,通项ai=i从1变到100, 每循环一次,使i增1,直到i的值超过100。 i的初值设为1—初始化。 程序: 计算机工程学院 伍俊明

  8. 6.3 用while语句实现循环 • 说明: • while语句是循环语句,循环的初始化工作必须放在while语句之前完成,切不可放在循环体的开头 • while语句是“先判断、后执行”,如果条件一开始就不满足,循环体则一次都不执行; • while语句中的条件是循环执行的条件,即条件为假时循环就停止; • 循环体中至少有一条语句能够影响循环条件,防止产生死循环; • while语句适用于循环次数无法预知的情形。 • 一 计算机工程学院 伍俊明

  9. 循环体 假 真 表达式 6.4 用do…while语句实现循环 • do…while语句的一般形式 do 语句; while (表达式); • 执行过程: • 例6.3计算 • 程序: 计算机工程学院 伍俊明

  10. 6.4 用do…while语句实现循环 • 说明 • do…while语句能够实现循环控制,可与while语句等价转换; • do…while语句的循环初始化工作也必须安排在do…while语句之前,不可设置在循环体内; • do…while语句是“先执行、后判断”,所以,循环体至少执行一次,这与while语句不同。 • 循环体同样必须能够影响和控制循环条件,避免发生死循环。 • do…while语句适用于循环次数无法预知的情形。 计算机工程学院 伍俊明

  11. (-1)i x(2i+1) x3 x5 x7 (2i+1)! 3! 5! 7! 6.4 用do…while语句实现循环 • 例编程利用台劳公式计算sinx,误差<10-6: x - + - + …… + sin(x) = #include <stdio.h> #include <math.h> void main() { int i; float s, t, x; printf(“x=”); scanf(“%f”, &x); i=1; s=x; t=x; do { t=t*(-1)*x*x/(2*i*(2*i+1)); s=s+t; i++; } while (fabs(t)>1e-6); printf(“sin(%f)=%f\n”, x, s) } 思路:连乘+累加 T0=x Ti=Ti-1* , i>0 Si =Si-1 +Ti 注意初始化与循环体的设置 (-1)* x2 2i*(2i+1) 计算机工程学院 伍俊明

  12. 6.5 用for语句实现循环 • for语句的一般形式 for (表达式1;表达式2;表达式3) 语句; • 执行过程 循环初始条件 循环控制条件 条件修正式 计算机工程学院 伍俊明

  13. 计算表达式1 表达式2 为真? 假 真 语句 计算表达式3 6.5 用for语句实现循环 • 执行过程 • 例:计算1+2+…+100 sum=0; for ( i=1; i<=100; i++) sum=sum+i; • for语句等价于下列语句: • 表达式1; • while (表达式2) • { 语句; • 表达式3; • } 计算机工程学院 伍俊明

  14. 6.5 用for语句实现循环 • 例:输入10个数,找出其中最大者和最小者 #include <stdio.h> void main( ) { int i, min, max, n; printf(“请输入10个整数:”); scanf(“%d”,&n); max=min=n; for (i=2; i<=10; i++) { scanf ("%d",&n); if (n<min) min=n; if (n>max) max=n; } printf(“最大数=%d,最小数=%d\n",max, min) ; } 计算机工程学院 伍俊明

  15. 6.5 用for语句实现循环 • 说明 • 表达式1中可以完成初始化工作,如果缺省,则初始化工作必须在for语句之前完成。 • 表达式2实际上是循环控制条件,应通过循环体或表达式3中必须能改变其值,防止出现死循环。如要实现无限循环,可以缺省。 • 表达式3常设置有影响循环条件的语句,如果缺省,必须在循环体中进行设置。 • for语句特别适用于可预知或事先计算出循环次数的情形 • 表达式1、表达式2和表达式3均可采用逗号表达式,实现较为复杂的功能。 计算机工程学院 伍俊明

  16. 6.5 用for语句实现循环 • for语句的应用方式 • for (; i<=100; i++) sum+=i; • for (i=1;; i++) sum+=i; • for (i=1; i<=100; ) {sum+=i; i++; } • for ( ; i<=100; ) {sum+=i; i++; } • for (sum=0, i=1; i<=100; i++) sum+=i; • For ( ; ; ) 语句; /*可能出现死循环*/ 计算机工程学院 伍俊明

  17. 6.6 循环的嵌套 • 循环嵌套:在一个循环语句的循环体中包含了其他的循环语句。内循环中还可以嵌套循环,构成多层循环。 • while语句、do…while语句、for语句可以相互嵌套。 • while语句、for语句嵌套其他循环语句: while (…) { … while (…) {…} … } while (…) { … for(…; …; …) {…} … } while (…) { … do while (…) {…} … } for (…; …; …) { … do while (…) {…} … } for (…; …; …) { … while (…) {…} … } for (…; …; …) { … for(…; …; …) {…} … } 计算机工程学院 伍俊明

  18. 6.6 循环的嵌套 • 循环嵌套应用举例 s=1!+2!+…+20! #include <stdio.h> void main() { int i, j; long sum, factor; for (sum=0, i=1; i<=20; i++) { factor=1; for (j=1; j<=i; j++) factor=factor*j; sum=sum+factor; } printf(“sum=%ld\n”, sum); } 计算机工程学院 伍俊明

  19. 6.8 break语句和continue语句 #include <stdio.h> void main(){int n,i;for(n=2; n<=100; n++){for(i=2; i<n; i++)if(n % i==0) break;if(i>=n) printf("\t%d", n);} /*for n*/} /*main*/ 计算机工程学院 伍俊明

  20. 6.8 break语句和continue语句 6.8.2 continue语句——循环的短路 • 形式 continue; • 功能:结束循环体的执行,直接进入下一轮循环 • 例6.5 输出100~200之间不能被3整除的数 #include <stdio.h> void main(){int n;for(n=100; n<=200; n++){if (n % 3 == 0)continue;printf(“%5d”, n);} /*for n*/} /*main*/ 计算机工程学院 伍俊明

  21. 6.9 程序举例 • 例6.6 计算π的值,要求误差小于10-6。 π/4≈1-1/3+1/5-1/7+… • 解题思路 • 累加和形式:pi=pi+通项 • 通项:(-1)i+1/(2*i-1)——正负相间! • 公式只计算了π/4,所得和需乘以4! • 程序: 计算机工程学院 伍俊明

  22. 6.9 程序举例 • 例6.7 求Fibonacci数列的前40项——迭代法 • F1=F2=1 • Fn=Fn-2+Fn-1,n≥2 • 解题思路 • 前两项直接赋值,以后各项为前两项之和 • 一行输出4个数 if (个数 % 4 == 0) printf(“\n”); • 程序: 计算机工程学院 伍俊明

  23. 6.9 程序举例 • 例6.10 字母加密:输入 一行明文,输出其密文。 • 密码方案:A变成E,a变成e,以后每个字母变成其后的第4个字母,但W、X、Y、Z分别变成A、B、C、D,w、x、y、z、分别变成a、b、c、d • 解题思路 • 对于明文字母c:‘A’~‘Z’以及‘a’~‘z’,将其ASCII码加4 • 加4后若ASCII码在‘Z’~‘Z’+4以及‘z’~‘z’+4之间,将c减去26 • 程序 计算机工程学院 伍俊明

  24. 6.9 程序举例 • 例:输出几何图形 ABCDEFGHIJKLM*NOPQRSTUVWXYZ BCDEFGHIJKLM*NOPQRSTUVWXY CDEFGHIJKLM*NOPQRSTUVWX DEFGHIJKLM*NOPQRSTUVW EFGHIJKLM*NOPQRSTUV FGHIJKLM*NOPQRSTU GHIJKLM*NOPQRST HIJKLM*NOPQRS IJKLM*NOPQR JKLM*NOPQ KLM*NOP LM*NO M*N * #include <stdio.h> void main(){char c; int i; for(i=0;i<13;i++) { for(c=i; c<13; c++) printf(“%c”, c+65); /*每行左半部分*/ printf(“*”); /*中间的星号*/ for(; c<26-i; c++) printf(“%c”, c+65); /*每行右半部分*/ printf(“\n”); /*一行结束后换行*/ } /*for i*/ printf(“*\n”); /*最后一行星号*/} • 解题思路 • 英文字母共26个,图形中字母共26/2行 • 第i行: • 左边从第i个字母开始一直到M • 中间一个* • 右边从N到27-i个字母 计算机工程学院 伍俊明

  25. 第6章 循环控制 • 作业(P129) • 6.1 • 6.5 • 6.6(上机) • 6.7 • 6.8(上机) • 6.11 • 6.14(上机) 计算机工程学院 伍俊明

More Related