《第3章控制语句ppt课件.ppt》由会员分享,可在线阅读,更多相关《第3章控制语句ppt课件.ppt(112页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、在此输入您的封面副标题第3章 控制语句Virus中国水利水电出版社中国水利水电出版社第4章控制语句 4.4循环语句循环语句4.3 选择结构程序设计选择结构程序设计4.2 顺序结构程序设计顺序结构程序设计4.1 控制语句概述控制语句概述教学要求:理解:常用的控制语句实例。掌握:控制语句的概念和常用的几种控制语句,特别是选择语句、循环语句。4.1 控制语句概述高级语言源程序的基本组成单位是语句。语句按照功能可以分为两类:一类用于描述计算机执行的操作运算,称为操作运算语句,比如表达式语句;另一类是控制操作运算语句的执行顺序或者说控制程序流程,称为控制语句,比如选择语句。C语言提供了相应的语句,如表达
2、式语句、块语句、选择语句和循环语句等,实现了结构化程序设计所需要的三种基本控制结构:顺序结构、选择结构和循环结构,如图4-1所示。4.1 控制语句概述图4-1 三种基本结构4.2 顺序结构程序设计顺序结构程序是由顺序执行语句组成的程序,程序运行是按照语句物理位置的先后次序顺序进行的,不发生控制转移,所以它是三种基本结构中最简单的一种。顺序结构程序一般包括以下几个部分:1. 程序开头的编译预处理命令#include等。在程序中引用库函数时,必须实用编译预处理命令#include,将库函数所在的头文件包含进来。4.2 顺序结构程序设计2. 顺序结构程序的函数体中,是完成具体功能的各个语句,主要包括
3、:(1)变量定义语句。(2)数据输入语句。(3)数据处理语句。(4)数据输出语句。4.2 顺序结构程序设计下面来看一个顺序结构程序的例子。例 4-1 输入任意两个整数,求它们的和、平均值及和的平方根。/Ch04_01.c#include #include void main() int x1 , x2, sum ; float aver , root; printf(Please input two integers: ); scanf(“%d,%d”,&x1,&x2);4.2 顺序结构程序设计 sum=x1+x2 ; aver=sum/2.0; root=sqrt(sum); printf(
4、“x1=%d, x2=%d n”,x1,x2); printf(“sum =%f, average =%f, root=%f n”, sum, average, root); 程序运行结果为: Please input two integers: 1 2 x1=1, x2=2sum=3, average=1.5, root=1.73205 4.3 选择结构程序设计选择结构是用来判断所给定的条件是否满足,并根据判定的结果(真或假)决定哪些语句被执行。C中构成选择结构的语句有条件语句(if语句及if-else语句)和开关语句(switch语句)。4.3.1 if语句if语句是用来实现选择结构的语句
5、。它首先判断给定的条件是否成立,根据判断的结果(真或假)决定某个分支是否执行。4.3 选择结构程序设计其语法形式为:if () 执行时首先计算表达式的值,若表达式值为true,则执行语句1;否则不执行语句1。直接执行下一条语句。例如: if (xy) max=x;4.3 选择结构程序设计例 4-2 输入任意三个整数,求三个数中的最大值。/Ch04_02.c#include void main() int num1,num2,num3,max ; printf(“Please input three numbers:”); scanf(“%d,%d,%d”,&num1,&num2,&num3);
6、 max=num1; if(num2max) max=num2; if(num3max) max=num3; printf(“The three numbers are:%d,%d,%dn”,num1,num2,num3); printf(“The max of three numbers is: %dn”,max);4.3 选择结构程序设计程序运行结果为: Please input three numbers: 10,25,19The three numbers are:10,25,19The max of three numbers is:254.3 选择结构程序设计4.3.2 if-el
7、se语句If-else语句是用来实现选择结构的语句,它是if语句的双分支结构。If-else语句首先判断给定的条件是否成立,根据判断的结果(真或假)决定执行两个分支中的一个。其语法形式为:if () else 执行时首先计算表达式的值,若表达式值为true,则执行语句1;否则执行语句2。4.3 选择结构程序设计下面来看一个if-else语句构成的选择结构程序实例。例 4-3 输入一个整数,判断它是否既是3的倍数又是5的倍数。/Ch04_03.c#include void main()int num; printf(“Please input an integer:”); scanf(“%d”,
8、&num); if(num%3= =0& num%5= =0) printf(“It is the multiple of 3 and 5!n”); else printf(“It isnt the multiple of 3 and 5!n”);4.3 选择结构程序设计程序运行结果为: Please input an integer: 15It is the multiple of 3 and 5!4.3 选择结构程序设计4.3.3 if语句嵌套处理多分支的情况时,if语句允许嵌套。所谓嵌套是指在if 或 if else 中的语句1或语句2部分中再使用if或 if else语句。if语句的嵌
9、套中,else部分总是与前面最近的、可见的、还没有配对的if配对。为避免匹配错误,最好将内嵌的if语句,一律用大括号括起来,增加程序的可读性。下面来看两个if语句嵌套的实例。4.3 选择结构程序设计例 4-4 比较两个整数的大小。/Ch04_04.c#include void main()int x,y;printf(Enter x and y: );scanf(“%d,%d”,&x,&y);if(x!=y)if(xy)printf(“xyn”);elseprintf(“xyn”);elseprintf(“x=yn”);4.3 选择结构程序设计执行该程序,运行结果1:Enter x and y
10、: 4 6 xy运行结果3:Enter x and y: 7 7 x=y4.3 选择结构程序设计例 4-5 求分段函数y=f(x)的值,f(x)的表达式如下: x2 1 (x1)4.3 选择结构程序设计/Ch04_5.c#include void main()float x,y;printf(Enter x: );scanf(“%f “,&x);if(x=-1&x=1)y=x*x;else y=x*x+1;printf(f(x)=%fn,y);4.3 选择结构程序设计执行该程序,运行结果1:Enter x: 3 f(x)=8运行结果2:Enter x: 1 f(x)=1运行结果3:Enter
11、x: 2 f(x)=54.3 选择结构程序设计switch语句if语句的嵌套,适用于多种情况的选择判断,这种实现多分支处理的程序结构,也称为多分支选择结构。若用if语句处理多分支结构则可能使嵌套太多,影响程序的可读性。C语言提供了直接实现多分支选择结构的语句:switch语句,也叫开关语句。switch语句的语法形式如下:switch () case :语句1;break; case :语句2;break; . case :语句n;break; default:语句 n+1;break; 4.3 选择结构程序设计switch语句的执行顺序是:首先计算switch语句中表达式的值,当某个case
12、后面的常量表达式的值与switch后面表达式的值相同时,就执行该case后面的语句;当执行到break语句时,跳出switch语句,转向执行switch语句的下一条;如果没有任何一个case后面的常量表达式的值,与switch后面表达式的值相同时,则执行default 后面的语句。 4.3 选择结构程序设计使用switch语句需要注意的地方:1. switch后面的表达式可以是整型、字符型或枚举型表达式,case后面的常量表达式的类型必须与其匹配。2. 每个case后面常量表达式的值必须各不相同,各case及default子句的先后次序不影响程序执行结果。3. 每个case分支可以有多条语句,
13、但不必用 。4. case后面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,所以必须加上break语句,以便结束switch语句,否则会从入口点开始一直执行到switch结构的结束点。5. 当若干分支需要执行相同操作时,可以使多个case分支共用一组语句。4.3 选择结构程序设计 下面 来看两switch语句应用的实例。例 4-6 用switch语句完成一个简单的计算器,能实现两个浮点数的加减乘除运算。/Ch04_06.c#include void main()float x,y; /运算数char oper; /运算符printf(Enter x,
14、oper,y: );scanf(“%f,%c,%f ”,&x,&oper,&y);switch(oper)case +: printf(x+y=%fn,x+y); break;4.3 选择结构程序设计case -: printf(x-y=%fn,x-y); break;case *:printf(x*y=%fn,x*y); break;case /: if(y=0) printf(divisor is zero!n); break; printf(x/y=%fn,x/y); break;default: printf(operator has no effect!n );4.3 选择结构程序设
15、计执行该程序,运行结果1:Enter x,oper,y: 5+5 x+y=10运行结果2:Enter x,oper,y: 9/0 divisor is zero!运行结果3:Enter x,oper,y: 26 operator has no effect!4.3 选择结构程序设计例 4-7 用switch语句完成一个分制转换程序。用户随机输入一个分数,如果分数在100-90之间,则输出优异;如果在89-80之间,则输出优秀;如果在70-79之间,则输出良好;如果在60-69之间,则输出合格;否则输出不及格。 4.3 选择结构程序设计/Ch04_06.c#include void main()
16、float y; /运算数 int m;printf(Enter a gread(0-100): );scanf(“%f ”, &y); m=(int)y; switch(m/10)case 10: case 9: printf(“优异n); break;case 8:printf(优秀n); break;case 7: printf(良好n); break;case 6: printf(合格n); break;default: printf(不及格!n );4.3 选择结构程序设计执行该程序,运行结果1:Enter a gread(0-100): 100 优异运行结果2:Enter a gr
17、ead(0-100): 87 优秀运行结果3:Enter a gread(0-100): 78 良好运行结果4:Enter a gread(0-100): 65 合格运行结果5:Enter a gread(0-100): 55 不及格4.3 选择结构程序设计4.3.5 选择结构程序设计举例例 4-8 输入三个整数x,y,z,请把这三个数由小到大输出。程序分析:我们想办法把最小的数放到x上。先将x与y进行比较,如果xy则将x与y的值进行交换,然后再用x与z进行比较,如果xz则将x与z的值进行交换,这样能使x最小。接下来比较y和z的大小,按照从小到大的顺序输出即可。参考程序源代码:4.3 选择结构
18、程序设计/Ch04_08.c#include void main()int x,y,z,t;scanf(%d%d%d,&x,&y,&z);if (xy)t=x;x=y;y=t; /*交换x,y的值*/if(xz)t=z;z=x;x=t;/*交换x,z的值*/if(yz)t=y;y=z;z=t;/*交换z,y的值*/printf(small to big: %d %d %dn,x,y,z);4.3 选择结构程序设计例 4-9 企业发放的奖金根据利润提成。利润(I)低于或等于10万元时,奖金可提10%;利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7
19、.5%;20万到40万之间时,高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数。4.3 选择结构程序设计程序分析:可以利用数轴来分界,定位。注意定义时需把奖金定义成长整型。参考程序源代码如下:/Ch04_09.c#include void main()long int i;int bonus1,bonus2,bonus4,bonus6,bonus10,bonus;scanf(%ld,&i);bonus1=1000
20、00*0.1;bonus2=bonus1+100000*0.75;bonus4=bonus2+200000*0.5;bonus6=bonus4+200000*0.3;bonus10=bonus6+400000*0.15;4.3 选择结构程序设计if(i=100000)bonus=i*0.1;else if(i=200000)bonus=bonus1+(i-100000)*0.075;else if(i=400000)bonus=bonus2+(i-200000)*0.05;else if(i=600000)bonus=bonus4+(i-400000)*0.03;else if(i=10000
21、00)bonus=bonus6+(i-600000)*0.015;elsebonus=bonus10+(i-1000000)*0.01;printf(bonus=%d,bonus); 4.3 选择结构程序设计例 4-10 输入某年某月某日,判断这一天是这一年的第几天。程序分析:以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需考虑多加一天。参考程序源代码如下:/Ch04_10.c#include void main()4.3 选择结构程序设计int day,month,year,sum,leap;printf(nplease input
22、year,month,dayn);scanf(%d,%d,%d,&year,&month,&day);switch(month)/*先计算某月以前月份的总天数*/case 1:sum=0;break;case 2:sum=31;break;case 3:sum=59;break;case 4:sum=90;break;case 5:sum=120;break;case 6:sum=151;break;4.3 选择结构程序设计case 7:sum=181;break;case 8:sum=212;break;case 9:sum=243;break;case 10:sum=273;break;c
23、ase 11:sum=304;break;case 12:sum=334;break;default:printf(data error);break;4.3 选择结构程序设计sum=sum+day; /*再加上某天的天数*/if(year%400=0|(year%4=0&year%100!=0)/*判断是不是闰年*/leap=1;elseleap=0;if(leap=1&month2)/*如果是闰年且月份大于2,总天数应该加一天*/sum+;printf(It is the %dth day.,sum);4.4循环语句在很多实际问题的处理过程当中,经常会遇到一些具有规律性的重复运算,需要程序
24、中设计某些语句重复执行。循环是计算机解决实际问题的一个重要特性。一组重复执行的语句称作循环体,每一次重复都必须做出继续重复执行还是停止执行的决定,这些决定的条件成为重复的终止条件。循环就是由循环体和终止条件两部分组成。C语言中的循环语句有三种类型: while循环语句、for循环语句和do-while循环语句,另外还可以使用控制语句实现循环的控制。下面给出各种循环语句的语法格式和使用方法。4.4循环语句4.4.1 while循环语句while语句的一般格式如下:while(条件表达式) 循环体其中,while是语句的关键字,在执行while语句时,先对条件表达式进行判断,如果其值为真(非0),
25、则执行循环体中的语句,然后再判断条件表达式的值,重复以上过程,直到条件表达式的值为0时,结束循环,执行结构后面的语句。while的执行流程如图4-2所示:4.4循环语句图4-2while循环4.4循环语句例例4.1编写一个程序计算1到100的和。#include void main() int i=1,sum=0; / 循环变量i赋初值1 ,作控制循环次数 /s赋初值0 (用作累加和) while(i=100) / 循环条件:当i值小于等于100时执行 sum+=i; /累加求和 i+; / 为下一次循环作准备:改变i的值 printf(“%dn”,sum);/输出结果4.4循环语句这个程序的
26、任务就是完成1到100的累加求和。执行累加求和的过程是:先求1+2的和,然后将计算的结果在加上3,如此累计,直到完成1+2+99+100的过程。程序设计思路:先设置两个变量i和sum,i的作用是表示需要累加的数字,sum用来存放累加的和,所以在进入循环之前第一项数字应该是1:int i=1,而此时和应该是0:sum=0。反复执行的操作是:sum+=i; i+; 这两条语句,被称为循环体。作用是不断改变接下来需要累加的数字和更新当前累加的结果。循环执行过程中i的值不断发生变化,直到表达式i=100的值变为false,系统退出循环执行后续的输出操作。此时就得到了累加的最终结果了。其执行结构图如下所
27、示: 4.4循环语句图4-3 while实现1+2+100的和4.4循环语句阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。例如所要求的数是4,则阶乘式是1234,得到的积是24,24就是4的阶乘。 例如所要求的数是6,则阶乘式是1236,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是123n,设得到的积是x,x就是n的阶乘。下面看看如何用while循环实现n的阶乘。例例4.2 编程计算n的阶乘 n!4.4循环语句#include void main() int n; scanf(%d,&n); int i=2,f=1; /循环初始化 while(i=n) /循环条件 f
28、*=i; i+; /为下一次循环作准备 printf(%d!=%dn,n,f); 4.4循环语句使用while循环语句要注意如下两点:1. 一般情况下循环初始化必须在while语句之前给出,而下一次循环的准备工作则在循环体内进行。2. 当循环体仅为一条语句时,循环体两端的花括号可以省略。4.4循环语句4.4.2 for循环语句for语句的一般格式如下:for(表达式1; 表达式2; 表达式3)/循环体for是关键字;循环体可以是一条语句,也可以是复合语句。一般情况下,表达式1是对循环控制变量进行初始化,表达式2为循环条件,等于true或非0时,执行循环体,然后计算表达式3,再判断表达式2的值是
29、否仍为true或非0,若是,继续执行循环体,再计算表达式3,如此反复,直到表达式2等于false或0为止。其执行流程如图4-4所示:4.4循环语句图4-4for循环4.4循环语句for语句的执行过程:1. 先求解表达式1。2. 求解表达式2,若其值为真(值为非0),则执行for语句中指定的内嵌语句,然后执行下面第3步。若为假(值为0),则结束循环,转到第5步。3. 求解表达式3。4. 转回上面第2步骤继续执行。5. 循环结束,执行for语句下面的一个语句 4.4循环语句之所以说for语句的结构清晰,是因为for的三个表达式分工明确合理。三个表达式分别负责循环结构的三个必需的功能:表达式1用作循
30、环结构的初始化,一般为赋值表达式,设定循环变量及其他变量的初始值;表达式2负责循环条件的判断,形式与if语句的控制表达式类似,一般为关系表达式或逻辑表达式;表达式3负责改变表达式2中的循环变量的值,一般也为有赋值作用的表达式。因此,for语句头也可以更清晰地表示为:for ( 初始化表达式; 循环判断表达式; 循环变量控制表达式 )4.4循环语句这个三个表达式都可以省略,但是中间的分号必须保留。此外,可以将表达式1提到for语句前面,将表达式2放在操作的后面,如下所示:表达式1;for ( ; 表达式2; ) 语句;表达式3; 此时,for语句的初始化表达式和循环变量控制表达式均为空,但是其功
31、能和执行顺序与标准形式完全一致。如果表达式2为空,则将表达式2的值视为真。此时,该语句将陷入死循环,反复执行for体内的操作。如下所示:for ( 表达式1; ; 表达式3 ) 语句;4.4循环语句for循环结构中的三个表达式都可以使用逗号表达式,但并不是都提倡使用逗号表达式。在循环开始阶段,若需要被初始化的变量多于一个时,则可以将多个赋值语句使用逗号表达式连接在一起,作为for语句的第一个表达式。下面是在for头中初始化三个变量的例子:for (变量1 = 常量1, 变量2 = 常量2, 变量3 = 常量3; 表达式2; 表达式3) 操作;而当每次循环后,需要改变的循环变量多于一个时,可以使
32、用逗号表达式作为for语句的最后一个表达式。如下例所示: 4.4循环语句/* 求数列1,3,5,7,的前100个数的和 */for (i = 1, count = 0, sum = 0; count 100; i += 2, +count) sum += i; 这种方法虽然没有任何语法错误,但是在程序的可读性上面来讲却不是最好的,所以在for循环结构中的三个表达式还是使用无逗号的简单表达式为好。下面我们使用for循环重新实现1+2+100的求和。4.4循环语句例例4-3 使用for循环求1+2+100的和。#include main() int i;int sum; for(i=1,sum=0
33、;i=100;i+) sum+=i; printf(sum=%dn,sum);4.4循环语句流程图如图4-5所示,在for循环中: 初始表达式:i = 1,sum = 0循环条件表达式:i= 100变量增值表达式:i+4.4循环语句图4-5 用for实现1+2+100的求和 4.4循环语句1. 如果for语句的循环体由多个语句组成,则必须用左右花括号“ ”括起来,使其形成复合语句。例如,把变量增值表达式移到循环体中,从而在for中省略变量增值表达式。即上式可改写成 for(i=1,sum=0;i=100; )sum = sum+i; i+;2. for语句中的初始表达式和变量增值表达式既可以是
34、一个简单表达式,也可以是由逗号运算符将多个表达式连接起来。 3. for语句中的循环条件表达式是关系表达式或逻辑表达式,其值取逻辑值,即“真”或“假”。用来控制循环次数。4. for语句中的任何一个表达式都可以缺省,但分号“;”一定要保留。缺省表达式部分的功能,可以用其它语句去完成。 4.4循环语句我们以例4-3中的for循环语句: for(i=1,sum=0;i=100;k+)sum =sum+i;为例,说明如下几种等价的缺省形式: (1)缺省初始表达式:for( ;循环条件表达式;变量增值表达式) i= 1; sum =0; /*把初始表达式移出在循环语句的前面*/ for( ; i100
35、)break; /* 通过break语句跳出循环体,详见本章节*/ sum =sum+i;4.4循环语句(3)缺省变量增值表达式:for(初始表达式;循环条件表达式; ) for(i=1,sum=0; i100)break; /* 通过break语句跳出循环体,详见本章节*/sum =sum+i;4.4循环语句(5)缺省循环条件表达式和变量增值表达式:for(初始表达式; ; ) for(i=1,sum=0; ; ) if(i100)break; /* 通过break语句跳出循环体,详见本章节*/sum =sum+i;i+;(6)全部缺省: for( ; ; )i=1;sum=0;for( ;
36、 ; ) if(i100)break; /* 通过break语句跳出循环体,详见本章节*/sum =sum+i;i+;4.4循环语句(7)循环体语句也可以是空语句,如本例可改为: for(i=1,sum=0;ki=100; sum = sum+i; i+) ; 4.4循环语句例例 4-4用for循环语句编程计算n的阶乘n!void main() int n,i,f;scanf(%d,&n); / i=2,f=1为循环初始化, i=n是循环条件, for(i=2,f=1;i=n;i+) / i+是为下一次循环做准备 f*=i; / 循环体:将变量f、i当前的值相乘/积存入f中 printf(%d
37、!=%dn,n,f); 对于所有的while语句和for语句,都可以相互转化。4.4循环语句当for语句头中省略了负责初始化功能的第一个表达式和负责改变循环变量的第三个表达式时,for语句和while语句是完全相等的。即while (表达式) 循环体;等效于:for (; 表达式; ;) 循环体;4.4循环语句而完整的for语句也可以通过表达式位置的调整使用while语句来实现完全相同的功能。如下所示:for (表达式1; 表达式2; 表达式3) 循环体;可以使用while语句改写为: 表达式1;while (表达式2) 循环体;表达式3; 4.4循环语句4.4.3do-while循环语句do
38、-while语句是while语句的一个变体。for语句与while语句都是对进入循环进行条件判断,先做条件判断,再执行循环体;而do-while则是对跳出循环进行条件判断,先执行循环体,后再做条件判断。do-while语句的一般格式如下:do/ 循环体while(条件表达式);do和while都是关键字;循环体可以是一条语句,也可以是复合语句。当语句执行到while时,将判断表达式的值是否为true或非0值,若为true,则继续执行循环体,直到某一次表达式的值为false或0时跳出循环,执行后续语句。其执行流程如图4-6所示: 4.4循环语句图4-6do-while结构4.4循环语句例例4-5
39、 do-while实现求1+2+100的和。void main() int i,sum=0; i=1; do sum=sum+i; i+; while(i=100); printf(%d,sum); 其执行结构图如图4-7所示: 4.4循环语句图4-7 do-while实现求1+2+100的和4.4循环语句例例4-6 用do-while循环语句编程计算阶乘n!。void main() int n; scanf(%d,&n); int i=2,f=1; /循环初始化 do f*=i; i+; /下一次循环的准备 while (i=n); /循环条件 printf(%d!=%dn,n,f);4.4
40、循环语句do-while语句在执行的过程中是先执行循环体后判断条件表达式,在循环的过程中至少会执行一次循环体。do-while语句与while语句的语法和功能都十分类似,可以很容易实现相互间的转化。do-while语句的标准形式转化为while语句则为:循环体;while ( 表达式 ) 循环体;在一般情况下,用while语句和用do-while语句处理同一问题时,若二者的循环体部分是一样的,它们的结果也一样。如果while后面的表达式一开始就为假(0值)时,两种循环的结果是不同的。4.4循环语句#include void main ( ) int sum=0,i; scanf(%d,&i);
41、 while (i=10) sum=sum+i; i+; printf(sum=%dn,sum); 4.4循环语句#include void main( ) int sum=0,i; scanf(%d,&i); do sum=sum+i; i+; while (i2)/*如果是闰年且月份大于2,总天数应该加一天*/sum+;printf(It is the %dth day.,sum);此外,break语句还可以使用在for语句、while语句和do-while语句的循环体中,用来改变循环中语句的执行逻辑。其结构如图4-8所示: 4.4循环语句图4-8 break在循环语句中的应用4.4循环语
42、句在循环结构中的break语句的功能是终止本层循环。以while为例代码如下所示:while ( 表达式1 ) 操作1;if ( 表达式2 ) 操作2;break;操作3; 当循环语句的循环体被执行时,在顺序执行语句1中的操作后,如果表达式2的值为true或非0,则执行break 语句,其结果是退出循环转去执行循环的后续操作;否则(表达式2的值为false或0),跳过break 语句,执行语句2中的所有操作,之后进行下一次循环。4.4循环语句例例4-8判断由键盘输入正整数是否是素数。 main() int m,k,i;scanf(%d,&m); k=m-1; for (i=2;i=k;i+)
43、if (m%i=0) break; if(ik+1) printf(%d is a prime numbern,m); else printf(%d is not a prime numbern,m); 4.4循环语句break语句只能终止一层循环。若要终止多层循环,必须多次调用break语句。continue语句是一个控制语句,可以改变循环结构中的语句执行顺序。continue语句只包含关键字continue。其标准形式为:continue;continue语句只能使用在for语句、while语句和do-while语句的循环体中。其功能为结束本次循环,直接开始下一次循环。其结构如图4-9所示
44、: 4.4循环语句图4-9 continue在循环语句中的应用4.4循环语句以while循环语句为例,continue语句的常见使用形式为: while (表达式1) 语句1 if (表达式2) continue; 语句2 当循环语句的循环体被执行时,在顺序执行了语句1中的操作后,如果表达式2的值为true或非0则执行continue 语句,其结果是立即跳过语句2中的所有操作,直接进行下一次循环;否则(表达式2的值为false或0),则跳过continue 语句,执行语句2中的所有操作,之后进行下一次循环。4.4循环语句例例4-9 求之间不能被整除的数。#include stdio.hmain
45、 ( ) int n; for(n=1; n=99)break; 而输出100以内的偶数,可用如下含有continue的循环语句实现: for(i=1; i100 ; i+) if(i%2)continue; printf(“%4d”,i); 4.4循环语句2. 循环嵌套时,break和continue只影响包含它们的最内层循环,与外循环无关。 3. continue语句有点象break语句。但continue语句不造成强制性的中断循环,而是强行执行下一次循环,而break语句则终止本次循环。 break和continue 语句对循环控制的影响如图4-10所示: 4.4循环语句图4-10 br
46、eak和continue 语句对循环控制的影响4.4循环语句4.4.5循环语句的嵌套一个循环的循环体内包含另外一个循环语句,这样的编程方式称之为“循环的嵌套”。循环嵌套时,外层循环执行一次,内层循环从头到尾执行一遍。3种循环(while循环、do-While循环和for循环)不仅可以自身嵌套,而且还可以互相嵌套。下面几种都是合法的形式:1. while( ) while( ) 2. do do while( ); while( ); 4.4循环语句3. for(;) for( ; ; ) (4)while( ) do while( ) 4.4循环语句(5)for(;) while( ) (6)
47、do for( ; ; ) while( )4.4循环语句例例4-10求100之内的素数。main()int n,i;for(n=2;n=100;n+)for(i=2;i=n) printf(t%d,n);4.4循环语句例例4-11利用公式 求 的近似值,直到最后一项的绝对值小于10-6为止。#includemain()int sign=1;float n=1,t=1,pi=0;while(fabs(t)1e-6)pi+=t;n+=2;sign*=-1;t=sign/n;pi*=4;printf(pi=%10.6fn,pi);对于循环次数未知的循环结构,一般不适合使用for语句实现,可以采用w
48、hile语句或do-while语句来实现 。四种循环都可以用来处理同一问题,一般情况下它们可以互相代替。在while循环和do-while循环中,只在while后面的括号内指定循环条件,应在循环体中包含使循环趋于结束的语句。(如i+,或i=i+1等)。for语句的功能更强,凡用while循环能完成的,用for循环都能实现。用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成。而for语句可以在表达式1中实现循环变量的初始化。 4.4循环语句4.4.6循环结构程序设计举例例例4-12我国古代数学家张丘建在算经中出了一道题“鸡翁一,值钱五;鸡母一,
49、值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、鸡母、鸡雏各几何?解题思路:假设鸡翁数为x,鸡母数为y,鸡雏数为z。列方程为:x+y+z=100 5x+3y+z/3=100 算法如下:假设x、y已知,由方程可以得出z=100-x-y由条件可知x和y的值有限制,只可能在0100之间。需要用二重循环实现。每个x和y的组合都对应一个z的值,如果x,y和z的值满足方程,即为所求结果4.4循环语句#include main() int x,y,z; for(x=0;x=20;x+) for(y=0;y=33;y+) z=100-x-y; if(z%3=0&5*x+3*y+z/3=100) printf(“%
50、,d%d,%dn”,x,y,z); 4.4循环语句例例4-13译密码。为使电文保密,往往按一定规律将其转换成密码,收报人再按约定的规律将其译回原文。 思路:可以按以下规律将电文变成密码: 将字母A变成字母E,a变成e,即变成其后的第4个字母,W变成A,X变成B,Y变成C,Z变成D。非字母字符不变4.4 循环语句4.4循环语句#include main( ) char c; while(c=getchar( )!=n) if( c=a&c=A&cZ&cz) c=c-26; printf(%c,c); 4.4循环语句例例4-14九九乘法表。问题分析:九九乘法表中,都是由一个1位整数(用变量i来代表