第三章 控制语句.ppt

上传人:hwp****526 文档编号:85511706 上传时间:2023-04-11 格式:PPT 页数:57 大小:671KB
返回 下载 相关 举报
第三章 控制语句.ppt_第1页
第1页 / 共57页
第三章 控制语句.ppt_第2页
第2页 / 共57页
点击查看更多>>
资源描述

《第三章 控制语句.ppt》由会员分享,可在线阅读,更多相关《第三章 控制语句.ppt(57页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、第第三三章章 控制语句控制语句n程序的三种基本结构程序的三种基本结构n顺序结构顺序结构n选择结构选择结构n循环控制结构循环控制结构n选择结构程序设计选择结构程序设计n循环结构程序设计循环结构程序设计n辅助控制语句辅助控制语句3.1 程序的三种基本结构程序的三种基本结构n结构化程序设计结构化程序设计n基本思想:任何程序都可以用三种基本结构表示,基本思想:任何程序都可以用三种基本结构表示,限制使用无条件转移语句(限制使用无条件转移语句(goto)n优点:结构清晰,易读,提高程序设计质量和效优点:结构清晰,易读,提高程序设计质量和效率率n三种基本结构三种基本结构n顺序结构顺序结构ABAB流程图流程图

2、N-S图图PAB真真假假PBA真真假假v选择结构选择结构-二分支选择结构二分支选择结构-多分支选择结构多分支选择结构kA1A2AiAnk=k2k=k1k=knk=ki.v循环结构循环结构-当型循环结构当型循环结构-直到型循环结构直到型循环结构PA假假真真当当P为真为真AAP真真假假A直到直到P为真为真A,B,A1.An可以是一个简单语句,也可以是一个基本结构可以是一个简单语句,也可以是一个基本结构C语句概述句概述C语句分为以下五类:语句分为以下五类:n控制语句:完成程序流程控制,包括条件、循环、控制语句:完成程序流程控制,包括条件、循环、分支等。分支等。n函数调用语句:由函数调用加分号构成。函

3、数调用语句:由函数调用加分号构成。n表达式语句:在表达式后面加分号构成,常用的有表达式语句:在表达式后面加分号构成,常用的有赋值语句。赋值语句。n空语句:仅包含一个分号的语句。空语句:仅包含一个分号的语句。n复合语句:由大括号复合语句:由大括号 括起来的语句序列。括起来的语句序列。C语句:以语句:以;作分隔符,编译后产生机器指令。作分隔符,编译后产生机器指令。n格式:格式:数据说明部分;数据说明部分;执行语句部分;执行语句部分;n说明:说明:n后不加分号后不加分号n语法上和单一语句相同语法上和单一语句相同n复合语句可嵌套复合语句可嵌套复合语句复合语句main()int i,j,sum;sum=

4、0;for(i=1;i10;i+)for(j=1;j10;j+)sum=i*j;printf(“%d”,sum);C程序流程控制语句程序流程控制语句(共共9种)种)if()else switchfor()while()dowhile()continuebreakgotoreturn分支分支循环循环辅助控制辅助控制n关系运算符关系运算符n种类种类:=!=n结合方向:自左向右结合方向:自左向右n优先级别:优先级别:=!=优先级(高)优先级(高)优先级(低)优先级(低)例例 ca+b /*c(a+b)*/ab!=c /*(ab)!=c*/a=bc /*a=(bc /*a=(bc)*/n关系表达式的值

5、:是逻辑值关系表达式的值:是逻辑值“真真”或或“假假”,用,用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*/关系运算符和表达式关系运算符和表达式n关系运算注意:关系运算注意:区分区分“=”与与“=”例例 5278在在C中是允许的,中是允许的,值为值为0例例 int i=1,j=7,a;a=i+(j%4!=0);则则a=2例例 a0 结果为结果为 A100 结果为结果为10关系运算符和表达式(续)关系运算符和表达式(续)应避免对应避免对实数实数

6、作相等或不等的判断作相等或不等的判断例例 1.0/3.0*3.0=1.0 结果为结果为 0可改写为:可改写为:fabs(1.0/3.0*3.0-1.0)1e-6ab!a!ba&ba|b真真假假真真假假假假假假真真真真n逻辑运算符逻辑运算符n种类:种类:!&|n逻辑运算真值表逻辑运算真值表nC C语言中语言中,运算量运算量:0 0表示表示“假假”,非非0 0表示表示“真真”,运算结果运算结果:0 0表示表示“假假”,1 1表示表示“真真”,真真假假假假假假假假假假真真真真假假假假真真真真真真假假真真真真逻辑运算符和表达式逻辑运算符和表达式!&|高高低低例例 a=x&xb&xy a=b|x=y !

7、a|abl优先级:优先级:l结合方向:结合方向:!:从右向左从右向左&:从左向右从左向右|:从左向右从左向右/*(a=x)&(xb)&(xy)*/*(a=b)|(x=y)*/*(!a)|(ab)*/逻辑运算符和表达式(续)逻辑运算符和表达式(续)!&|高高低低l优先级:优先级:l结合方向:结合方向:!:从右向左从右向左&:从左向右从左向右|:从左向右从左向右例例 a=4;b=5;!a a&b a|b !a|b 4&0|2 53&2|83)&2|(8b)&(n=cd)/*结果结果m=0,n=1*/逻辑运算符和表达式(续)逻辑运算符和表达式(续)3.2 选择结构程序设计选择结构程序设计 if语句的

