本章教学内容: 6 . 1 概述 6 . 2 goto 语句及用 goto 语句构成循环 6 . 3 用...
DESCRIPTION
第 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 : - PowerPoint PPT PresentationTRANSCRIPT
1计算机工程学院 伍俊明
本章教学内容: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 章 循环控制
本章教学重点 循环的概念 while 语句 for 语句 多重循环
2
6.1 概述循环是结构化程序设计的基本结构之一,有着非常重要的应用。
问题 1 :
问题 2 :计算班级 80 名同学 C 语言课程的平均成绩
计算机工程学院 伍俊明
100
1n
y n
3
6.2 goto 语句及用 goto 语句实现循环
一、无条件转向语句—— goto 语句形式: goto 语句标号;
二、标号语句形式: 标号:语句;
三、说明goto 语句常与 if 语句一起构成循环goto 语句可从循环体内跳到循环体外,反之不行。goto 语句因其破坏结构化原则,很少使用。
四、例 6.1 :计算机工程学院 伍俊明
100
1n
y n6-1.CPP
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 (表达式)
语句;
计算机工程学院 伍俊明
一般为一般为关系关系表达式表达式或或逻辑逻辑表达式,也表达式,也可以是可以是 CC 语言其他语言其他类型的合法表达式类型的合法表达式
用来控制循环体是用来控制循环体是否执行否执行
称为称为内嵌语句内嵌语句或或循循环体环体,可以是基本,可以是基本语句、控制语句,语句、控制语句,必要时用必要时用复合语句复合语句
是循环重复执行的是循环重复执行的部分 部分
6
6.3 用 while 语句实现循环while 语句的执行过程
计算机工程学院 伍俊明
假假
真真
表达式 ?
内嵌语句
循环控制条件循环控制条件
循环体循环体
7
6.3 用 while 语句实现循环例 6.2 编程计算 sum=1+2+3+ … +100
思路:寻找加数(通项)与累加和 sum 的规律 一般累加和形式: sum = sum + 通项; 通项 ai = i ,不同题目差异较大
计算机工程学院 伍俊明
累加和——存于变量 sumsum 中 ,累加形式: sum=sum+isum=sum+i , 非通项部分作为 sumsum 初值,故 sumsum 的初值初值设为 1— 初始初始
化化。通项 ai—— 加数 ii ,,通项 ai=i 从 1 变到 100 , 每循环一次,使 i 增 1 ,直到 i 的值超过 100 。 ii 的初值初值设为 1— 初始化初始化。程序: 6-2.CPP
8
6.3 用 while 语句实现循环说明: while 语句是循环语句,循环的初始化工作必须放
在 while 语句之前完成,切不可放在循环体的开头 while 语句是“先判断、后执行”,如果条件一开
始就不满足,循环体则一次都不执行; while 语句中的条件是循环执行的条件,即条件为
假时循环就停止; 循环体中至少有一条语句能够影响循环条件,防止
产生死循环; while 语句适用于循环次数无法预知的情形。
一计算机工程学院 伍俊明
9
6.4 用 do…while 语句实现循环
do…while 语句的一般形式 do
语句;语句; while (表达式表达式);
执行过程:
计算机工程学院 伍俊明
假
真
循环体
表达式
例例 6.36.3 计算计算
程序:程序:
100
1n
y n
6-3.CPP
10
6.4 用 do…while 语句实现循环
说明 do…while 语句能够实现循环控制,可与 while
语句等价转换; do…while 语句的循环初始化工作也必须安排在
do…while 语句之前,不可设置在循环体内; do…while 语句是“先执行、后判断”,所以,
循环体至少执行一次,这与 while 语句不同。 循环体同样必须能够影响和控制循环条件,避免
发生死循环。 do…while 语句适用于循环次数无法预知的情形
。计算机工程学院 伍俊明
11
6.4 用 do…while 语句实现循环
例编程利用台劳公式计算 sinx ,误差 <10-6 :
计算机工程学院 伍俊明
sin(x) = x - x3
3!+ x5
5!- x7
7!+ …… + (-1)i x(2i+1)
(2i+1)!
#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
6.5 用 for 语句实现循环执行过程
计算机工程学院 伍俊明
假
真
计算表达式 1
语句
计算表达式 3
表达式 2为真 ?
例:计算 1+2+…+100
sum=0; for ( i=1; i<=100; i++) for ( i=1; i<=100; i++) sum=sum+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 (…){ … do while (…) {…} …}
while (…){ … for(…; …; …) {…} …}
for (…; …; …){ … while (…) {…} …}
for (…; …; …){ … do 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 !
程序:
计算机工程学院 伍俊明
6-6.CPP
22
6.9 程序举例例 6.7 求 Fibonacci 数列的前 40 项——迭代法 F1=F2=1
Fn=Fn-2+Fn-1 , n≥2
解题思路 前两项直接赋值,以后各项为前两项之和 一行输出 4 个数 if ( 个数 % 4 == 0) printf(“\
n”);
程序:
计算机工程学院 伍俊明
6-7.CPP
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
程序
计算机工程学院 伍俊明
6-10.CPP
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 *
计算机工程学院 伍俊明
解题思路 英文字母共 26 个,图形
中字母共 26/2 行 第 i 行:
左边从第 i 个字母开始一直到 M
中间一个 *
右边从 N 到 27-i 个字母
#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”); /* 最后一行星号 */}
25
第 6 章 循环控制作业( P129 ) 6.1 6.5 6.6 (上机) 6.7 6.8 (上机) 6.11 6.14 (上机)
计算机工程学院 伍俊明