《C语言教程第4章程序的控制结构课件.ppt》由会员分享,可在线阅读,更多相关《C语言教程第4章程序的控制结构课件.ppt(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4 4章章 程序的控制结构程序的控制结构1/11/20231第第4 4章章 程序的控制结构程序的控制结构本章主要教学内容本章主要教学内容 算法的描述方法算法的描述方法 基本控制结构及基本控制语句基本控制结构及基本控制语句 常用算法常用算法 程序的基本版式程序的基本版式 结构化程序设计的基本思想结构化程序设计的基本思想 程序测试与改错程序测试与改错1/11/202324.1 算法的概念及其描述算法的概念及其描述数据结构数据结构+算法算法=程序程序算法:为解决一个具体问题而采取的算法:为解决一个具体问题而采取的确定确定的的有有限限的操作步骤。的操作步骤。算法特性:算法特性:有穷性有穷性确定性确
2、定性 有效性有效性 没有输入或有多个输入没有输入或有多个输入 有一个或多个输出有一个或多个输出 1/11/20233算法的分类算法的分类数值运算算法:数值运算算法:解决的是求数值解的问题,例如用辗转相解决的是求数值解的问题,例如用辗转相除法求两个数的最大公约数等除法求两个数的最大公约数等非数值运算算法:非数值运算算法:主要用于解决需要用分析推理、逻辑推理主要用于解决需要用分析推理、逻辑推理才能解决的问题,例如人工智能中的许多才能解决的问题,例如人工智能中的许多问题,查找、分类等问题问题,查找、分类等问题1/11/20234算法的描述方法算法的描述方法自然语言表示自然语言表示传统的流程图表示传统
3、的流程图表示N-S结构化流程图表示结构化流程图表示 伪代码表示伪代码表示1/11/20235构成程序的三种基本结构构成程序的三种基本结构顺序结构顺序结构选择结构选择结构(分支结构分支结构)循环结构循环结构已经证明,任何程序均可只用这三种结构综已经证明,任何程序均可只用这三种结构综合描述合描述只用这三种结构编制的程序,叫结构化程序只用这三种结构编制的程序,叫结构化程序程序必须符合结构化规则程序必须符合结构化规则1/11/20236结构化程序设计的核心思想结构化程序设计的核心思想采用顺序、选择和循环三种基本结构作为程采用顺序、选择和循环三种基本结构作为程序设计的基本单元序设计的基本单元 只有一个入
4、口;只有一个入口;只有一个出口;只有一个出口;无死语句,即不存在永远都执行不到的语句;无死语句,即不存在永远都执行不到的语句;无死循环,即不存在永远都执行不完的循环。无死循环,即不存在永远都执行不完的循环。采用采用“自顶向下、逐步求精自顶向下、逐步求精”和模块化的方法和模块化的方法进行结构化程序设计进行结构化程序设计 1/11/202374.2 顺序结构顺序结构BANS图传统流程图传统流程图BA1/11/20238顺序结构顺序结构应用举例应用举例(1)例:例:设半径为设半径为1.5,求圆周长及面积。,求圆周长及面积。解:解:(1)问题分析:)问题分析:(算法)(算法)step1:给出圆的半径:
5、给出圆的半径r=1.5step2:求圆的周长及面积:求圆的周长及面积step3:输出结果:输出结果公式:公式:圆周长圆周长=2*3.14*r圆面积圆面积=3.14*r*r1/11/20239开始开始r=1.5L=2*3.14*rs=3.14*r*r 输出输出L,s结束结束(2)画画出出流流程程图图1/11/202310#include#define PI 3.14 main()float r,l,s;r=1.5;l=2*PI*r;s=PI*r*r;printf(nl=%f,s=%f,l,s);(3)根根据据流流程程图图编编程程1/11/202311顺序结构顺序结构应用举例应用举例(2)例例4.
6、1 设银行存款利率设银行存款利率rate为为2.25%,存款期为,存款期为n年,本金为年,本金为captial元,编程计算元,编程计算n年后的本利之年后的本利之和和deposit解:解:(1)问题分析:)问题分析:(算法)(算法)step2:给出年:给出年n、本金、本金captial(键盘输入键盘输入)step3:n年后本利之和年后本利之和depositstep4:输出结果:输出结果公式:公式:deposit=captial*(1+rate)n step1:给出存款利率:给出存款利率rate1/11/202312开始开始rate=0.0225输入输入n和和captialdepoist=capt
7、ial*(1+rate)n 输出输出depoist结束结束(2)画画出出流流程程图图1/11/202313(3)根根据据流流程程图图编编程程#include#include main()int n;double rate=0.0225;double capital,deposit;printf(please enter year,capital:);scanf(%d%lf,&n,&capital);deposit=capital*pow(1+rate,n);printf(deposit=%lfn,deposit);1/11/202314以以#开始的编译预处理命令开始的编译预处理命令 main(
8、)局部变量说明语句局部变量说明语句;执行语句执行语句;简单的简单的C程序结构框架程序结构框架1/11/202315编译预处理命令编译预处理命令文件包含编译预处理命令文件包含编译预处理命令#include指示编指示编译系统将一个源文件嵌入到含有译系统将一个源文件嵌入到含有#include指令的源文件中该指令所在的位置处。指令的源文件中该指令所在的位置处。使用形式:使用形式:#include /头文件名头文件名注意:注意:以以#开头;每条一行;不是开头;每条一行;不是C语句语句1/11/202316查询情况查询情况编译预处理命令编译预处理命令(1)用)用将头文件名括起,则在将头文件名括起,则在in
9、clude 子目录中查询子目录中查询(2)用)用 将头文件名括起,则先在将头文件名括起,则先在 当前目录中查找若无继续搜索当前目录中查找若无继续搜索 C子目录。子目录。1/11/202317常用函数对应的头文件常用函数对应的头文件 函数函数 头文件名头文件名数学函数数学函数 math.h 字符串函数字符串函数 string.h输入、输出函数输入、输出函数 stdio.h动态存储分配函数动态存储分配函数 stdlib.h/malloc.h1/11/2023184.3 选择结构选择结构作用:根据条件控制程序流向。作用:根据条件控制程序流向。条件的组成:条件的组成:问题的提出:问题的提出:各种类型的
10、常量、变量、表达式各种类型的常量、变量、表达式(常用:关系(常用:关系/逻辑表达式)逻辑表达式)注意各种表达式的用法注意各种表达式的用法1/11/202319简单分支选择(单分支)结构简单分支选择(单分支)结构yesno语句语句A A条件成立否条件成立否条件表达式条件表达式.T.F.语句语句格式:格式:if(表达式表达式)语句语句/语句组;语句组;1/11/202320双分支选择结构双分支选择结构yesno程序段程序段A A程序段程序段B B条件成立否条件成立否条件表达式条件表达式.T.F.语句语句1语句语句2格式:格式:If(表达式表达式)语句语句1/语句组语句组1;else 语句语句2/语
11、句组语句组2;1/11/202321多分支选择结构多分支选择结构表达式表达式语句语句1T TF F语句语句2表达式表达式表达式表达式语句语句3语句语句4T TT TF FF F表达式表达式1语句语句1T TF F语句语句2表达式表达式2表达式表达式3语句语句3语句语句4T TT TF FF F1/11/202322多分支选择结构多分支选择结构 if(表达式表达式)语句语句1;else if(表达式表达式2)语句)语句2;:else if(表达式表达式m)语句)语句m;else 语句语句n;一般形式:一般形式:1/11/202323分支嵌套分支嵌套 if(表达式表达式1)if(表达式表达式2)语
12、句)语句1;else 语句语句2;else if(表达式表达式3)语句)语句3;else 语句语句4;一般形式:一般形式:1/11/202324使用使用 if if 语句需注意事项语句需注意事项(1)条件判断表达式一定用圆括号括起。)条件判断表达式一定用圆括号括起。(2)复合语句必须用)复合语句必须用引起。引起。(3)每一个)每一个else必须与一个必须与一个if项匹配。项匹配。(4)else总是与离它最近的总是与离它最近的if 相匹配。相匹配。1/11/202325体型判断。按体型判断。按“体指数体指数”对肥胖程度进行划分:对肥胖程度进行划分:体指数体指数t=体重体重w/(身高身高h)2 (
13、w 单位为公斤,单位为公斤,h单位为米)单位为米)当当t=27时,为肥胖。时,为肥胖。编程从键盘输入你的身高编程从键盘输入你的身高h和体重和体重w,根据给定公式计算,根据给定公式计算体指数体指数t,然后判断你的体重属于何种类型。,然后判断你的体重属于何种类型。用用3种方法编程:种方法编程:算法算法1:用不带:用不带else子句的子句的if语句编程语句编程(ex45_1)算法算法2:用在:用在if子句中嵌入子句中嵌入if 语句的形式编程语句的形式编程(ex45_2)算法算法3:用在:用在else子句中嵌入子句中嵌入if 语句的形式编程语句的形式编程(ex45_3)例例4.54.51/11/202
14、326例:例:计算并输出下列分段函数值计算并输出下列分段函数值 y=0 x 01 x0#include main()float x,y;printf(input x:);scanf(%f,&x);y=0;if(x0)y=1;printf(y=%fn,y);1/11/202327用用 switch switch语句构成的多分支结构语句构成的多分支结构多路选择多路选择switch(表达式表达式)case 常数常数1:语句序列语句序列1;case 常数常数2:语句序列语句序列2;default:语句序列语句序列3;default可以没有,但最好不省略可以没有,但最好不省略不要忘记不要忘记break1
15、/11/202328例例4.84.8编程设计一个简单的计算器程序。编程设计一个简单的计算器程序。(ex48)要求根据用户从键盘输入的表达式:要求根据用户从键盘输入的表达式:操作数操作数1 运算符运算符op 操作数操作数2计算表达式的值,指定的运算符为加(计算表达式的值,指定的运算符为加(+)、)、减(减(-)、乘()、乘(*)、除()、除(/)1/11/202329使用使用 switch switch语句应注意语句应注意(1)各常量表达式的值)各常量表达式的值不可相同不可相同。(2)case 后可有多个语句,后可有多个语句,不用不用括起。括起。(3)常量表达式仅是一个语句标号。)常量表达式仅是
16、一个语句标号。(4)各)各case及及default子句的顺序可随意。子句的顺序可随意。(5)每个分支执行后,利用)每个分支执行后,利用break语句语句跳出。跳出。1/11/2023304.4 循环结构循环结构引入循环的目的:引入循环的目的:简化程序、提高编程效率简化程序、提高编程效率三种循环方式三种循环方式当型循环当型循环直到型循环直到型循环步长型循环步长型循环1/11/202331循环结构的流程图循环结构的流程图A当型循环当型循环直到循环直到循环真真假假A假真真假假A假假1/11/202332循环语句循环语句while一般形式:一般形式:while(表达式表达式)语句语句;只要只要表达式
17、表达式的值为的值为非非0,就重复执行就重复执行语句语句,直到直到表达式表达式值为值为0时止时止先判断,后执行先判断,后执行1/11/202333例:找出例:找出100以内的奇数。以内的奇数。main()int I=1;while(I=100)printf(%d,I);I+=2;注意:注意:(1)while 构成的构成的 是是“当型当型”循环。循环。(2)循环体中一定)循环体中一定 有对于循环控有对于循环控 制变量的操作。制变量的操作。1/11/202334循环语句循环语句do-while一般形式一般形式:do 语句语句;while(表达式表达式);首先执行首先执行语句语句,然后判断,然后判断表
18、达式表达式的值。如果的值。如果表达式为表达式为0,继续向下执行,否则,再次执继续向下执行,否则,再次执行行语句语句,再次判断,再次判断表达式表达式的值的值语句语句会被会被至少至少执行一次执行一次1/11/202335例:找出例:找出100以内的奇数。以内的奇数。main()int I=1;while(I=100)printf(%d,I);I+=2;main()int I=1;do printf(%d,I);I+=2;while(I=100);1/11/202336循环语句循环语句for 一般形式一般形式:for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句;表达式表达式2执行循环体
19、执行循环体计算表达式计算表达式1的值的值计算表达式计算表达式3的值的值跳出循环跳出循环TF工作过程:工作过程:1/11/202337有关有关 for 的说明的说明(1)for(表达式表达式1;表达式表达式2;表达式表达式3)语句语句;相当于:相当于:表达式表达式1;while(表达式表达式2)语句语句;表达式表达式3;1/11/202338在在for和和while语句之后一般没有分号语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循有分号表示循环体就是分号之前的内容(空循环体)环体)while(i 100);i+;for(i=0;i 100;i+);printf(%d,i);for通
20、常有一个循环变量控制循环的次数,不通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量要在循环体内改变这个变量有关有关 for 的说明的说明(2)1/11/202339 for语句中的表达式语句中的表达式1、表达式、表达式3可为逗号表达式。可为逗号表达式。如如:for(i=0,j=1;jn∈i+,j+)表达式表达式1和和表达式表达式3可以没有或者是用逗号分隔的可以没有或者是用逗号分隔的多个表达式的组合。多个表达式的组合。如如:for(;i=5;)有关有关 for 的说明的说明(3)1/11/202340 main()float x,sum;while(x!=9999)if(x0.
21、0)sum+=x;printf(nsum=%f,sum);scanf(%f,&x);scanf(%f,&x);例例:给定一组数据如下,编程对负数求和。给定一组数据如下,编程对负数求和。12,45,67.8,-12.5,-35.67,567.89方法方法1:用用 while1/11/202341例例:给定一组数据如下,编程对负数求和。给定一组数据如下,编程对负数求和。12,45,67.8,-12.5,-35.67,567.89方法方法2:用用 for main()float x,sum=0;for(i=1;i=6;i+)if(x0.0)sum+=x;scanf(%f,&x);printf(nsu
22、m=%f,sum);int i;1/11/202342选择三种循环的一般原则选择三种循环的一般原则如果循环次数已知,用如果循环次数已知,用for如果循环次数未知,用如果循环次数未知,用while如果循环体至少要执行一次,用如果循环体至少要执行一次,用do-while这只是这只是“一般一般”原则,不是原则,不是“原则原则”1/11/202343 猜数游戏:猜数游戏:先由计算机先由计算机“想想”一个数请人猜,如果一个数请人猜,如果人猜对了,则计算机给出提示:人猜对了,则计算机给出提示:“Right!”,否否则提示:则提示:“Wrong!”,并告诉人所猜的数是大还,并告诉人所猜的数是大还是小。是小。
23、(ex46)例例4.64.6分析分析:Step1:计算机想一个数计算机想一个数;Step2:人猜一个数人猜一个数;Step3:判断三种情况并给出相应结果。判断三种情况并给出相应结果。1/11/202344猜数游戏用到的库函数(猜数游戏用到的库函数(1 1)随机函数随机函数rand()#include RAND_MAX在在stdlib.h中定义,不大于双字中定义,不大于双字节整数的最大值节整数的最大值32767 产生产生0,RAND_MAX 之间的随机数之间的随机数magic=rand();产生产生0,b-1 之间的随机数之间的随机数magic=rand()%b;产生产生a,a+b-1 之间的随
24、机数之间的随机数magic=rand()%b+a;1/11/202345 猜数游戏猜数游戏:先由计算机先由计算机“想想”一个一个1到到100之间之间的的数请人猜,如果人猜对了,则结束游戏,否则数请人猜,如果人猜对了,则结束游戏,否则计算机给出提示,告诉人所猜的数是太大还是计算机给出提示,告诉人所猜的数是太大还是太小,太小,直到直到人猜对为止。计算机人猜对为止。计算机记录人猜的次记录人猜的次数数,以此来反映猜数者,以此来反映猜数者“猜猜”的水平。的水平。(ex49)例例4.94.9运行程序发现问题运行程序发现问题每次运行程序,机器所想的数都是一样的;每次运行程序,机器所想的数都是一样的;用函数用
25、函数rand所产生的随机数只是所产生的随机数只是伪随机数。随机数。1/11/202346猜数游戏用到的库函数(猜数游戏用到的库函数(2 2)随机函数随机函数srand为函数为函数rand()设置随机数种子来实现对函数设置随机数种子来实现对函数rand所产生的所产生的伪随机数伪随机数的的“随机化随机化”通过键入随机数种子,产生通过键入随机数种子,产生0,100之间的随之间的随机数机数scanf(%u,&seed);srand(seed);magic=rand()%100+1;改进例改进例4.9(ex49_1)1/11/202347猜数游戏用到的库函数(猜数游戏用到的库函数(3 3)随机函数随机函
26、数srand:为函数为函数rand()设置随机数种设置随机数种子来实现对其产生的伪随机数的子来实现对其产生的伪随机数的“随机化随机化”使用计算机读取其时钟值并把该值自动设置为使用计算机读取其时钟值并把该值自动设置为随机数种子,产生随机数种子,产生0,100之间的随机数之间的随机数函数函数time()返回以秒计算的当前时间值,该返回以秒计算的当前时间值,该值被转换为无符号整数并用作随机数发生器的值被转换为无符号整数并用作随机数发生器的种子种子#include srand(time(NULL);magic=rand()%100+1;再改进例再改进例4.9(ex49_2)1/11/202348永远不
27、会退出的循环为死循环永远不会退出的循环为死循环for(;)while(1)do while(1);一般情况下,要极力避免死循环一般情况下,要极力避免死循环绝大多数程序不需要死循环。如果出现,往往都是绝大多数程序不需要死循环。如果出现,往往都是bug时间过长的循环会造成时间过长的循环会造成“假死假死”效果,也要考虑解决效果,也要考虑解决死循环死循环1/11/202349例例4.11 4.11 国王的许诺国王的许诺相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍相传国际象棋是古印度舍罕王的宰相达依尔发明的。舍罕王十分喜欢象棋,决定让宰相自己选择何种赏赐。罕王十分喜欢象棋,决定让宰相自己选择何种赏赐
28、。位聪明的宰相指着位聪明的宰相指着88共共64格的象棋盘说:陛下,请格的象棋盘说:陛下,请您赏给我一些麦子吧,就在棋盘的第一个格子中放您赏给我一些麦子吧,就在棋盘的第一个格子中放1粒,粒,第第2格中放格中放2粒,第粒,第3格放格放4粒,以后每一格都比前一格粒,以后每一格都比前一格增加一倍,依此放完棋盘上的增加一倍,依此放完棋盘上的64个格子,我就感恩不个格子,我就感恩不尽了尽了舍罕王让人扛来一袋麦子,他要兑现他的许诺。舍罕王让人扛来一袋麦子,他要兑现他的许诺。国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦国王能兑现他的许诺吗?试编程计算舍罕王共要多少麦子赏赐他的宰相,这些麦子合多少立方米?子
29、赏赐他的宰相,这些麦子合多少立方米?(已知(已知1立方米麦子约立方米麦子约1.42e8粒)粒)总粒数为:总粒数为:sum=1+2+2sum=1+2+22 2+2+23 3+2+26363 1/11/202350#define CONST 1.42e8#include#include main()int n;double term,sum=0;/*累加求和变量赋初值累加求和变量赋初值*/for(n=1;n=64;n+)term=pow(2,n-1);/*根据累加项的规律计算累加项根据累加项的规律计算累加项*/sum=sum+term;/*作累加运算作累加运算*/printf(sum=%en,su
30、m);/*打印总麦粒数打印总麦粒数*/printf(volum=%en,sum/CONST);/*打打印印折折合合的的总总麦麦粒粒体体积数积数*/方法方法1 11/11/202351方法方法2 2#define CONST 1.42e8 /*定义符号常量定义符号常量CONST值为值为1.42e8*/#include main()int n;double term=1,sum=1;/*累乘求积、累加求和变量赋初值累乘求积、累加求和变量赋初值*/for(n=2;n=64;n+)term=term*2;/*根据后项总是前项的根据后项总是前项的2倍计算累加项倍计算累加项*/sum=sum+term;/
31、*作累加运算作累加运算*/printf(sum=%en,sum);/*打印总麦粒数打印总麦粒数*/printf(volum=%en,sum/CONST);/*打打印印折折合合的的总总麦麦粒粒体体积数积数*/1/11/202352循环嵌套循环嵌套结构形式结构形式 for():while():do :while();1/11/202353使用嵌套的循环时使用嵌套的循环时,应注意的问题应注意的问题在嵌套的各层循环体中,使用复合语句(即在嵌套的各层循环体中,使用复合语句(即用一对大花括号将循环体语句括起来)保证用一对大花括号将循环体语句括起来)保证逻辑上的正确性逻辑上的正确性 内层和外层循环控制变量不
32、应同名,以免造内层和外层循环控制变量不应同名,以免造成混乱成混乱 嵌套的循环最好采用右缩进格式书写,以保嵌套的循环最好采用右缩进格式书写,以保证层次的清晰性证层次的清晰性 循环嵌套不能交叉,即在一个循环体内必须循环嵌套不能交叉,即在一个循环体内必须完整的包含着另一个循环完整的包含着另一个循环 1/11/202354合法的嵌套循环合法的嵌套循环1/11/202355例例4.144.14编程输出如下形式的九九表编程输出如下形式的九九表1/11/202356#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头打印表头*/printf(n
33、);for(m=1;m10;m+)printf(-);printf(n);for(m=1;m10;m+)for(n=1;n10;n+)printf(%4d,m*n);printf(n);例例4.144.141/11/202357例例4.154.15将上例输出格式改变成下三角格式打印将上例输出格式改变成下三角格式打印1/11/202358#include main()int m,n;for(m=1;m10;m+)printf(%4d,m);/*打印表头打印表头*/printf(n);for(m=1;m10;m+)printf(-);printf(n);for(m=1;m10;m+)for(n=1
34、;n=m;n+)printf(%4d,m*n);printf(n);例例4.154.151/11/202359例例4.16 4.16 马克思手稿中有一道趣味数学题:有马克思手稿中有一道趣味数学题:有30个人,个人,其中有男人、女人和小孩,在一家饭馆里吃其中有男人、女人和小孩,在一家饭馆里吃饭共花了饭共花了50先令,每个男人各花先令,每个男人各花3先令,每先令,每个女人各花个女人各花2先令,每个小孩各花先令,每个小孩各花1先令,问先令,问男人、女人和小孩各有几人?男人、女人和小孩各有几人?解方程组解方程组穷举穷举法法1/11/202360方法方法1:1:穷举穷举x,y,z的所有组合的所有组合#i
35、nclude main()int x,y,z;printf(Man t Women t Childernn);for(x=0;x=30;x+)for(y=0;y=30;y+)for(z=0;z=30;z+)if(x+y+z=30&3*x+2*y+z=50)printf(%3d t%5d t%8dn,x,y,z);1/11/202361方法方法2:2:改进算法改进算法#include main()int x,y,z;printf(Man t Women t Childernn);for(x=0;x=16;x+)for(y=0;y=25;y+)z=30 x-y;if(3*x+2*y+z=50)pr
36、intf(%3d t%5d t%8dn,x,y,z);1/11/2023624.5 4.5 流程的转移控制流程的转移控制goto语句语句break语句语句continue语句语句return语句语句 标准库函数标准库函数exit()1/11/202363gotogoto 语句语句一般形式一般形式 goto 语句标号语句标号;语句标号:语句标号:或或 语句标号:语句标号:goto 语句标号语句标号;功能:功能:无条件无条件转去执行语句标号所指语句行。转去执行语句标号所指语句行。1/11/202364(1)语句标号用)语句标号用标识符标识符表示。表示。(2)语句标号一定为函数段中存在的。)语句标号
37、一定为函数段中存在的。(3)该语句不可滥用。)该语句不可滥用。使用使用gotogoto 语句要注意语句要注意标号举例标号举例error:goto举例举例goto error;不能用整数不能用整数作语句标号作语句标号1/11/202365使用之后,程序仍然是单入口,单出口使用之后,程序仍然是单入口,单出口不要使用一个以上的标号不要使用一个以上的标号不要用不要用goto往回跳,要向下跳往回跳,要向下跳不要让不要让goto制造出永远不会被执行的代码制造出永远不会被执行的代码使用使用gotogoto 语句的原则语句的原则1/11/202366break 与与continue 语句语句 break语句的
38、作用:语句的作用:循环中使用循环中使用break语句可语句可提前结束提前结束整个整个循环循环。continue语句的作用:语句的作用:循环中使用循环中使用continue语句可语句可提前结束提前结束本次本次循环循环1/11/202367break 与与continue 语句示意图语句示意图假假假假真真真真break表达式表达式1表达式表达式2循环语句的循环语句的下一条语句下一条语句循环语句的循环语句的下一条语句下一条语句假假假假真真真真 contiue表达式表达式1表达式表达式2continue1/11/202368有关有关break 与与continue 的说明的说明(1)break 语句可
39、用于语句可用于switch结构,也可用于循结构,也可用于循环中;环中;(2)continue语句语句仅仅用于循环中;用于循环中;(3)break 与与continue均只影响包含它的结构中;均只影响包含它的结构中;(4)break 与与continue少用为妙;少用为妙;1/11/202369#include#define PI 3.14 main()int r;float area;for(r=1;r50.0)break;printf(面积等于面积等于%fn,area);printf(现在现在r=%dn,r);例例1/11/202370例例#include#define PI 3.14 ma
40、in()int r;float area;for(r=1;r=10;r+)area=PI*r*r;if(area50.0)continue;printf(面积等于面积等于%fn,area);1/11/202371Exit()函数函数exit(0)l作用是终止整个程序的执行,强制作用是终止整个程序的执行,强制返回操作返回操作系统系统 l调用该函数需要嵌入头文件调用该函数需要嵌入头文件1/11/202372例例4.194.19从键盘任意输入一个正整数,编程判断它是否是从键盘任意输入一个正整数,编程判断它是否是素数,若是素数,输出素数,若是素数,输出“Yes!”;否则,输出;否则,输出“No!”问题
41、分析:问题分析:概念:素数是指除了能被概念:素数是指除了能被1和它本身整除外,不和它本身整除外,不能被其他任何整数整除的数;能被其他任何整数整除的数;判断素数的方法:把判断素数的方法:把m作为被除数,把作为被除数,把i=2(m-1)依次做为除数,若余数都不为依次做为除数,若余数都不为0,则说明是素数。,则说明是素数。简单判断方法:只需用简单判断方法:只需用2 的数去除的数去除m,即可,即可得到正确的判定结果。得到正确的判定结果。1/11/202373#include main()int m,i,k;printf(Please enter a number:);scanf(%d,&m);k=sq
42、rt(m);for(i=2;i=k;i+)if(m%i=0)printf(No!n);goto end;printf(Yes!n);end:printf(Program is over!n);Please enter a number:6Program is over!No!方法方法1 1:用:用gotogoto1/11/202374方法方法1 1:用:用gotogoto#include main()int m,i,k;printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k;i+)if(m%i=0)printf(No!
43、n);goto end;printf(Yes!n);end:printf(Program is over!n);Please enter a number:5Program is over!Yes!1/11/202375#include main()int m,i,k;printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i k)printf(Yes!n);else printf(No!n);printf(Program is over!n);Please enter a number:6Program is over!No
44、!方法方法2 2:用:用breakbreak1/11/202376#include main()int m,i,k,flag=1;/*标志变量标志变量flag初值置为初值置为1*/printf(Please enter a number:);scanf(%d,&m);k=sqrt(m);for(i=2;i=k&flag;i+)if(m%i=0)flag=0;if(flag)printf(Yes!n);else printf(No!n);printf(Program is over!n);方法方法3 3采用设置采用设置标志变量的方法标志变量的方法1/11/202377#include main(
45、)int m,i,k,flag=1;/*标志变量标志变量flag初值置为初值置为1*/printf(Please enter a number:);scanf(%d,&m);for(i=2;i=m-1;i+)if(m%i=0)flag=0;printf(%dn,i);if(flag)printf(No divisor!It is a prime number.n);printf(Program is over!n);程序功能?程序功能?1/11/202378本章小结(本章小结(1)算法的描述方法算法的描述方法流程图流程图与基本控制结构相应的结构化的控制语句与基本控制结构相应的结构化的控制语句i
46、f-elseswitchforwhiledo-whilebreakcontinue常用算法,如常用算法,如累加、累乘、统计累加、累乘、统计、递推、迭代、递推、迭代、穷举穷举 等等1/11/202379常用算法常用算法(1)求阶乘)求阶乘:数据类型的定义数据类型的定义,long或或double(2)统计)统计:统计正数、平均分以上、统计正数、平均分以上、n个成绩中个成绩中10090、8980、7970、6960、60的人数;输入字的人数;输入字符串中字母符串中字母d的个数的个数设置一个计数变量设置一个计数变量k:初始化为:初始化为1,每遇到一次将其,每遇到一次将其加加1:k+;本章小结(本章小结
47、(2)1/11/202380本章小结(本章小结(3)常用算法常用算法(3)累加和:存放累加和的变量)累加和:存放累加和的变量初始化为初始化为0或第一项,再循环加每一项;或第一项,再循环加每一项;循环控制:循环控制:前前n项之和项之和已知循环次数,可设置一个循已知循环次数,可设置一个循环变量如环变量如i来控制;来控制;加到某一项或累加和满足一定条件。例:加到某一项或累加和满足一定条件。例:1+2+.+n 与与 1+3+5+7+.和和 2+4+6+8+.及及12+32+52+72+.输入输入n或累加和大于或累加和大于2000的最小的的最小的n1/11/202381作业作业习题习题44.2、4.3、4.4、4.6、4.10、4.14、4.15、4.19、4.20、4.25、4.26、4.27下周实验内容:习题下周实验内容:习题44.15、4.19、4.20、4.25、1/11/202382