8、三种形式语句的三种形式n形式一:形式一:格式:格式:if(expression)statement执行过程:执行过程:例:例:if(xy)printf(“%d”,x);表达式表达式statement1statement2非非0=0n 形式二:形式二:格式:格式:if(expression)statement1 else statement2执行过程:执行过程:例:例:if(xy)max=x;else max=y;if语句(条件选择语句)语句(条件选择语句)表达式表达式statement非非0=0n形式三:形式三:格式:格式:if(expr1)statement1else if(expr2)st

9、atement2else if(expr3)statement3.else statementn 表达式表达式1statemnt1非非0=0表达式表达式2表达式表达式3statementnstatemnt3statemnt2非非0非非0=0=0执行过程:执行过程:例:例:if(salary1000)index=0.4;else if(salary800)index=0.3;else if(salary600)index=0.2;else if(salary400)index=0.1;else index=0;例:例:if(a=b&x=y)printf(“a=b,x=y”);if(3)print

10、f(“OK”);if(a)printf(“%d”,a);说明:说明:ifif后面的表达式类型任意后面的表达式类型任意语句可以是复合语句语句可以是复合语句 if(x)if(x!=0)if(!x)if(x=0)例:例:#include main()int x,y,z;scanf(“%d,%d”,&x,&y);if(xy)z=x;x=y;y=z;else x+;y+;printf(“%d,%dn”,x,y);Compile Error!#include main()int x,y;printf(Enter an integer:);scanf(%d,&x);y=x;if(yabsolute valu

11、e:%dn,x,y);例:求一个数的绝对值例:求一个数的绝对值Enter an integer:-12 integer:-12-absolute value:12#include main()int a,b;printf(Enter integer a:);scanf(%d,&a);printf(Enter integer b:);scanf(%d,&b);if(a=b)printf(a=bn);else printf(a!=bn);例:输入两个数并判断两数是否相等例:输入两个数并判断两数是否相等运行:运行:Enter integer a:12 Enter integer b:12 a=b 运

12、行:运行:Enter integer a:12 Enter integer b:9 a!=b#include main()char c;printf(Enter a character:);c=getchar();if(c=0&c=A&c=a&c=z)printf(The character is a lower lettern);else printf(The character is other charactern);例:判断输入字符种类例:判断输入字符种类运行:运行:Enter a character:The character is a control character运行:运行:

