《程序的控制结构 (2)讲稿.ppt》由会员分享,可在线阅读,更多相关《程序的控制结构 (2)讲稿.ppt(50页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、C C语言程序设计语言程序设计关于程序的控制结构(2)第一页,讲稿共五十页哦C C语言程序设计语言程序设计 分支结构又称选择结构,是结构化程序设计的三种基本结分支结构又称选择结构,是结构化程序设计的三种基本结构之一。在程序设计时,如果需要根据某些条件作出判断,决构之一。在程序设计时,如果需要根据某些条件作出判断,决定不同的处理方式,则要用到分支结构。分支结构能根据条件定不同的处理方式,则要用到分支结构。分支结构能根据条件是否成立自动选择要执行的程序段。是否成立自动选择要执行的程序段。3.1 3.1 分支结构分支结构第二页,讲稿共五十页哦C C语言程序设计语言程序设计3.1.1关系运算符和表达式
2、关系运算符和表达式关系运算符关系运算符种类种类:=!=结合方向:自左向右结合方向:自左向右优先级别:优先级别:=!=优先级优先级10(高)(高)优先级优先级9(低)(低)例例 ca+b /c(a+b)ca+b /c(a+b)a=bc /a=(bc)a=bc /a=(bc)关系表达式的值:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用,用1和和0表示表示例例 int a=3,b=2,c=1,d,f;ab (ab)=c b+cb f=abc/表达式值表达式值1/表达式值表达式值1/表达式值表达式值0/d=1/f=0低于算术运算符,但高于赋低于算术运算符,但高于赋值运算符。值运算符。第三页
3、,讲稿共五十页哦C C语言程序设计语言程序设计关系运算注意:关系运算注意:例例 若若a=0;b=0.5;x=0.3;则则 a=x278在在C中是允许的,中是允许的,值为值为0例例 a0 结果为结果为 A100 结果为结果为10第四页,讲稿共五十页哦C C语言程序设计语言程序设计关系运算注意:关系运算注意:例例 注意区分注意区分“=”与与“=”int a=0,b=1;if(a=b)printf(“a equal to b”);else printf(“a not equal to b”);例例 应避免对应避免对实数实数作相等或不等的判断作相等或不等的判断如如 1.0/3.0*3.0=1.0 结果
4、为结果为可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1e-60第五页,讲稿共五十页哦C C语言程序设计语言程序设计ab!a!ba&ba|b真真假假真真假假假假假假真真真真3.12逻辑运算符和表达式逻辑运算符和表达式逻辑运算符逻辑运算符种类:种类:!&|逻辑运算真值表逻辑运算真值表C C语言中语言中,运算量运算量:0 0表示表示“假假”,非非0 0表示表示“真真”,”,运算结果运算结果:0 0表示表示“假假”,1 1表示表示“真真”,”,真真假假假假假假假假假假真真真真假假假假真真真真真真假假真真真真第六页,讲稿共五十页哦C C语言程序设计语言程序设计例例 a=x&xbl优先级
5、:优先级:l结合方向:结合方向:!:从右向左从右向左&:从左向右从左向右|:从左向右从左向右/(a=x)&(xb)!14&5|4高高低低!算术运算算术运算 关系运算关系运算&|赋值运算赋值运算例例 a=4;b=5;!a a&b a|b 4&0|2 53&2|83)&2|(8b)&(n=cd)/结果结果m=0,n=1补充:补充:第八页,讲稿共五十页哦C C语言程序设计语言程序设计3.1.2 if3.1.2 if语句语句三种形式三种形式 形式一形式一(单分支选择单分支选择):格式:格式:if(表达式表达式)语句语句执行过程:执行过程:表达式表达式语句语句非非0=0例:例:if(xy)printf(
6、“%d”,x);表达式表达式语句语句1语句语句2非非0=0 形式二形式二(双分支选择双分支选择):格式格式:if(表达式表达式)语句语句1 else 语句语句2执行过程:执行过程:例:例:if(xy)max=x;else max=y;第九页,讲稿共五十页哦C C语言程序设计语言程序设计 形式三形式三(多分支选择多分支选择):格式格式:if(表达式表达式1)语句语句1else if(表达式表达式2)语句语句2else if(表达式表达式3)语句语句3.else 语句语句n expr1statemnt1非非0=0expr2expr3statemntnstatemnt3statemnt2非非0非非0
7、=0=0u执行过程:执行过程:例:例:if(xy输输出出 max 的的值值max=ymax=xNoYesxy输输入入x,y开始开始max=y输输出出max结结束束(a)案例案例3.1的流程的流程图图(b)案例案例3.1的的N-S图图max=x图图3-2 3-2 案例案例3.13.1的算法描述的算法描述第十一页,讲稿共五十页哦C C语言程序设计语言程序设计【程序详解】【程序详解】/*ex3-1.c 求两个数的最大数求两个数的最大数*/#include void main()int x,y,max;printf(请输入两个整数请输入两个整数:);scanf(%d%d,&x,&y);if(xy)/判
8、断条件判断条件max=x;elsemax=y;printf(max is :%dn,max);/输出输出max【思考】【思考】求求3个数中的最大数个数中的最大数/最小数最小数或求或求4个数中的最大数个数中的最大数/最小数最小数如何实现?如何实现?第十二页,讲稿共五十页哦C C语言程序设计语言程序设计 (1)在案例在案例3.2中,初学者经常将中,初学者经常将“if(xy)”错误地添加分号,写成错误地添加分号,写成“if(xy);”,这会导致程序错误。,这会导致程序错误。(2)在在if语句中,语句中,条件判断表达式必须用括号括起来条件判断表达式必须用括号括起来。(3)if后的表达式后的表达式一般为
9、关系表达式或逻辑表达式,但也可以是其他表一般为关系表达式或逻辑表达式,但也可以是其他表达式,用达式,用0和非和非0取其逻辑值取其逻辑值。(4)if和和else嵌套可组成多分支选择结构,但要注意嵌套可组成多分支选择结构,但要注意if和和else的配对关系,其的配对关系,其原则是:原则是:else总是和上面最近的未曾配对的总是和上面最近的未曾配对的if配对配对。经验交流经验交流第十三页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.23.2】输入三个数】输入三个数a,b,ca,b,c,要求按由小到大的顺序输出。,要求按由小到大的顺序输出。【目的】掌握少量数据的简单排序算法及交换算法【
10、目的】掌握少量数据的简单排序算法及交换算法【算法分析】【算法分析】(1 1)将三个数分别存入)将三个数分别存入a,b,ca,b,c变量中变量中 (2 2)if(ab)if(ab)将将a a和和b b对换(对换(a a是是a,ba,b中的较小者)中的较小者)(3 3)if(ac)if(ac)将将a a和和c c对换(对换(a a是是a,ca,c中的较小者,因此中的较小者,因此a a是三个数中的最小者)是三个数中的最小者)(4 4)if(bc)if(bc)将将b b和和c c对换(对换(b b是是b,cb,c中的较小者,也是三个数中的次小者)中的较小者,也是三个数中的次小者)(5 5)顺序输出顺序
11、输出a,b,ca,b,c中的值中的值【程序祥解】【程序祥解】/*ex3-2.c 三个数排序三个数排序*/#include void main()int a,b,c,t;printf(请输入三个整数:请输入三个整数:);scanf(%d%d%d,&a,&b,&c);if(ab)t=a;a=b;b=t;/条件成立则交换条件成立则交换a,b if(ac)t=a;a=c;c=t;/条件成立则交换条件成立则交换a,c if(bc)t=b;b=c;c=t;/条件成立则交换条件成立则交换b,c printf(结果是:结果是:%d,%d,%dn,a,b,c);【思考】【思考】4个数个数/5个数的排序如何个数的
12、排序如何实现?实现?第十四页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.33.3】计算以下分段函数的值。】计算以下分段函数的值。【目的】掌握【目的】掌握ifelse构造多分支选择结构的算法构造多分支选择结构的算法【算法分析】【算法分析】(1 1)输入)输入x x的值的值 (2 2)if(x1),yif(x1),y的值为的值为x x,执行,执行(5)(5),否则执行,否则执行(3)(3)(3 3)if(x10)if(x10),y y的值为的值为2*x-12*x-1,执行,执行(5)(5),否则执行,否则执行(4)(4)(4 4)y y的值为的值为3*x-113*x-11 (5
13、5)输出输出y y的值的值【程序祥解】【程序祥解】/*ex3-3.c 求解分段函数求解分段函数*/#include void main()float x,y;printf(请输入请输入x :);scanf(%f,&x);if(x1)y=x;else if(x10)y=2*x-1;else y=3*x-11;printf(x=%.2f,y=%.2fn,x,y);y=2x-1 1 x 10 x x1 3x-11 x 10【思考】【思考】程序中虚线部分有没有其他程序中虚线部分有没有其他的写法?的写法?第十五页,讲稿共五十页哦C C语言程序设计语言程序设计3.1.33.1.3条件表达式条件表达式 条件
14、运算符由条件运算符由“?”和和“:”组成,是一个三目运算符,即有三个参组成,是一个三目运算符,即有三个参与运算的量。与运算的量。条件表达式的一般形式为:条件表达式的一般形式为:表达式表达式1?表达式表达式2:表达式表达式3 条件表达式的求值规则为:条件表达式的求值规则为:先计算表达式先计算表达式1的值,若为真,则计算表达式的值,若为真,则计算表达式2的值并将其作为条件表达式的值,否则计算表达式的值并将其作为条件表达式的值,否则计算表达式3的值并将其作为条件表达式的值并将其作为条件表达式的值的值。第十六页,讲稿共五十页哦C C语言程序设计语言程序设计【案例案例3.43.4】输入一个字符,判断它是
15、否是大写字母,如果是,将它转换成小输入一个字符,判断它是否是大写字母,如果是,将它转换成小字母,如果不是则不转换,然后输出最后得到的字符。字母,如果不是则不转换,然后输出最后得到的字符。【程序详解】【程序详解】/*ex3-4.c 大、小写字母的转换大、小写字母的转换*/#include void main()char ch;printf(请输入一个字符:请输入一个字符:);scanf(%c,&ch);ch=(ch=A&ch=Z)?(ch+32):ch;printf(%cn,ch);if语语句句与与条条件件表表达达式式可可以以表表达达相相同同的的条条件件判判断断问问题题,但但为为了使程序简洁,人
16、们经常使用条件表达式描述。了使程序简洁,人们经常使用条件表达式描述。经验交流经验交流经验交流经验交流【目的】掌握英文字母大小写的转换方法,并练习条件运算符的使用【目的】掌握英文字母大小写的转换方法,并练习条件运算符的使用【思考】【思考】如果输入是的小写字母,如果输入是的小写字母,要求转换为对应的大写字母,要求转换为对应的大写字母,如何实现?如何实现?第十七页,讲稿共五十页哦C C语言程序设计语言程序设计3.1.4 switch语句语句 C语言提供了一种用于多分支结构的选择语句语言提供了一种用于多分支结构的选择语句switch语句,其一般形式为:语句,其一般形式为:switch()case:语句
17、序列语句序列1;case:语句序列语句序列2;case:语句序列语句序列n;default :语句序列语句序列n+1;其执行过程是:先计算其执行过程是:先计算的值,然后自上而下依次与每个的值,然后自上而下依次与每个case后的后的常量表达式值进行比较。当表达式的值与某个常量表达式值进行比较。当表达式的值与某个case后的后的值相等时,就值相等时,就执行该执行该case语句后面的所有语句序列,直到语句后面的所有语句序列,直到switch语句体内的所有语句序列都执行完语句体内的所有语句序列都执行完或遇到或遇到break语句为止。若语句为止。若值与值与switch中所有中所有case的的值都不值都不
18、相等,则执行相等,则执行default后的语句序列后的语句序列n+1。第十八页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.5】根据考试成绩的等级输出相应的百分制分数段,用】根据考试成绩的等级输出相应的百分制分数段,用switch语句实现的程序如下:语句实现的程序如下:【任务要求任务要求】掌握掌握switchswitch语句的使用方法。语句的使用方法。【程序详解】【程序详解】/*ex3-5.c 大、小写字母的转换大、小写字母的转换*/#include void main()char grade;printf(“请输入成绩等级:请输入成绩等级:);scanf(%c,&grade)
19、;switch(grade)case A:printf(90100n);break;case B:printf(8089n);break;case C:printf(7079n);break;case D:printf(6069n);break;case E:printf(60 n);break;default:printf(Error!n);【思考】【思考】如果输入的是百分制成绩,如果输入的是百分制成绩,如何用如何用switch语句实现输出其对语句实现输出其对应的等级?应的等级?第十九页,讲稿共五十页哦C C语言程序设计语言程序设计【归纳总结】【归纳总结】(1)switch后后的计算结果必须
20、为整型或字符型,的计算结果必须为整型或字符型,case后的后的必须是整型常量或字符型常量必须是整型常量或字符型常量。(2)每个每个case后的常量表达式的值必须互不相等,否则就会出现互相后的常量表达式的值必须互不相等,否则就会出现互相矛盾的现象矛盾的现象。(3)在在case后,允许有多个语句,可以不用后,允许有多个语句,可以不用 括起来括起来;(4)default子句可以省略不用子句可以省略不用。(5)多条多条case语句可以共用一组执行语句。语句可以共用一组执行语句。第二十页,讲稿共五十页哦C C语言程序设计语言程序设计复 习C实现选择(分支)结构的方法实现选择(分支)结构的方法ifelse
21、语句语句switch语句语句两种方法均可实现两种方法均可实现单分支单分支、双分支双分支及及多分支多分支选择选择在在if之后的表达式可以是任意类型的表达式,取之后的表达式可以是任意类型的表达式,取逻辑值逻辑值else只能和只能和if配对使用,配对原则是配对使用,配对原则是“else总是和上面最近的未曾配对的总是和上面最近的未曾配对的if配对配对”,决定在哪个,决定在哪个if条件不成立时执行该条件不成立时执行该else之后的语句。之后的语句。else和和if都只能控制其后的都只能控制其后的一条语句一条语句,若有多条语句要用,若有多条语句要用括起来构成复合语句。括起来构成复合语句。switch之后的
22、表达式一般是之后的表达式一般是整型或字符型整型或字符型,其中的,其中的case子句列其可能的值,进入某个子句列其可能的值,进入某个子句执行后只有遇到子句执行后只有遇到break或执行结束后退出或执行结束后退出switch条件运算符:三目运算符,右结合条件运算符:三目运算符,右结合相关算法:相关算法:求最值求最值交换交换简单排序简单排序分段函数分段函数第二十一页,讲稿共五十页哦C C语言程序设计语言程序设计3.23.2循环结构循环结构 在解决实际问题时,常常遇到许多有规律的重复执行的操作在解决实际问题时,常常遇到许多有规律的重复执行的操作过程,利用计算机运算速度快的特点,可以将这些过程写成循环过
23、程,利用计算机运算速度快的特点,可以将这些过程写成循环结构,使计算机反复执行这些操作。结构,使计算机反复执行这些操作。所谓循环就是在给定条件所谓循环就是在给定条件成立时反复执行某一程序段的现象成立时反复执行某一程序段的现象,被反复执行的程序段称被反复执行的程序段称为循环体为循环体。C语言提供三类语句来实现循环:语言提供三类语句来实现循环:while语句语句、dowhile语句语句和和for语句语句。第二十二页,讲稿共五十页哦C C语言程序设计语言程序设计3.2.1 while3.2.1 while语句语句while语句的语法形式为:语句的语法形式为:while()循环体循环体;真真(非非0)表
24、达式表达式循循环环体体假假(0)当表达式成立当表达式成立循循环环体体(a)while语语句的流程句的流程图图(b)while语语句的句的N-S图图其算法描述如图其算法描述如图3-93-9所示:所示:图图3-9 while语语句的算法描述句的算法描述第二十三页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.63.6】求】求1+2+3+1001+2+3+100的值。的值。#include void main()int i,su i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环初值循环终值循环终值循环变量增值循环变量增
25、值循环条件循环条件循环体循环体i=1,sum=0 当当i0)x+;(3)在进入循环之前,应当对有关变量初始化。在进入循环之前,应当对有关变量初始化。第二十五页,讲稿共五十页哦C C语言程序设计语言程序设计3.2.1 dowhile语句语句dowhile语句的语法形式为:语句的语法形式为:do 循环体循环体;while();其算法描述如图其算法描述如图3-12所示。所示。假假(0)表达式表达式循循环环体体真真(非非0)直到表达式不成立直到表达式不成立循循环环体体(a)do-while语语句的流程句的流程图图(b)do-while语语句的句的N-S图图图图3-12 do-while3-12 do-
26、while语句执行流程图语句执行流程图第二十六页,讲稿共五十页哦C C语言程序设计语言程序设计【案例案例3.73.7】统计从键盘输入一行字符的个数统计从键盘输入一行字符的个数(以回车键作为输入结束标记以回车键作为输入结束标记)。【程序【程序详详解】解】/*ex3-7.c 统计统计字符个数字符个数*/#include void main()char ch;int num=0;/字符字符计计数器数器 do ch=getchar();/一次接收一个字符一次接收一个字符 num+;/每接收一个字符,字符每接收一个字符,字符计计数数变变量加量加1 while(ch!=n);/回回车为输车为输入入结结束符
27、束符 printf(您您输输入了入了%d个字符个字符n,num-1);/输输出出计计数数结结果果【思考】【思考】用用while语句改写该程序,或用语句改写该程序,或用dowhile改写改写1+2+100如何实如何实现?现?第二十七页,讲稿共五十页哦C C语言程序设计语言程序设计【归纳总结】【归纳总结】(1)while语句先判断条件后执行循环体语句,有可能一次也语句先判断条件后执行循环体语句,有可能一次也不执行循环体;而不执行循环体;而dowhile语句先执行循环体,后判断循环条件,语句先执行循环体,后判断循环条件,至少会执行一次循环体。至少会执行一次循环体。(2)注意在)注意在do-while
28、循环中,循环中,while();这里的分号必这里的分号必须有,否则有语法错误。须有,否则有语法错误。(3)while 和和 do while语句在第一次循环条件就为真的情况下,语句在第一次循环条件就为真的情况下,可以相互改写而结果不变。可以相互改写而结果不变。第二十八页,讲稿共五十页哦C C语言程序设计语言程序设计3.2.3 for3.2.3 for语句语句 在在C语言中,语言中,for语句使用灵活,功能强大,是使用最多的一类循环控制语句,语句使用灵活,功能强大,是使用最多的一类循环控制语句,其语法形式为:其语法形式为:for(表达式表达式1;表达式表达式2;表达式表达式3)循环体循环体;fo
29、r循环的执行过程如下:循环的执行过程如下:(1)求解表达式求解表达式1。(2)求解表达式求解表达式2,若其值为真,则执行循环体内的语句,转第,若其值为真,则执行循环体内的语句,转第3步;若其值步;若其值为假,则结束循环。为假,则结束循环。(3)求解表达式求解表达式3,转第,转第2步。步。(4)循环结束,执行循环结束,执行for循环外的下一条语句。循环外的下一条语句。第二十九页,讲稿共五十页哦C C语言程序设计语言程序设计forfor循环的算法描述如图循环的算法描述如图3-153-15所示。所示。(a)for语语句的流程句的流程图图假假真真表达式表达式2求解表达式求解表达式1循循环环体体求解表达
30、式求解表达式3循环体循环体当表达式当表达式2为真时为真时求解表达式求解表达式1求解表达式求解表达式3(b)for语语句的句的N-S图图图图3-15 for3-15 for循环的算法描述循环的算法描述第三十页,讲稿共五十页哦C C语言程序设计语言程序设计 【案例【案例3.8】如果能将一张厚度为】如果能将一张厚度为0.05mm的报纸对折,再对折,再对折的报纸对折,再对折,再对折对折对折50次后,报纸的厚度是多少?次后,报纸的厚度是多少?【程序【程序详详解】解】/*ex3-8.c 报纸报纸的的对对折折问题问题*/#includestdio.hvoid main()double a=0.0005;/a
31、表示表示纸纸的厚度,初始的厚度,初始为为0.0005米米 int i;for(i=1;i=50;i+)/对对折折50次次 a=a*2;/每每对对折一次厚度是原来的折一次厚度是原来的2倍倍 printf(这张纸对这张纸对折折50次后厚度次后厚度为为%.2f米米n,a);/保留两位小数保留两位小数输输出出第三十一页,讲稿共五十页哦C C语言程序设计语言程序设计【案例案例3.93.9】求具有求具有性质的四位数。性质的四位数。程序的算法描述如图程序的算法描述如图3-173-17所示。所示。开始开始YesYesNoNoYesYesn=1000n=1000输出输出n n分解后两位分解后两位cdcd分解前两
32、位分解前两位ababn10000n10000NoNo(ab+cd)*(ab+cd)=n(ab+cd)*(ab+cd)=nn+n+结束结束n=1000n=1000分解前两位分解前两位abab分解后两位分解后两位cdcd当当 n10000n10000时时(ab+cd)*(ab+cd)=n(ab+cd)*(ab+cd)=nYesYesNoNon+n+输出输出n n(a)(a)案例案例3.93.9的流程图的流程图(b)(b)案例案例3.93.9的的N-SN-S图图第三十二页,讲稿共五十页哦C C语言程序设计语言程序设计【归纳总结】【归纳总结】for循环中的循环中的“表达式表达式1”、“表达式表达式2”
33、和和“表达式表达式3”都是可选项,即可以缺省,但都是可选项,即可以缺省,但“;”不能缺省。不能缺省。(1)“表达式表达式1”一般用于为进入一般用于为进入for循环的有关变量赋初值,可以是赋值表达式、逗号表达式等。循环的有关变量赋初值,可以是赋值表达式、逗号表达式等。(2)“表达式表达式2”是循环执行条件,每次执行循环体语句前,都要判断条件是否成立,只是循环执行条件,每次执行循环体语句前,都要判断条件是否成立,只要其值非要其值非0就执行循环体。就执行循环体。(3)在循环体语句执行后,立即执行在循环体语句执行后,立即执行“表达式表达式3”,“表达式表达式3”一般用于改变有关变量的值,特一般用于改变
34、有关变量的值,特别是常用于改变与循环条件有关的变量值。别是常用于改变与循环条件有关的变量值。for循环语句可以转换成循环语句可以转换成while循环语句,以下循环语句,以下for语句和语句和while语句等价语句等价for(i=1;i=100;i+)sum=sum+i;i=1;while(i=100)sum=sum+i;i+;经验交流经验交流第三十三页,讲稿共五十页哦C C语言程序设计语言程序设计3.2.4 break3.2.4 break语句和语句和continuecontinue语句语句1 1breakbreak语句语句 breakbreak语句只能用在语句只能用在switchswitch
35、语句和循环语句中,其作用是跳出语句和循环语句中,其作用是跳出switchswitch语句语句或跳出本层循环,转去执行后面的语句。或跳出本层循环,转去执行后面的语句。【案例案例3.103.10】把把316316表示为两数之和,其中一个是表示为两数之和,其中一个是1313的倍数,另一个是的倍数,另一个是1111的倍的倍数数【程序【程序详详解】解】/*ex3-10.c 316分解分解问题问题算法算法*/#include void main()int m;for(m=1;+m)if(316-13*m)%11=0)break;/跳出本跳出本层层循循环环 printf(316=%d+%dn,13*m,31
36、6-13*m);第三十四页,讲稿共五十页哦C C语言程序设计语言程序设计【归纳总结】【归纳总结】使用使用break语句在一些场合下使编程更加灵活、方便语句在一些场合下使编程更加灵活、方便。如上述程。如上述程序,由于循环的次数事先无法确定,如果没有序,由于循环的次数事先无法确定,如果没有break语句,将会语句,将会构成一个死循环。因为使用了构成一个死循环。因为使用了break语句,使得程序在满足条件语句,使得程序在满足条件(316-13*m)%11=0时,直接结束循环。时,直接结束循环。第三十五页,讲稿共五十页哦C C语言程序设计语言程序设计2.continue语句语句 continue语句可
37、以结束本层本次循环,即不再执行循环语句可以结束本层本次循环,即不再执行循环体中体中continue语句之后的语句,转入下一次循环条件的判断语句之后的语句,转入下一次循环条件的判断。与与break语句不同的是,语句不同的是,continue语句只结束本层本次的循环,语句只结束本层本次的循环,并不跳出循环。并不跳出循环。【归纳总结归纳总结】break与与continue在语句形式和执行流程上的区别如图在语句形式和执行流程上的区别如图3-22所示。所示。第三十六页,讲稿共五十页哦C C语言程序设计语言程序设计3.2.5循环的嵌套循环的嵌套 循环的嵌套也称多重循环,即在一个循环语句的循环体中,可以嵌套
38、另一个循环的嵌套也称多重循环,即在一个循环语句的循环体中,可以嵌套另一个循环语句。内嵌的循环语句称内层循环,包含循环的循环称为外循环,内层循环循环语句。内嵌的循环语句称内层循环,包含循环的循环称为外循环,内层循环还可以再包含循环。嵌套循环的执行顺序是:还可以再包含循环。嵌套循环的执行顺序是:外循环执行一次,内循环执行一遍外循环执行一次,内循环执行一遍。常见的循环嵌套类型如图常见的循环嵌套类型如图3-23所示。所示。第三十七页,讲稿共五十页哦C C语言程序设计语言程序设计while()while()while()for(;)while()do while();for(;)while()for(;
39、)do while();for(;)for(;)do for(;)while();do while()while();图3-23 常见的循环嵌套类型第三十八页,讲稿共五十页哦C C语言程序设计语言程序设计 (1)循循环环体体尽尽量量用用一一对对大大括括号号“”括括起起来来,并并采采用用递递缩缩格格式式,这这样样方方便便分分清清结结构构层层次次、提提高高程程序序的可读性。的可读性。(2)当当问问题题需需要要使使用用多多层层循循环环嵌嵌套套编编程程实实现现时时,可可以以分分解解问问题题将将程程序序简简化化为为单单层层循循环环的的情情况况进进行行思思考考,如如案案例例3.13中中,可可用用单单层层循
40、循环环实实现现判判断断素素数数,再再从从100400逐个检查。逐个检查。经验交流经验交流第三十九页,讲稿共五十页哦C C语言程序设计语言程序设计3.3 3.3 综合应用综合应用【案例案例3.143.14】设计程序求解一元二次不等式设计程序求解一元二次不等式 的解集。的解集。【问题分析】【问题分析】求解一元二次不等式采用分支结构程序设计,主要有以下步骤:求解一元二次不等式采用分支结构程序设计,主要有以下步骤:(1)验证输入的不等式系数是否合法;)验证输入的不等式系数是否合法;(2)根据)根据a的取值情况判定二次函数的开口方向;的取值情况判定二次函数的开口方向;(3)根据)根据的取值情况判断与的取
41、值情况判断与x轴的交点情况,结合函数的开口方向求出轴的交点情况,结合函数的开口方向求出解集。解集。问题求解流程如图问题求解流程如图3-25所示。所示。第四十页,讲稿共五十页哦C C语言程序设计语言程序设计开始开始解集为解集为xxxxxxxx2 2(x(x1 1xx2 2)结束结束解集为解集为x x xx1 1xxxx2 2(x(x1 1x0?a0?解集为解集为x x x x xx1 1 解集为解集为R R0?0?=0?=0?0?0?解集为空集解集为空集输出解集输出解集解解集集为为将原不等式化为一般形式将原不等式化为一般形式 Ax2+bx+c0Ax2+bx+c0并输入并输入 =b2-4ac =b
42、2-4ac 图图3-25 3-25 求解一元二次不等式的流程图求解一元二次不等式的流程图第四十一页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.15】历史上出现过许多估计】历史上出现过许多估计2的方法,例如,可以用的不足近似的方法,例如,可以用的不足近似值来估计它的大小。当依次取定精确度值来估计它的大小。当依次取定精确度1,0.1,0.01,0.001,时,时,2的的不足近似值构成无穷数列:不足近似值构成无穷数列:1,1.4,1.41,1.414,容易看出,这个数列中的项随着序号的增加逐渐接近容易看出,这个数列中的项随着序号的增加逐渐接近 2,就可以用这,就可以用这个数列来个数
43、列来“逼近逼近”2。请利用上述方法编制程序估计。请利用上述方法编制程序估计 2的值。的值。具体算法描述如图具体算法描述如图3-273-27所示。所示。第四十二页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.16】用】用 /41-1/3+1/5-1/7+公式求公式求 的近似值,直到某一项的绝对值小于的近似值,直到某一项的绝对值小于10-6为为止。止。【问题分析问题分析】该算法主要是求该算法主要是求1、-1/3、1/5、-1/7、序列的累加和。对于这一类算法需要找出序列的序列的累加和。对于这一类算法需要找出序列的变化规律,并用相关变量表示即可。变化规律,并用相关变量表示即可。【程序
44、【程序详详解】解】/*ex3-16.c 求求圆圆周率的近似周率的近似值值*/#include#include void main()int s=1;/存符号位,第一项为正存符号位,第一项为正 float n=1.0,t=1,pi=0;/n存第一项的分母,存第一项的分母,t存第一项的值存第一项的值,pi为累加器,初始值为为累加器,初始值为0 while(fabs(t)1e-6)/fabs(t)求实数求实数t的绝对值的绝对值,1e-6表示表示1*10-6,表示趋近于,表示趋近于0 pi=pi+t;/累加当前项累加当前项 n=n+2;/按规律计算下一项的分母按规律计算下一项的分母 s=-s;/计算下
45、一项的符号位计算下一项的符号位 t=s/n;/计算下一项的值计算下一项的值 pi=pi*4;/计算计算pi printf(pi=%fn,pi);第四十三页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.17】求】求fibonacci数列前数列前40个数之和。这个数列有如下特点:第个数之和。这个数列有如下特点:第1、2个数为个数为1、1,从第,从第3个数开始,该数是前两个数这和,如右图个数开始,该数是前两个数这和,如右图。【问题分析问题分析】该序列如:该序列如:1、1、2、3、5、8、13、21、34,因为从第,因为从第3项开始其值为前两项之和,项开始其值为前两项之和,所以至少要设
46、置两个变量分别表示前两项,而当前项计算出来后又可作为之后项的计算依据,故用两个变量相所以至少要设置两个变量分别表示前两项,而当前项计算出来后又可作为之后项的计算依据,故用两个变量相互迭代。互迭代。【程序【程序详详解】解】/*ex3-17.c 求求Fibonacci数列前数列前40项项*/#include void main()long int f1=1,f2=1;/存第一、二项的初始值存第一、二项的初始值 int i;/循环变量,控制循环次数循环变量,控制循环次数 for(i=1;i=3)是否是素数)是否是素数。【问题分析问题分析】所谓素数即为只能被所谓素数即为只能被1和本身整除的数。此算法可
47、反过来考虑,如果和本身整除的数。此算法可反过来考虑,如果m不能不能2m-1之间的之间的任何数整除即它是素数,若能被其中任何一个数整除即不是素数。实质上穷举的终止值任何数整除即它是素数,若能被其中任何一个数整除即不是素数。实质上穷举的终止值m-1还可以为还可以为m/2或或sqrt(m)。【程序【程序详详解】解】/*ex3-18.c 判素数判素数*/#include#include void main()int m,i,k;printf(Input m(m=3):);scanf(%d,&m);k=sqrt(m);for(i=2;ik)printf(%d is a prime number!n,m)
48、;else printf(%d is not a prime number!n,m);【思考】【思考】要求出要求出100200之间的全之间的全部素数如何实现?部素数如何实现?第四十五页,讲稿共五十页哦C C语言程序设计语言程序设计【案例【案例3.19】输出两个正整数】输出两个正整数m和和n,求其最大公约数和最小公倍数,求其最大公约数和最小公倍数。【问题分析问题分析】先用先用“辗转相除取余法辗转相除取余法”求出其最大公约数,再用原始数之乘积除最大公约数求出其最大公约数,再用原始数之乘积除最大公约数即为最小公倍数。即为最小公倍数。【程序【程序详详解】解】/*ex3-19.c 求最大公约数和最小公倍
49、数求最大公约数和最小公倍数*/#include void main()int m,n,r,p;printf(Input m,n:);scanf(%d%d,&m,&n);p=m*n;/存原始乘积存原始乘积 r=m%n;/求最初的余数求最初的余数 while(r!=0)/若余数为若余数为0则找到最大公约数为则找到最大公约数为n,否则交换,否则交换 m=n;/将除数变为被除数将除数变为被除数 n=r;/将余数变为除数将余数变为除数 r=m%n;/再求余数再求余数 printf(最大公约数为:最大公约数为:%dn,n);printf(最小公倍数为:最小公倍数为:%dn,p/n);第四十六页,讲稿共五十
50、页哦C C语言程序设计语言程序设计【案例【案例3.20】输出九九乘法表】输出九九乘法表。【问题分析问题分析】利用嵌套循环处理,注意打印格式。利用嵌套循环处理,注意打印格式。【程序【程序详详解】解】/*ex3-19.c 求最大公约数和最小公倍数求最大公约数和最小公倍数*/#include void main()int i,j;for(i=1;i=9;i+)/共打印共打印9行行 for(j=1;j=i;j+)/第第i行打印行打印i个表达式个表达式 printf(%2d*%2d=%-5d,j,i,i*j);printf(“n”);/换行换行 第四十七页,讲稿共五十页哦C C语言程序设计语言程序设计课