C语言讲义第03章-控制语句.ppt

上传人:tia****nde 文档编号:11495484 上传时间:2020-04-25 格式:PPT 页数:66 大小:335.50KB
返回 下载 相关 举报
C语言讲义第03章-控制语句.ppt_第1页
第1页 / 共66页
C语言讲义第03章-控制语句.ppt_第2页
第2页 / 共66页
C语言讲义第03章-控制语句.ppt_第3页
第3页 / 共66页
点击查看更多>>
资源描述
第三章控制语句,C语言程序设计,主要内容,控制语句简介ifelse语句SwitchCasefor语句while、dowhile语句break、continue语句特别的goto语句多重循环小结,控制语句,控制语句是C语言中非常重要的语句,用来实现结构程序设计中的选择和循环结构。语言主要有八种控制语句。可分成以下三类:(1)选择控制语句:ifelse语句,switchcase语句(2)循环控制语句:for语句,while语句,dowhile语句(3)转移控制语句:break语句,continue语句,goto语句,3.1ifelse语句,ifelse语句判定所给的条件是否满足,根据判定的结果选择执行两种操作之一执行。ifelse语句的三种形式if(表达式)语句if(表达式)语句1else语句2if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式n)语句nelse语句n+1,形式1:if(表达式)语句功能:这种形式的语句无else部分,它的功能是首先对表达式进行求解,若表达式的值为非0,则执行语句;若表达式的值为0,则该语句不起作用,不执行,而继续执行if语句下面的语句。例如:if(ab)printf(themaxis%d,a);当ab为真时,打印输出a的值,否则什么也不执行。,3.1ifelse语句三种形式之一,形式2:if(表达式)语句1else语句2功能:首先对表达式进行求解,若表达式的值为非0,则执行语句1,否则执行语句2。例如:if(ab)printf(themaxis%d,a);elseprintf(themaxis%d,b);当ab为真时,打印输出a的值,否则打印输出b的值。,3.1ifelse语句三种形式之二,形式3:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3elseif(表达式n)语句nelse语句n+1,3.1ifelse语句三种形式之三,功能:依次判断表达式的值,当出现某个值为非0时,则执行其对应的语句。然后跳到整个if语句之外继续执行程序。如果所有的表达式均为假,则执行语句n+1。然后继续执行后续程序。前二种形式的ifelse语句一般都用于两个分支的情况。当有多个分支选择时,可采用第3种形式ifelse语句。例如:if(grade=80)printf(A);elseif(grade=70)printf(B);elseif(grade=60)printf(C);elseprintf(D);,3.1ifelse语句三种形式之三,注意事项:1、在if后面的表达式,其类型可以是任意的(整形、实型、字符型、指针型),C语言在判断时只要非0,就认为是真,按真处理,只有0时才认为是假,按假处理。因此,而不仅仅限于逻辑表达式或关系表达式。,3.1ifelse语句注意事项,如:if(a=b,2、C语句必须在最后出现分号,分号是语句中不可缺少的一部分,因此if和else后面的语句都必须有分号。例如:if(ab)printf(themaxis%d,a);elseprintf(themaxis%d,b);,3.1ifelse语句注意事项,3.1ifelse语句注意事项,语句可以是复合语句if(x)if(x!=0)if(!x)if(x=0)在每个else前面有一分号,整个语句结束处有一分号在if或else后可有多个操作语句,此时需加将几个语句括起来成为一个复合语句。,例考虑下面程序的输出结果:#includemain()intx,y;scanf(“%d,%d”,CompileError!,例3.1接收任意输入的两个实数,按从大到小的顺序输出。程序如下:,3.1ifelse语句举例,例3.3要求判别键盘输入字符的类别。可以根据输入字符的ASCII码来判别类型。由ASCII码表可知ASCII值小于32的为控制字符。在0和9之间的为数字,在A和Z之间为大写字母,在a和z之间为小写字母,其余则为其它字符。这是一个多分支选择的问题,可采用第3种形式的.程序如下:,3.1ifelse语句举例,/*lt03_03.c*/#includevoidmain()charc;printf(Enteracharacter:);c=getchar();if(c=0,运行:Enteracharacter:Thecharacterisacontrolcharacter,运行:Enteracharacter:8Thecharacterisadigit,运行:Enteracharacter:DThecharacterisacapitalletter,运行:Enteracharacter:hThecharacterisalowerletter,运行:Enteracharacter:F1Thecharacterisothercharacter,If语句嵌套:在一个if语句中又包含一个或多个if语句。一般形式:,注意事项:ifelse配对原则:缺省时,else总是和它上面离它最近的未配对的if配对,3.1.2ifelse语句嵌套,例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,实现ifelse正确配对方法:加,例考虑下面程序输出结果:main()intx=100,a=10,b=20;intv1=5,v2=0;if(ab)if(b!=15)if(!v1)x=1;elseif(!v2)x=10;x=-1;printf(“%d”,x);/*ifz.c*/,结果:-1,例3.5有一函数如下:y=写一程序,输入x,输出y的值。程序如下:,3.1.2ifelse语句嵌套注意事项,x(xb)max=a;elsemax=b;说明:(1)条件运算符是一个三目运算符,即有三个参与运算的量,它是C语言中唯一的一个三目运算符。(2)条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符。因此max=(ab)?a:b可以去掉括号而写为max=ab?a:b,如果有ab?a:b+1则它等价于:ab?a:(b+1)。(3)条件运算符?和:是一对运算符,不能分开单独使用。(4)条件运算符的结合方向是自右至左。ab?a:cd?c:d应理解为ab?a:(cd?c:d)这也就是条件表达式嵌套的情形,即其中的表达式3又是一个条件表达式。如果a=2,b=3,c=4,d=5,则条件表达式的值为5,条件运算符?:,(5)条件表达式不能取代一般的if语句,只有当if语句的表达式为“真”和“假”时,都执行赋值语句并且都给同一个变量赋值时才能代替if语句。(6)表达式1的类型可以与表达式2和表达式3的类型不同;如:a?b:c表达式2和表达式3的类型也可以不同,此时条件表达式的值的类型为二者中较高的类型。例如:ab?3:3.5此时如果ab,则条件表达式的值为3.5,若ab,值应为3,但是由于3.5为实型数据,比整型的数据类型高,因此,将3转换成实型数据3.0,所以当ab时,条件表达式的值为3.0,条件运算符?:,例3.7输入一个字符,如果是小写字母,转换成对应的大写字母,其它字符不变。程序如下:,条件运算符?:举例,switch语句(开关分支语句)一般形式:,switch(表达式)caseE1:语句组1;break;caseE2:语句组2;break;.caseEn:语句组n;break;default:语句组;break;,执行过程:,3.2SwitchCase语句,switch语句说明:Switch后面的表达式允许为任何类型,一般为整形或字符型。当表达式的值与某一个case后面的常量表达式的值相等时,就执行case后面的语句,若所有的case中的常量表达式的值都没有与表达式的值相匹配,就执行default后面的语句。执行完一个case后面的语句后,流程控制转移到下一个case继续执行。(若无break语句)每一个case的常量表达式的值必须互不相等。各个case和default的出现次序影响执行结果。(若无break语句)break语句为了保证各个case和default的出现次序不影响执行结果,在case语句后加一break语句。,3.2SwitchCase语句,例switch(score)case5:printf(Verygood!”);case4:printf(“Good!”);case3:printf(“Pass!”);case2:printf(“Fail!”);default:printf(“dataerror!”);/*switch1.c*/,运行结果:score为5时,输出:Verygood!Good!Pass!Fail!dataerror!,3.2SwitchCase语句,运行结果:a=2,b=1,附加说明:case后可包含多个可执行语句,且不必加switch可嵌套多个case可共用一组执行语句,例voidmain()intx=1,y=0,a=0,b=0;switch(x)case1:switch(y)case0:a+;break;case1:b+;break;case2:a+;b+;break;case3:a+;b+;printf(“na=%d,b=%d”,a,b);/*switch2.c*/,如:caseA:caseB:caseC:printf(“score60n”);break;.,3.2SwitchCase语句,例3.8求一元二次方程ax2+bx+c=0的根。程序分析:一元二次方程ax2+bx+c=0的求根公式为:x=当a=0时,不是二次方程。当a=0,b=0时,方程无解。当a=0,b0时,方程的解为。当a0时,b2-4ac0有两个不相等的实根。b2-4ac=0有两个相等的实根。b2-4ac0有两个复根。程序如下:,3.2多分支程序举例,3.2多分支程序举例,例3.9写程序,判断某一年是否是闰年。分析:能被4整除但不能被100整除的是闰年。能被4、100、400同时整除的也是闰年。程序如下:例3.10四则运算求值:判断运算符,然后输出运算值。当输入运算符不是+,-,*,/时给出错误提示。程序如下:,for循环使用灵活,功能很强,不仅可用来表示循环次数已知的情况,而且也可以用于循环次数不确定只给出循环终止条件的情况。for语句的一般形式:执行过程:,3.3for语句,for(expr1;expr2;expr3)循环体语句;,例3.12编写程序计算1+2+3+100的和。,3.3for语句,#includevoidmain()intis,ii;is=0;for(ii=1;ii=100;ii+)is=is+ii;printf(thesumis%dn,is);,for循环最简单也就是最容易理解的形式如下:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;说明:(1)for语句一般形式中的表达式1可以省略,注意省略表达式1时,其后的分号是不能省略的,省略后的一般形式如下:for(;表达式2;表达式3)没有了表达式1,此时就没有了给循环变量赋初值的操作,一般情况下程序设计者应在for语句之前给循环变量赋初值。,3.3for语句说明1,(2)for语句一般形式中的表达式2也可以省略,注意省略时,其后的分号是不能省略的,省略后的一般形式如下:for(表达式1;表达式3)没有了表达式2,此时就没有了循环判断条件,循环会无止境的执行下去,相当于表达式2始终为真。此时程序设计者可采用我们以后要讲的break语句强制结束循环。,3.3for语句说明2,(3)表达式3也可以省略,省略后的一般形式如下:for(表达式1;表达式2;)此时没有了循环变量增值的操作,为了保证循环能正常结束,一般情况下程序设计者应在循环体内改变循环变量的值。,3.3for语句说明3,(4)表达式1和表达式3可以同时省略,省略后的一般形式如下:for(;表达式2;)此时的for循环相当于我们以后要讲的while循环,程序设计者应在for语句之前给循环变量赋初值,在循环体内改变循环变量的值。,3.3for语句说明4,(5)表达式1、表达式2和表达式3都可以省略,省略后的一般形式如下:for(;)此时程序设计者应在for语句之前给循环变量赋初值,在循环体内改变循环变量的值,强制结束循环。(6)表达式1和表达式3也可以是逗号表达式。如:for(i=0,j=100;i10时,break语句跳出循环*/,3.4while、dowhile语句,3.4.2dowhile语句dowhile语句用来实现“直到型”循环。其一般形式如下:do循环体语句;while(表达式);功能:先执行循环体,然后判断表达式的值,若为非0(真)时,就反复执行循环体,直到表达式的值为0(假),退出while语句,继续执行while语句后面的语句。,3.4while、dowhile语句,例3.17用dowhile语句编写程序计算1+2+3+100的和。程序如下:,3.4while、dowhile语句,说明:至少执行一次循环体。在if语句,while语句中,表达式后面都不加分号,而在do-while语句的表达式后面则必须加分号。在do和while之间的循环体由多个语句组成时,也必须用括起来组成一个复合语句。dowhile可转化成while结构,但do-while和while语句相互替换时,要注意修改循环控制条件。,3.4while、dowhile语句,例3.18输入若干个职工的工资,直到输入负数结束,求工资的总和及平均工资。程序如下:,3.4while、dowhile语句举例,3.5.1break语句break语句的一般形式为:break;功能:在分支结构程序设计中已经介绍过用break语句可以使流程跳出switch结构,继续执行switch语句下面的一个语句。实际上,break语句还可以用来从循环体内中途跳出循环体,即提前结束循环,执行循环下面的语句。,3.5break、continue语句,while(表达式1)语句组1if(表达式2)break;语句组2当表达式1成立时,进入循环体执行,若表达式2成立时执行break语句,提前结束循环,即不再继续执行循环(即使此时表达式1还成立)。,3.5break、continue语句,说明:break语句使用应该注意的问题(1)在循环语句中,break语句一般都是与if语句一起使用。(2)break语句不能用于循环语句和switch语句之外的任何其它语句中。,3.5break、continue语句注意,例3.19计算1+2+3+100的和,当和大于2500时停止。程序如下:在3.3节讲解for循环时,曾提到for语句一般形式中的表达式2可以省略,当省略表达式2时,因为没有了表达式2,此时就没有了循环判断条件,循环会无止境的执行下去,相当于表达式2始终为真,此时程序设计者应采用break语句强制结束循环。例3.20编写程序计算1+2+3+100的和。程序如下,3.5break、continue语句,3.5.2continue语句continue语句的一般形式为:continue;功能:continue语句是跳过循环体中剩余的语句而强制执行下一次循环。其作用为结束本次循环,即跳过循环体中下面尚未执行的语句,接着进行下一次是否执行循环的判定。,3.5break、continue语句,如:while(表达式1)语句组1if(表达式2)continue;语句组2当表达式1成立时,进入循环体执行语句组1,若表达式2成立时执行continue语句,语句组2就不再执行,而转去判定下一次循环是否执行。,3.5break、continue语句,说明:continue语句使用应该注意的问题(1)continue语句只能用在循环语句中。(2)一般都是与if语句一起使用。,例3.21把1100之间的不能被5整除的数输出。程序如下:,3.5break、continue语句,goto语句是无条件转移语句。goto语句的一般形式为:goto语句标号;功能:无条件转向“语句标号”处执行。说明:(1)语句标号是一标识符,它的命名规则与变量名相同。(2)goto语句可以灵活跳转,它能从多重循环体一下子跳到外面,用不着写很多次的break语句,这个特点使得程序处理一些异常情况时非常的方便,但是如果不加限制,它会破坏结构化设计风格,但实事求是地说,错误是程序员自己造成的,不是goto的过错,所以我们主张少用、慎用goto语句,而不是禁用,3.6特别的goto语句,循环体内的语句本身还可以是另一个循环语句,因此这样就构成了另一层循环。其中,处于外层的循环称为外循环,处于内层的循环称为内循环,这种一个循环体内又包含另一个完整的循环结构称为循环的嵌套。这种嵌套结构的循环可以有多层,从而构成多重循环。三种循环(while循环、do-while循环和for循环)可以互相嵌套。,3.7多重循环,多重循环的执行过程中,外循环控制变量的值变化得较慢,内循环控制变量的值变化得较快。外循环进行1次,内循环就要完成所有的循环。说明:写多重循环程序时要注意,内外循环的层次要分明,内层循环必须被完整地嵌套在外循环在里面,可以若干个循环嵌套、并列,但绝对不允许循环之间相互交叉。例3.22输出由星号构成的一个5行的直角三角形。程序如下:例3.23编写一个程序,输出如下所示九九乘法表:程序如下:例3.24百马百担问题程序如下:,3.7多重循环,例3.25任意输入一个自然数n,判断它是否为素数。算法分析:一个自然数n如果只能被1和它本身整除,则该自然数为素数,否则不是素数。根据素数的定义,可以编写一个容易理解的判定素数的程序。程序如下:上面的程序容易理解,但这种方法效率不高,当自然数in较大时,循环次数较多,可采取一种改进效率的方法。ii从2循环到即可,可以提高循环的效率。程序如下:,3.7多重循环举例,#include#includevoidmain()intin,ii,ik;scanf(%d,3.7多重循环举例,例3.26求Fibonacci数列:1,1,2,3,5,8,的前40个数,即11(n=1)1234567.21(n=2)11235813nn-1n-2(n=3)程序如下:,3.7多重循环举例,例3.27用/411/31/51/7公式求的近似值,直到最后一项的绝对值小于10-6为止。程序如下:,3.7多重循环举例,3.8小结,本章主要讲解了控制语句的使用及其功能,控制语句用于控制程序的流程,是C语言中非常重要的语句,用来实现程序的选择结构和循环结构。语言主要有八种控制语句:选择控制语句包括:ifelse语句和switchcase语句。循环控制语句包括:for语句,while语句,dowhile语句转移控制语句包括:break语句,continue语句,goto语句,3.8小结,选择控制语句包括:ifelse语句和switchcase语句。ifelse语句是选择控制语句,它判定所给的条件是否满足,根据判定的结果选择两种分支之一执行。if后面是一种分支,else后面是另外一种分支。如果条件满足,选择if后面的分支执行,如果条件不满足,选择else后面分支执行。ifelse语句并不是只能用于实现两分支的情况,ifelse语句有三种不同的形式,使得它可用于两分支情况也可用于多分支情况。,3.8小结,switchcase语句是多分支选择语句,利用嵌套的if语句也可以处理多分支选择问题,但如果分支较多,则嵌套的if语句层数多,致使程序冗长而且可读性降低。所以C语言提供switch语句直接处理多分支选择。,3.8小结,循环控制语句包括:for语句,while语句,dowhile语句for语句用来实现for循环,for循环使用灵活,功能很强,不仅可用来表示循环次数已知的情况,而且也可以用于循环次数不确定只给出循环终止条件的情况。for语句的一般形式如下:for(表达式1;表达式2;表达式3)循环体语句,3.8小结,while语句是先判断表达式后再执行循环体的循环语句。因此,有可能一次循环体也不执行。do-while循环是先执行循环体后再判断表达式的循环语句,通常用它来完成必须至少执行一次循环体的操作。,3.8小结,转移控制语句包括:break语句,continue语句,goto语句。break语句用于从内循环跳到外循环,使循环提前结束。但它只能跳一层循环,不能跳多层循环。continue语句用于跳过其后的语句,使本轮循环提前结束。goto语句是无条件转移语句,我们主张少用、慎用goto语句,而不是禁用。,3.8小结,多重循环:循环体内的语句本身还可以是另一个循环语句,因此这样就构成了另一层循环。其中,处于外层的循环称为外循环,处于内层的循环称为内循环,这种一个循环体内又包含另一个完整的循环结构称为循环的嵌套。这种嵌套结构的循环可以有多层,从而构成多重循环。多重循环的执行过程中,外循环控制变量的值变化得较慢,内循环控制变量的值变化得较快。外循环进行1次,内循环就要完成所有的循环。写多重循环程序时要注意,内外循环的层次要分明,内层循环必须被完整地嵌套在外循环在里面,可以若干个循环嵌套、并列,但绝对不允许循环之间相互交叉。,
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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