《第04章C语言流程控制课件.ppt》由会员分享,可在线阅读,更多相关《第04章C语言流程控制课件.ppt(90页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4章章C语言的流程控制语言的流程控制李俊李俊计算机基础教学部计算机基础教学部南京航空航天大学信息科学与技术学院南京航空航天大学信息科学与技术学院2007.8本章内容本章内容4.1算法概述算法概述4.2C语言程序的结构和语句概述语言程序的结构和语句概述4.3选择结构语句选择结构语句4.4循环结构语句循环结构语句4.5控制语句的应用举例控制语句的应用举例l4.1.1 4.1.1 算法及其效率算法及其效率l程序的算法,就是使用程序解决问题的程序的算法,就是使用程序解决问题的计算步骤计算步骤。l程序算法规定了计算机程序的运行步骤,也保证了程序算法规定了计算机程序的运行步骤,也保证了程序的运行可以取
2、得正确的结果。程序的运行可以取得正确的结果。l程序程序 =数据数据 +算法算法l不同的算法效率不同:不同的算法效率不同:l采用优秀的解题方法,合理安排计算步骤,以最少的计算采用优秀的解题方法,合理安排计算步骤,以最少的计算步骤完成计算任务的方法我们称为高效率算法。步骤完成计算任务的方法我们称为高效率算法。l使用了比较笨拙的解题方法,通过较多的运算步骤来实现使用了比较笨拙的解题方法,通过较多的运算步骤来实现同样的计算任务的计算方法我们称为低效率算法。同样的计算任务的计算方法我们称为低效率算法。l为了有效地进行解题,不仅需要保证算法正确,还要为了有效地进行解题,不仅需要保证算法正确,还要考虑算法的
3、质量,选择合适的算法。考虑算法的质量,选择合适的算法。4.1算法概述算法概述l4.1.2 4.1.2 算法的设计原则算法的设计原则 1.1.符合数学计算规则符合数学计算规则 只只有有符符合合数数学学规规则则的的计计算算步步骤骤才才可可以以被被计计算算机机正正确确执行。执行。2.2.保证结果确定保证结果确定 如果一个算法对同一组数据进行多次计算,竟然获如果一个算法对同一组数据进行多次计算,竟然获 得多个不同的结果,这种算法是不确定的,是无效的。得多个不同的结果,这种算法是不确定的,是无效的。保证算法的确定性,最重要的方面是排除程序中随保证算法的确定性,最重要的方面是排除程序中随 机数的产生机数的
4、产生(变量初始化变量初始化)。3.3.程序能够正常结束程序能够正常结束 一一个个合合理理的的算算法法应应包包含含有有限限的的操操作作步步骤骤,而而不不能能是是无限的。无限的。4.1算法概述算法概述l4.1.2 4.1.2 算法的设计原则算法的设计原则 4.4.合理的输入合理的输入 一一个个实实际际有有效效的的程程序序中中应应该该含含有有零零个个或或者者多多个个输输入入(一般会在程序的算法中加入一个或者多个输入一般会在程序的算法中加入一个或者多个输入 )。5.5.合理的输出合理的输出 一一个个有有效效的的程程序序在在设设计计算算法法时时必必须须保保证证程程序序至至少少要有一个输出。要有一个输出。
5、4.1算法概述算法概述l4.1.3算法的表示工具算法的表示工具 l在实际应用中有四种表示方法来描述算法:在实际应用中有四种表示方法来描述算法:(1)自然语言)自然语言(2)流程图)流程图(3)N-S图图(4)伪代码)伪代码4.1算法概述算法概述自然语言就是人们日自然语言就是人们日常生活中使用的语常生活中使用的语言。言。语法不严谨,语法不严谨,容易造成误解容易造成误解1973年美国学者年美国学者I.Nassi和和B.Shneideman提出提出的一种无流线的流程的一种无流线的流程图图流程图流程图是目前全球软件开发领域使用最广泛的算是目前全球软件开发领域使用最广泛的算法表示工具,它通过一些严格定义
6、图形的组合来表示法表示工具,它通过一些严格定义图形的组合来表示算法的步骤以及数据变化的走向。用图形表示算法,算法的步骤以及数据变化的走向。用图形表示算法,直观形象,易于理解。直观形象,易于理解。l4.1.3 4.1.3 算法的表示工具算法的表示工具 l流程图符号流程图符号 4.1算法概述算法概述起止框起止框输入输出框输入输出框判断框判断框流程线流程线处理框处理框连接点连接点注释框注释框4.1算法概述算法概述l4.1.3算法的表示工具算法的表示工具 l例:求例:求的值。的值。求多项式的累乘积问题。求多项式的累乘积问题。定义变量:定义变量:M累乘积累乘积N代表一项的分母代表一项的分母算法算法:M1
7、,N1MMNN+1如果如果N100,转转,否则,转,否则,转输出输出M的值的值结束结束循环循环算法描述:算法描述:自然语言自然语言+伪代码伪代码4.1算法概述算法概述l4.1.3算法的表示工具算法的表示工具 处理框处理框流程线流程线判断框判断框用用N-S图描述图描述用流程图描述用流程图描述M1N1MMNN+1N100输出输出M的的值值开始开始结束结束M1N1MMNN+1输出输出M的值的值N100TrueFalse4.1算法概述算法概述l4.1.4结构化程序设计中基本结构的表示结构化程序设计中基本结构的表示l结构化程序设计结构化程序设计的基本结构有三种的基本结构有三种:顺序结构顺序结构、选择结选
8、择结构构和和循环结构循环结构。1、顺序结构顺序结构:先执行:先执行A操作操作,再执行再执行B操作。操作。AB(a)流程图流程图(b)N-S图图ABA、B可以是可以是一个简单语句一个简单语句或一个基本结构或一个基本结构4.1算法概述算法概述l4.1.4结构化程序设计中基本结构的表示结构化程序设计中基本结构的表示2、选择结构选择结构:C(Condition)代表一个条件)代表一个条件C TrueFalse AB(a)流程图流程图(b)N-S图图True FalseCAB4.1算法概述算法概述l4.1.4结构化程序设计中基本结构的表示结构化程序设计中基本结构的表示3、循环结构循环结构:(1)当(当(
9、while)型循环:)型循环:当条件当条件C成立时,反复执成立时,反复执行行A操作,直到操作,直到C为假时,才停止循环。为假时,才停止循环。CAFalseTrue(a)流程图流程图(b)N-S图图先判断,后执行,先判断,后执行,有可能循环体一次有可能循环体一次都不执行都不执行 当当C为真为真 A4.1算法概述算法概述l4.1.4结构化程序设计中基本结构的表示结构化程序设计中基本结构的表示3、循环结构循环结构:(2)直到(直到(until)型循环:)型循环:先执行先执行A操作,再判断条件操作,再判断条件C,若为,若为“假假”重复执行重复执行A,直到,直到C为为“真真”停止停止先执行,后判断,先执
10、行,后判断,循环体至少要被执循环体至少要被执行一次行一次 ACFalseTrue A 直到直到C为真为真(a)流程图流程图(b)N-S图图4.1算法概述算法概述l4.1.4结构化程序设计中基本结构的表示结构化程序设计中基本结构的表示AB三种结构特点:三种结构特点:单入口、单出口。单入口、单出口。每一部分都可能被执行到。每一部分都可能被执行到。没有死循环。没有死循环。A、B可能是一个更基本的结构。可能是一个更基本的结构。ACFalseTrueTrue FalseCABCAFalseTrueC语言程序是由若干函数构成,而一个函数由语言程序是由若干函数构成,而一个函数由若干语句构成。这些语句组合成三
11、种基本结构若干语句构成。这些语句组合成三种基本结构以实现算法。参考图以实现算法。参考图4-8l计算机程序运行的时候是将一条条的计算机程序运行的时候是将一条条的语句语句翻译翻译成成机器指令机器指令,控制计算机产生计算的结果的。,控制计算机产生计算的结果的。所以所以语句是计算机程序的基本组成单位语句是计算机程序的基本组成单位。l注意注意:在:在C语言程序中,任何执行语句都必须语言程序中,任何执行语句都必须写在函数中,不允许出现不属于函数的独立执写在函数中,不允许出现不属于函数的独立执行语句。行语句。4.2C语言程序的结构和语句概述语言程序的结构和语句概述语句分类语句分类:(5类类)1.控制语句控制
12、语句:控制语句的执行流程,共控制语句的执行流程,共9种。种。(1)if()else条件语句条件语句(2)switch多分支选择语句多分支选择语句(3)while()当型循环语句当型循环语句(4)dowhile()直到型循环语句直到型循环语句(5)for()当型循环语句当型循环语句(6)continue结束本次循环语句结束本次循环语句(7)break中止执行中止执行switch或循环语句或循环语句(8)goto转向语句转向语句(9)return从函数中返回语句从函数中返回语句4.2C语言程序的结构和语句概述语言程序的结构和语句概述语句分类语句分类:(5类类)2.函数调用语句函数调用语句:在函数调
13、用的后面加上一个分号构成:在函数调用的后面加上一个分号构成的一条语句,实现函数定义中规定的功能。的一条语句,实现函数定义中规定的功能。例例:scanf(%d,&i);调用标准库函数调用标准库函数a=maxx(x1,x2);调用自定义函数调用自定义函数3.表达式语句表达式语句:在一个表达式的后面加上一个分号构成:在一个表达式的后面加上一个分号构成的一条语句,实现表达式的计算功能。的一条语句,实现表达式的计算功能。例:例:a=b+c/*赋值表达式赋值表达式*/a=b+c;/*赋值表达式语句赋值表达式语句*/4.2C语言程序的结构和语句概述语言程序的结构和语句概述4.2C语言程序的结构和语句概述语言
14、程序的结构和语句概述例例:a=1;b=2;c=3;三个简单语句三个简单语句一个一个复合语句复合语句语句分类语句分类:(5类类)4.空语句空语句:;只有一个分号,什么都不做。主要只有一个分号,什么都不做。主要用于作被转向点,或空循环体。用于作被转向点,或空循环体。5.复合语句复合语句:用:用把多条语句括起来构成复合语把多条语句括起来构成复合语句,从语法上看成一条简单语句。句,从语法上看成一条简单语句。选择结构选择结构判断给定的条件,根据判断的结果判断给定的条件,根据判断的结果从给定的多组操作中选择一组执行。从给定的多组操作中选择一组执行。4.3.1if语句语句if语句的标准语法格式:语句的标准语
15、法格式:if()语句语句1else语句语句2l方括号中的内容是可选的。方括号中的内容是可选的。l“语句语句1”和和“语句语句2”必须是一条语句。必须是一条语句。4.3选择结构语句选择结构语句4.3.1if语句语句if语句有三种使用形式。语句有三种使用形式。4.3选择结构语句选择结构语句1.if()语句语句2.if()语句语句1else语句语句2语句语句表达式表达式假假真真语句语句1表达式表达式假假真真语句语句2不平衡不平衡if语句语句单选单选平衡平衡if语句语句二中选一二中选一l例例4.1输入三个数字,程序求出并输出其中的最大值。输入三个数字,程序求出并输出其中的最大值。#includemai
16、n()floata,b,c,t;printf(Pleaseinputthreenumbers:);scanf(%f%f%f,&a,&b,&c);t=a;if(tb)t=b;if(tc)t=c;printf(TheMaximumnumberis:%fn,t);4.3选择结构语句选择结构语句两个独立的两个独立的不平衡不平衡if语句语句4.3选择结构语句选择结构语句两个独立的两个独立的平衡平衡if语句语句l例例4.2输入三个数字,程序求出并输出其中的最大值。输入三个数字,程序求出并输出其中的最大值。#includemain()floata,b,c,t;printf(Pleaseinputthreen
17、umbers:);scanf(%f%f%f,&a,&b,&c);if(ab)t=b;elset=a;if(tc)printf(TheMaximumnumberis:%fn,c);elseprintf(TheMaximumnumberis:%fn,t);4.3.1if语句语句3.组合的组合的if语句语句4.3选择结构语句选择结构语句基本格式:基本格式:if()语句语句1elseif()语句语句2elseif()语句语句3elseif()语句语句nelse语句语句n+1对程序的一次执行,对程序的一次执行,只可能执行语句只可能执行语句1、语句语句2、语句语句n中的一个语句中的一个语句语句语句1表达式
18、表达式1假假真真语句语句2表达式表达式2表达式表达式n语句语句n语句语句n+1假假假假真真真真l例例4.3输入三个数字,程序求出并输出其中的最大值。输入三个数字,程序求出并输出其中的最大值。#includemain()floata,b,c;printf(Pleaseinputthreenumbers:);scanf(%f%f%f,&a,&b,&c);if(a=b&a=c)printf(TheMaximumnumberis:%fn,a);elseif(b=a&b=c)printf(TheMaximumnumberis:%fn,b);elseprintf(TheMaximumnumberis:%f
19、n,c);4.3选择结构语句选择结构语句组合组合ifif语句的使用,语句的使用,一条语句一条语句例:输入学生的分数例:输入学生的分数x,根据成绩的高低,输出不同等级,根据成绩的高低,输出不同等级若若x为为:90100分分则输出则输出A8089分分则输出则输出B7079分分则输出则输出C6069分分则输出则输出D60分以下分以下则输出则输出E4.3选择结构语句选择结构语句#includevoidmain()intx;scanf(“%d”,&x);if(x=90)printf(“An”);elseif(x=80)printf(“Bn”);elseif(x=70)printf(“Cn”);elsei
20、f(x=60)printf(“Dn”);elseprintf(“En”);注意注意:条件的写法:条件的写法l例例4.4输入百分制成绩,将其转换为五分制成绩输出。输入百分制成绩,将其转换为五分制成绩输出。#includemain()floatscore;printf(Pleaseinputthescore:);scanf(%f,&score);if(score=90)printf(Thegradeis:An);elseif(score=80)printf(Thegradeis:Bn);elseif(score=70)printf(Thegradeis:Cn);elseif(score=60)pr
21、intf(Thegradeis:Dn);elseprintf(Thegradeis:En);4.3选择结构语句选择结构语句组合组合ifif语句的使用,语句的使用,注意注意elseelse的作用的作用4.3.2if语句的嵌套使用语句的嵌套使用4.3选择结构语句选择结构语句if()if()语句语句1else语句语句2elseif()语句语句3else语句语句4内嵌平衡内嵌平衡if语句语句内嵌平衡内嵌平衡 if if 语句语句内嵌的内嵌的if-else语句为一条语句语句为一条语句嵌套时,嵌套时,else总是总是与它上面与它上面(未曾配对未曾配对的的)最近的最近的if配对配对4.3.2if语句的嵌套使
22、用语句的嵌套使用4.3选择结构语句选择结构语句if()if()语句语句1elseif()语句语句2else语句语句3内嵌不平衡内嵌不平衡if语句语句内嵌平衡内嵌平衡 if if 语句语句if()if()语句语句1elseif()语句语句2else语句语句3加花括号加花括号4.3.2if语句的嵌套使用语句的嵌套使用4.3选择结构语句选择结构语句if(条件条件1)语句语句1elseif(条件条件2)语句语句2elseif(条件条件3)语句语句3else语句语句4缩进书写方式缩进书写方式if(条件条件1)语句语句1elseif(条件条件2)语句语句2elseif(条件条件3)语句语句3else语句语
23、句4组合组合if语句语句l例例4.5用嵌套的用嵌套的if语句解决数学问题语句解决数学问题#includemain()floatx,y;printf(Pleaseinputx:);scanf(%f,&x);if(x10)y=-10;/*A*/elseif(x=10)y=5;/*B:内嵌内嵌if语句语句*/elsey=20;/*C*/printf(y=%fn,y);4.3选择结构语句选择结构语句y=-10(x10)if(x=10)if(x10)y=-10;elsey=5;elsey=20;等价等价4.3.3条件运算符条件运算符一般形式:一般形式:?:l运算原则:运算原则:当当表达式表达式1为为真真
24、时,执行时,执行表达式表达式2,结果作为整个表达式,结果作为整个表达式的值的值当当表达式表达式1为为假假时,执行时,执行表达式表达式3,结果作为整个表达式,结果作为整个表达式的值的值4.3选择结构语句选择结构语句if(ab)max=a;elsemax=b;max=(ab)?a:b;4.3.3条件运算符条件运算符4.3选择结构语句选择结构语句运算优先级:运算优先级:比赋值运算符高,比算术、关系、逻辑运比赋值运算符高,比算术、关系、逻辑运算符低算符低结合性:结合性:自右向左自右向左例如有如下的条件运算符表达式:例如有如下的条件运算符表达式:x=ab?a:cb?a:(cb?c:b);在嵌套使用条件运
25、算符时,应尽量使用括号将相关数在嵌套使用条件运算符时,应尽量使用括号将相关数据括起来,防止出现执行和理解的错误。据括起来,防止出现执行和理解的错误。C语言中唯一的语言中唯一的三目运算符三目运算符4.3.4switch语句(语句(多分支选择语句,开关语句多分支选择语句,开关语句)switch()case:语句序列语句序列1;case:语句序列语句序列2;case:语句序列语句序列n;default:语句序列语句序列n+1;4.3选择结构语句选择结构语句3.当表达式的值当表达式的值与所有常量表达与所有常量表达式的值均不相等式的值均不相等时,就执行时,就执行default后面的语后面的语句句2.当表
26、达式的值当表达式的值与某个常量表达与某个常量表达式的值相等时,式的值相等时,就执行后面相应就执行后面相应的语句的语句1.整型表达式整型表达式或字符型表达式或字符型表达式例:根据五分制考试成绩打印出分数等级例:根据五分制考试成绩打印出分数等级chargrade;grade=getchar();/*输入五分制成绩输入五分制成绩*/switch(grade)caseA:printf(Excellentn);/*优优*/caseB:printf(Goodn);/*良良*/caseC:printf(Mediumn);/*中中*/caseD:printf(Passn);/*及格及格*/default:pr
27、intf(Failn);/*不及格不及格*/4.3选择结构语句选择结构语句break;break;break;break;执行完一个执行完一个case后面语后面语句后,流程转下一个句后,流程转下一个case继续执行继续执行。本例中,若本例中,若grade的值的值等于等于A,则将连续,则将连续输出:输出:ExcellentGoodMediumPassFail加上加上break语句后,语句后,就可以实现执行一就可以实现执行一个个case后,终止后,终止switch语句语句default后可以后可以不加不加break语句语句switch语句中多个语句中多个case共用一组执行语句(共用一组执行语句(
28、建建立数据范围分支判断立数据范围分支判断)intx;switch(x)case2:case1:printf(Negativen);break;case0:printf(Zeron);break;case1:case2:printf(Positivn);4.3选择结构语句选择结构语句x的值为的值为-2或或-1时执行同一组时执行同一组语句语句x的值为的值为1或或2时时执行另外一组执行另外一组语句语句l注意:注意:1在在switch语句中,语句中,default分支可以放在任何位置。但是分支可以放在任何位置。但是为了程序书写和阅读方便,一般将为了程序书写和阅读方便,一般将default分支写在分支写
29、在switch语句的最后一行。语句的最后一行。2每个常量表达式的值都必须互不相同,否则当表达式每个常量表达式的值都必须互不相同,否则当表达式的值与多个常量表达式的值都匹配时,计算机将无法决的值与多个常量表达式的值都匹配时,计算机将无法决定到底该执行哪一个常量表达式后面的语句序列。定到底该执行哪一个常量表达式后面的语句序列。3常量表达式必须是一个确定的字符类型或者整数类型常量表达式必须是一个确定的字符类型或者整数类型的常量数值,而不能是浮点数或者变量表达式。的常量数值,而不能是浮点数或者变量表达式。4switch语句虽然可以模拟组合的语句虽然可以模拟组合的if语句,但是并不是与语句,但是并不是与
30、组合的组合的if语句完全等价。语句完全等价。switch语句只能处理字符类型和语句只能处理字符类型和整数类型的条件判断,而组合的整数类型的条件判断,而组合的if语句不但可以处理字语句不但可以处理字符类型和整数类型的条件判断,还可以对浮点数等其它符类型和整数类型的条件判断,还可以对浮点数等其它的条件进行判断。由此看来,组合的的条件进行判断。由此看来,组合的if语句的功能要远语句的功能要远远大于远大于switch语句。语句。4.3选择结构语句选择结构语句l课堂练习:课堂练习:4.3选择结构语句选择结构语句i=2;switch(i)case1:i+;case2:i+;case3:i+;case4:i
31、+;default:i+;Printf(“%dn”,i);输出:?输出:?输出:输出:6l例例4.6:用:用switch语句解决公积金问题。根据输入的收入语句解决公积金问题。根据输入的收入金额求出并且输出应该缴纳的公积金。假设公积金缴金额求出并且输出应该缴纳的公积金。假设公积金缴纳比例设置如下:纳比例设置如下:收入收入10002%比例比例1000=收入收入20003%比例比例2000=收入收入50004%比例比例5000=收入收入100005%比例比例10000=收入收入6%比例比例缴纳总金额:缴纳总金额:fee=in*r%in收入收入r缴纳比例的分子缴纳比例的分子4.3选择结构语句选择结构语
32、句#includemain()intin,temp,r;floatfee;printf(Pleaseinputyourincome:);scanf(%d,&in);temp=in/1000;/*按照按照1000为单位进行区间划分为单位进行区间划分*/switch(temp)case0:r=2;break;case1:r=3;break;4.3选择结构语句选择结构语句case2:case3:case4:r=4;break;case5:case6:case7:case8:case9:r=5;break;default:r=6;fee=in*r/100.0;printf(Theaccumulatio
33、nfundis:%f,fee);4.3选择结构语句选择结构语句l只要计算的数据之间存在着规律性的变化,就可只要计算的数据之间存在着规律性的变化,就可以使用循环结构来对其进行迭代计算。以使用循环结构来对其进行迭代计算。l例如:例如:4.4循环结构语句循环结构语句实现形式主要有以下四种:实现形式主要有以下四种:1用用goto语句和标号构成循环语句和标号构成循环2用用while语句构成循环语句构成循环3用用for语句构成循环语句构成循环4用用do-while语句构成循环语句构成循环l4.4.1goto语句及标号的使用语句及标号的使用l一般形式一般形式:goto;l语句标号语句标号:用标识符表示,命名
34、规则与变量名相:用标识符表示,命名规则与变量名相同。其作用是确定流程跳转目标。同。其作用是确定流程跳转目标。lgoto语句主要用途语句主要用途1.与与if语句一起构成循环结构语句一起构成循环结构2.从循环体中跳转到循环体外从循环体中跳转到循环体外4.4循环结构语句循环结构语句例例4.7用用goto语句求解语句求解1到到100的累加和的累加和s。#includemain()inti=1,m=0;loop:if(i=100)m+=i;i+;gotoloop;/*跳转到标号跳转到标号loop*/printf(Thesumfrom1to100is:%d,m);4.4循环结构语句循环结构语句由于在程序中
35、大量由于在程序中大量使用使用goto跳转命令跳转命令会破坏结构化程序会破坏结构化程序设计的原则设计的原则,该,该命令要限制使用命令要限制使用l4.4.2while语句语句l一般形式一般形式:while()4.4循环结构语句循环结构语句当表达式为真当表达式为真(非非0)值时,值时,执行执行while语句中的内嵌语句语句中的内嵌语句。语句语句表达式表达式假假真真先判断先判断表达式表达式后执行后执行语句语句例例4.8用用while语句求解语句求解1到到100的累加和的累加和s。#includemain()inti=1,sum=0;while(i=100)/*循环体是一个复合语句循环体是一个复合语句*
36、/sum+=i;i+;printf(Thesumfrom1to100is:%dn,sum);4.4循环结构语句循环结构语句循环体循环体循环体包含一个以循环体包含一个以上的语句时,应该上的语句时,应该用大括号括起来用大括号括起来在循环体内应有在循环体内应有使循环趋于结束使循环趋于结束的语句的语句累加计算中的累加和累加计算中的累加和变量一般初始化为变量一般初始化为0,累乘计算中的累乘,累乘计算中的累乘积变量一般初始化为积变量一般初始化为1。l4.4.3for语句语句l一般形式一般形式:for(;)l相当于相当于“当型当型”循环循环首先执行首先执行完成变量的初始化,然后进完成变量的初始化,然后进行行
37、的计算。的计算。如果条件表达式的计算结果为真(非如果条件表达式的计算结果为真(非0值),则执行值),则执行,然后执行,然后执行,修改相关的循环变,修改相关的循环变量,转到量,转到,继续下一次循环;如果,继续下一次循环;如果的计算结果为假(的计算结果为假(0值),则结束循环语句值),则结束循环语句的执行。的执行。4.4循环结构语句循环结构语句l4.4.3for语句语句4.4循环结构语句循环结构语句语句语句条件表达式条件表达式假假真真修正表达式修正表达式初始化表达式初始化表达式初始化表达式初始化表达式;while(条件表达式条件表达式)语句语句;修正表达式修正表达式;l4.4.3for语句语句lf
38、or语句与语句与while语句的对应举例:语句的对应举例:4.4循环结构语句循环结构语句for(i=1;i=100;i+)sum=sum+i;i=1;while(i=100)sum=sum+i;i+;例例4.9用用for语句求解累加和语句求解累加和s。#includemain()intsum=0,i;for(i=1;i=100;i+)sum+=i;printf(Thesumfrom1to100is:%dn,sum);4.4循环结构语句循环结构语句l4.4.3for语句语句l注意事项注意事项:1.“初始化表达式初始化表达式”可省略,初始化移至循环体前可省略,初始化移至循环体前i=1;for(;i
39、=100;i+)sum=sum+i;2.“条件表达式条件表达式”可省略,做可省略,做“永真永真”处理,处理,循环无终止地进行。循环无终止地进行。for(i=1;i+)sum=sum+i;4.4循环结构语句循环结构语句分号不能省略分号不能省略分号不能省略分号不能省略l4.4.3for语句语句l3.“修正表达式修正表达式”可省略,可省略,“修正修正”移至循环体内移至循环体内for(i=1;i=100;)sum=sum+i;i+;l4.“循环体循环体”可为空,将循环体中应做的工作,放在可为空,将循环体中应做的工作,放在“修修正表达式正表达式”中。中。for(i=1;i=100;sum=sum+i,i
40、+);4.4循环结构语句循环结构语句循环变量在循循环变量在循环体内变化环体内变化l4.4.3for语句语句l5.三个三个“表达式表达式”和和“语句语句”都可省略,无限循环都可省略,无限循环for(;);l6.“初始化表达式初始化表达式”和和“修正表达式修正表达式”可以是一个以上的可以是一个以上的表达式表达式for(sum=0,i=1;i=100;i+,j-)sum=sum+i;for(i=1;i=100;i+,i+)sum=sum+i;4.4循环结构语句循环结构语句while(1);l4.4.4do-while语句语句l一般形式一般形式:do/*循环体循环体*/while();4.4循环结构语
41、句循环结构语句 先执行指定的内嵌语句,然后先执行指定的内嵌语句,然后判断表达式。判断表达式。语句语句表达式表达式假假真真先执行语句先执行语句然后再判断表达式然后再判断表达式l4.4.4do-while语句语句例例4.10用用do-while语句求解语句求解1到到100的累加和的累加和s。#includemain()inti=1,sum=0;dosum+=i;i+;while(i=100);printf(Thesumfrom1to100is:%dn,sum);4.4循环结构语句循环结构语句l4.4.4do-while语句语句 while和和do-while循环比较循环比较4.4循环结构语句循环结
42、构语句main()inti,sum=0;scanf(%d,&i);while(i=5)sum+=i;i+;printf(%d,sum);main()inti,sum=0;scanf(%d,&i);dosum+=i;i+;while(i=10)break;4.4循环结构语句循环结构语句当变量当变量i的值等的值等于于10时,跳出时,跳出循环体,不再循环体,不再执行其余几次执行其余几次循环循环l4.4.5break语句和语句和continue语句语句lcontinue语句语句一般形式:一般形式:continue;作用:作用:结束本次循环结束本次循环,即跳过循环体下面未执行的语句,即跳过循环体下面未执
43、行的语句,接着进行下一次是否执行循环的判定。接着进行下一次是否执行循环的判定。for(n=100;n=200;n+)if(n%3=0)continue;printf(“%dn”,n);4.4循环结构语句循环结构语句当当n能被能被3整除时整除时,跳出本次循环,不跳出本次循环,不再执行再执行printf语句,语句,但是还要继续循但是还要继续循环环判断判断本程序的功能是打本程序的功能是打印出印出100200之间不之间不能被能被3整除的整数整除的整数l4.4.5break语句和语句和continue语句语句 break和和continue语句比较语句比较4.4循环结构语句循环结构语句for(i=1;i
44、=4;i+)x=i*i;if(x=9)break;printf(%dn,x);printf(i=%dn,i);for(i=1;i=4;i+)x=i*i;if(x=9)continue;printf(%dn,x);printf(i=%dn,i);输出:输出:14i=3输出:输出:1416i=5例例4.11用循环语句求两个数的最大公约数和最小公倍数。用循环语句求两个数的最大公约数和最小公倍数。#includemain()intx,y,i,k;printf(Pleaseinputtwointegers:);scanf(%d%d,&x,&y);k=x=1;i-)/*A行,求最大公约数行,求最大公约数*
45、/if(x%i=0&y%i=0)break;4.4循环结构语句循环结构语句printf(GreatestCommonDivisor:%dn,i);k=xy?x:y;/*取两数中的大数取两数中的大数*/for(i=k;i=x*y;i+)/*B行,求最小公倍数行,求最小公倍数*/if(i%x=0&i%y=0)break;printf(LowestCommonMultiple:%dn,i);4.4循环结构语句循环结构语句l4.4.6 4.4.6 循环的嵌套循环的嵌套l嵌套:嵌套:一个循环体内包含另一个完整的循环结构一个循环体内包含另一个完整的循环结构l多层循环:多层循环:内嵌的循环体内又嵌套循环结构
46、内嵌的循环体内又嵌套循环结构l前述的三种循环都可以互相嵌套前述的三种循环都可以互相嵌套 4.4循环结构语句循环结构语句三重循环三重循环双重循环双重循环例例4.12用循环嵌套技术输出用循环嵌套技术输出99乘法表乘法表#includemain()inti,j;printf(Multiplicationtable:n);for(i=1;i=9;i+)/*外循环控制输出的行数外循环控制输出的行数*/for(j=1;j0,有两个不相等的实数根,有两个不相等的实数根4b2-4ac0,有两个共轭的复数根,有两个共轭的复数根4.5控制语句应用举例控制语句应用举例#include#includemain()fl
47、oata,b,c,disc,x1,x2,real,image;printf(Pleaseinputthreerealnumbers:);scanf(%f%f%f,&a,&b,&c);printf(Theequation);if(fabs(a)=1e-7)/*a=0。处理第。处理第1种情况。种情况。*/printf(isnotquadratic,solutionis%.2fn,-c/b);4.5控制语句应用举例控制语句应用举例else/*处理处理2、3、4三种情况三种情况*/disc=b*b-4*a*c;if(fabs(disc)1e-7)/*disc0*/x1=(-b+sqrt(disc)/(
48、2*a);x2=(-b-sqrt(disc)/(2*a);printf(hasdistinctrealroots:%.2fand%.2fn,x1,x2);4.5控制语句应用举例控制语句应用举例else/*disc0*/real=-b/(2*a);image=sqrt(-disc)/(2*a);printf(hascomplexroots:n);printf(%.2f+%.2fin,real,image);printf(%.2f-%.2fin,real,image);4.5控制语句应用举例控制语句应用举例运行程序四次,结果分别如下:运行程序四次,结果分别如下:(1)Pleaseinputthre
49、erealnumbers:02-3Theequationisnotquadratic,solutionis1.50(2)Pleaseinputthreerealnumbers:144Theequationisnotquadratic,solutionis:-2.00(3)Pleaseinputthreerealnumbers:241Theequationhasdistinctrealroots:-0.29and-1.71(4)Pleaseinputthreerealnumbers:221Theequationhascomplexroots:-0.50+0.50i-0.50-0.50i4.5控制
50、语句应用举例控制语句应用举例例例4.14输入一个输入一个int型整数型整数num,逆向输出其各位数字,同,逆向输出其各位数字,同时求出其位数以及各位数字之和。时求出其位数以及各位数字之和。#includemain()intnum,sum=0,k,i=0;scanf(%d,&num);4.5控制语句应用举例控制语句应用举例while(num0)k=num%10;printf(%d,k);sum+=k;i+;num=num/10;printf(nsum=%dn,sum);/*各位数字之和各位数字之和*/printf(digitnumber=%dn,i);/*num的位数的位数*/4.5控制语句应用