13、Enter a character:8 The character is a digit运行:运行:Enter a character:D The character is a capital letter运行:运行:Enter a character:h The character is a lower letter运行:运行:Enter a character:F1 The character is other characterif语句嵌套语句嵌套:if(expr1)if(expr2)statement1 else statement2else if(expr3)statement3 e

14、lse statement4内嵌内嵌if内嵌内嵌ifif(expr1)if(expr2)statement1 else statement2内嵌内嵌ifif(expr1)if(expr2)statement1else statement3 内嵌内嵌ifif(expr1)statement1else if(expr3)statement3 else statement4内嵌内嵌if例:输入两数并判断其大小关系例:输入两数并判断其大小关系#include main()int x,y;printf(Enter integer x,y:);scanf(%d,%d,&x,&y);if(x!=y)if(x

15、y)printf(XYn);else printf(XYn);else printf(X=Yn);运行:运行:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Ynif else 配对原则:配对原则:缺省缺省 时,时,else总是和它上面离它最近的未配对总是和它上面离它最近的未配对的的if 配对。配对。n实现实现if else 正确配对方法:加正确配对方法:加 if()if()if()else.else.else.例:例:if(a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);修改:修改:if(

16、a=b)if(b=c)printf(“a=b=c”);else printf(“a!=b”);条件运算符与表达式条件运算符与表达式n一般形式:一般形式:expr1?expr2 :expr3n功能:相当于条件语句,但不能取代一般功能:相当于条件语句,但不能取代一般ifif语句语句例例 if(ab)printf(“%d”,a);else printf(“%d”,b);printf(“%d”,ab?a:b);例例 求求 a+|b|printf(“a+|b|=%dn”,b0?a+b:a-b);expr1取取expr2值值取取expr3值值非非0=0例例 (a=b)?Y:N (x%2=1)?1:0 (x

17、=0)?x:-x (c=a&cb?a:cd?c:d ab?a:(cd?c:d)nexpr1、expr2、expr3 类型可不同,表达式值取较高的类型类型可不同,表达式值取较高的类型例例 x?a:b /*x=0,表达式值为表达式值为b;x0,表达式值为表达式值为a*/xy?1:1.5 /*xy,表达式值为表达式值为1.0;x60n”);break;.例例:switch(score)case 5:printf(“Very good!”);case 4:printf(“Good!”);case 3:printf(“Pass!”);case 2:printf(“Fail!”);default :pri

18、ntf(“data error!”);运行结果:运行结果:score为为5时,输出:时,输出:Very good!Good!Pass!Fail!data error!例例:void main()int x=1;int y=0;int a=0;int b=0;switch(x)case 1:switch(y)case 0:a+;break;case 1:b+;break;case 2:a+;b+;break;case 3:a+;b+;printf(“n a=%d,b=%d”,a,b);运行结果:运行结果:a=2,b=13.3 循环结构程序设计循环结构程序设计 C语言可实现循环的语句:语言可实现循

19、环的语句:n用用goto 和和 if 构成循环构成循环nwhile 语句语句ndo while 语句语句nfor 语句语句v功能:无条件转移语句功能:无条件转移语句v说明:说明:-不能不能用整数作标号用整数作标号-标号只能出现在标号只能出现在goto所在函数内所在函数内,且唯一且唯一-标号只能加在可执行语句前面标号只能加在可执行语句前面-限制使用限制使用goto语句语句(一)一)goto语句及用语句及用goto构成循环构成循环 goto 语句标号语句标号;.标号:语句标号:语句;vgoto语句一般格式:语句一般格式:例:用例:用if 和和goto语句构成循环,求语句构成循环,求#include

20、 main()int i,sum=0;i=1;loop:if(i=100)sum+=i;i+;goto loop;printf(%d,sum);sum=0+1sum=1+2=3sum=3+3=6sum=6+4sum=4950+100=5050循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体循环体v一般形式一般形式:while(表达式表达式)循环体语句;循环体语句;v执行流程执行流程:表达式表达式循环体循环体假假(0)真真(非非0)while(二)二)while语句语句v特点:先判断表达式,后执行循环体特点:先判断表达式,后执行循环体v说明:说明:-循环体有可能一次

21、也不执行循环体有可能一次也不执行-循环体可为任意类型语句循环体可为任意类型语句-下列情况,退出下列情况,退出while循环循环条件表达式不成立(为零)条件表达式不成立(为零)循环体内遇循环体内遇break,return,gotov无限循环无限循环:while(1)循环体循环体;例:用例:用while循环求循环求#include main()int i,sum=0;i=1;while(i=100)sum=sum+i;i+;printf(%d,sum);循环初值循环初值循环终值循环终值循环变量增值循环变量增值循环条件循环条件循环体循环体v一般形式:一般形式:do 循环体语句;循环体语句;while

22、(表达式表达式);v执行流程:执行流程:do循环体循环体表达式表达式假假(0)真真(非非0)while(三)三)dowhile语句语句v特点:先执行循环体,后判断表达式特点:先执行循环体,后判断表达式v说明:说明:-至少执行一次循环体至少执行一次循环体-dowhile可转化成可转化成while结构结构表达式表达式循环体循环体假假(0)真真(非非0)循环体循环体While循环循环例:用例:用dowhile循环求循环求#include main()int i,sum=0;i=1;do sum+=i;i+;while(i=100);printf(%d,sum);循环初值循环初值循环条件循环条件循环终

23、值循环终值循环变量增值循环变量增值循环体循环体例:例:while和和dowhile比较比较main()int i,sum=0;scanf(%d,&i);do sum+=i;i+;while(i=10);printf(%d,sum);main()int i,sum=0;scanf(%d,&i);while(i=10)sum+=i;i+;printf(%d,sum);v一般形式:一般形式:for(expr1;expr2;expr3)循环体语句;循环体语句;v执行流程:执行流程:表达式表达式2循环体循环体假假(0)真真(非非0)for表达式表达式1表达式表达式3(四四)for)for语句语句vfor

24、for语句一般应用形式语句一般应用形式:for(循环变量赋初值;循环条件;循环变量增值循环变量赋初值;循环条件;循环变量增值)循环体语句;循环体语句;#include main()int i;int sum=0;for(i=1;i=100;i+)sum+=i;printf(%d,sum);例:用例:用for循环求循环求-for语句中语句中expr1,expr2,expr3 类型任意,都可省略,类型任意,都可省略,但分号;不可省但分号;不可省-无限循环无限循环:for(;)-for语句可以转换成语句可以转换成while结构结构expr1;while(expr2)循环体语句;循环体语句;expr3

25、;v说明:说明:例:例:#include main()int i;for(i=0;i10;i+)putchar(a+i);例:例:#include main()int i=0;for(;i10;i+)putchar(a+i);例:例:#include main()int i=0;for(;i10;)putchar(a+(i+);#includemain()int i=0;for(;i10;putchar(a+i),i+);main()int i,j,k;for(i=0,j=100;i=j;i+,j-)k=i+j;printf(%d+%d=%dn,i,j,k);main()char c;for(

26、;(c=getchar()!=n;)printf(%c,c);main()int i,c;for(i=0;(c=getchar()!=n;i+=3)printf(%c,i+c);v三种循环可互相嵌套三种循环可互相嵌套,层数不限层数不限v外层循环可包含两个以上内循环外层循环可包含两个以上内循环,但不能相互交叉但不能相互交叉v嵌套循环的执行流程嵌套循环的执行流程v嵌套循环的跳转嵌套循环的跳转禁止:禁止:-从外层跳入内层从外层跳入内层-跳入同层的另一循环跳入同层的另一循环-向上跳转向上跳转(五)循环的嵌套(五)循环的嵌套例:循环嵌套,输出九九表例:循环嵌套,输出九九表1234567891234567

27、892468101214161836912151821242791827364554637281.ij#include main()int i,j;for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn:%4d,i*j);外循环外循环i10printf假假(0)真真(非非0)i=1j+j=1j10真真(非非0)假假(0)i+for(i=1;i10;i+)for(j=1;j10;j+)printf(j=9)?%4dn“:%4d,i*j);内循环内循环 nbreak语句语句n功能

28、:在循环语句和功能:在循环语句和switch语句中,终止并跳出语句中,终止并跳出循环体或开关体。循环体或开关体。n说明:说明:nbreak只能只能终止并跳出终止并跳出最近一层最近一层的结构的结构nbreak不能用于循环语句和不能用于循环语句和switch语句之外的语句之外的任何其它语句之中任何其它语句之中3.4 辅助控制语句辅助控制语句表达式表达式break;假假(0)真真(非非0)whiledobreak;.表达式表达式假假(0)真真(非非0)whileexpr2break;.假假(0)真真(非非0)forexpr1expr3switch表达式表达式语句组语句组1break;语句组语句组2b

29、reak;语句组语句组nbreak;语句组语句组break;.const 1const 2const ndefaultcase 举例:举例:从半径从半径=1开始,开始,输出圆输出圆的的面积面积直到直到面积大于面积大于100。#define PI 3.14159main()int r;float area;for(r=1;r100)break;printf(r=%d,area=%.2fn,r,area);例:例:小写字母转换成大写字母,输入非小写字母时终止小写字母转换成大写字母,输入非小写字母时终止#include main()int i,j;char c;while(1)c=getchar()

30、;if(c=a&c=z)putchar(c-a+A);else break;v功能:结束本次循环,跳过功能:结束本次循环,跳过循环体中循环体中尚未执行的尚未执行的语句,进行下一次是否执行循环体的判断语句,进行下一次是否执行循环体的判断v仅用于循环语句中仅用于循环语句中表达式表达式continue;假假(0)真真(非非0)while真真(非非0)docontinue;.表达式表达式假假(0)whileexpr2continue;.假假(0)真真(非非0)forexpr1expr3continue语句语句continue举例:输入的十个整数,求其中正数的个数及其平均值举例:输入的十个整数,求其中正

31、数的个数及其平均值#include main()int i,a;int num=0;float sum=0;for(i=0;i10;i+)scanf(%d,&a);if(a=0)continue;num+;sum+=a;printf(%d plus integers sum:%6.0fn,num,sum);printf(Mean value:%6.2fn,sum/num);例:求例:求Fibonacci数列:数列:1,1,2,3,5,8,的前的前40个数个数121121+=-FFFFFnnnf1=1,f2=1for i=1 to 20输出输出f1,f2f1=f1+f2f2=f2+f115342

32、33159710946750255142293524578241578171855377258417711121393832040570288739088169213896104181286571964181346269922746563245986321144987676546368317811217830914930352102334155例:判断例:判断m是否素数是否素数读入读入mk=mi=2当当i km被被i整除整除真真假假用用break结束循环结束循环i=i+1i k+1真真假假输出输出:m”是素数是素数”输出输出:m”不不是素数是素数”#include#include main()

33、int m,k,i=2;scanf(“%d”,&m);k=sqrt(m);while(i=(k+1)printf(“%d is a prime number”,m);else printf(“%d is a prime number”,m);例:判断例:判断m是否素数是否素数小结小结n从程序执行的流程来看,从程序执行的流程来看,程序可分为三种最基本的程序可分为三种最基本的结构:结构:顺序结构,分支结构以及循环结构。顺序结构,分支结构以及循环结构。n语言的条件分支语句包括:语言的条件分支语句包括:(1)if 语句主要用于单向选择。语句主要用于单向选择。(2)if-else 语句主要用于双向选择。语句主要用于双向选择。(3)if-else-if 语句和语句和switch语句用于多路选择。语句用于多路选择。n语言的循环语句包括:语言的循环语句包括:nwhile 语句语句ndo while 语句语句nfor 语句语句n语言的辅助控制语句包括:语言的辅助控制语句包括:continue、break、goto、return等等

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com