《C语言程序设计》第4章控制结构.ppt_第1页
《C语言程序设计》第4章控制结构.ppt_第2页
《C语言程序设计》第4章控制结构.ppt_第3页
《C语言程序设计》第4章控制结构.ppt_第4页
《C语言程序设计》第4章控制结构.ppt_第5页
已阅读5页,还剩58页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章控制结构,本章要求:,掌握选择控制语句if语句、switch语句以及他们的嵌套应用;掌握循环控制语句for语句、while语句、dowhile语句以及他们的嵌套应用;掌握break语句、continue语句的应用;能够运用3种结构进行综合程序设计。,4.1关系运算与逻辑运算,例子:三个数中找最大判断是否是闰年判断密码的正确与否关键点:判断的条件如何确立?,选择结构,4.1.1关系运算符与关系表达式,比较两个量的运算符称为关系运算符:,=,=,!=关系运算符的优先级:“、=、关系运算符赋值运算符一般形式为:表达式关系运算符表达式其值:关系成立为“真”,不成立则为“假”C语言中用“1”表示“真”;“0”表示“假”,如56x=3xc)a!=(c=b)(a=3)(b=5),又如:当a=5,b=4时a+=3b执行过程:若表达式的值为真(非0)则执行其后的语句,(0)否则不执行该语句。,判断0或非0可以是:关系表达式逻辑表达式数学表达式等等,只能是一个语句,若要执行多个语句,可以使用,例:输入任意两个整数x,y,比较后,确保x要大于等于y,再输出。voidmain()intx,y,t;printf(Enterxandy:n);scanf(%d%d,2双分支结构ifelse.语句使用格式:if(表达式);else;语句的执行过程:当表达式的值为非0(条件成立)时执行,否则执行else后面。,例:输入三个数,然后输出其中最大的数。voidmain()inta,b,c,max;scanf(“%d%d%d”,3ifelseif语句(多分支结构)语句形式:if(表达式1)语句1;elseif(表达式2)语句2;.elseif(表达式n)语句n;else语句块n+1;,例:简单计算器,例:已知百分制成绩x,显示对应的五级制成绩,下列哪些正确。,4.使用if语句中应注意以下问题,if(a=5)语句;if(b)语句;都是允许的。,if(xb)max=a;,5if语句的嵌套,当if语句中的执行语句又是if语句时,则构成了if语句嵌套的情形。如:,if(表达式1)if(表达式2)语句;,if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;,要特别注意if和else的配对问题。例如:其中的else究竟是与哪一个if配对呢?if(表达式1)if(表达式1)if(表达式2)if(表达式2)语句1;语句1;elseelse语句2;语句2;,语言规定:else总是与它前面最近的if配对,4.2.2条件运算符和条件表达式,条件运算符为?:它是一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3其求值规则为:如果表达式1的值为真,则以表达式2的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。例如:,if(ab)max=a;elsemax=b;,max=(ab)?a:b;,条件运算符的说明:,运算优先级:低于关系运算符和算术运算符,高于赋值符。如:max=ab?a:b条件运算符?:是一对运算符,不能分开单独使用。结合方向:自右至左。例如:,ab?a:cd?c:d,cd?c:d,例:若输入的大写字母转换成相应的小写字母,否则原样输出。,voidmain()charch;scanf(%c,if(ch=A,4.2.3switch语句(开关语句),switch语句使用的一般形式为:switch(表达式)case常量表达式1:语句1;case常量表达式2:语句2;case常量表达式n:语句n;default:语句n+1;,计算表达式的值k,若k等于常量表达式的值,则执行对应语句,若k与上诉常量均不相同,执行该语句,例:使用switch语句实现百分制成绩化五级制成绩。,switch(x/10)case10:case9:printf(A);case8:printf(B);case7:printf(C);case6:printf(D);default:printf(E);,break;break;break;break;,使用switch语句的通常形式为:,switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;,添加break;后:,例:输入17(分别代表星期一到星期天),输出相应的内容。,voidmain()inta;printf(inputintegernumber:);scanf(%d,说明:,在case后的各常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用括起来。各case和default子句的先后顺序可以变动,而不会影响程序执行结果。但需要配合“break;”使用。default子句可以省略不用。,4.2.3选择结构的嵌套,if(表达式1)语句1;elseif(表达式2)语句2;.elseif(表达式n)语句n;else语句n+1;,switch(表达式)case常量表达式1:语句1;break;case常量表达式2:语句2;break;case常量表达式n:语句n;break;default:语句n+1;,这些语句部分,都可以包含另一个完整的if语句或switch语句,例:输入三个数,从小到大排列,if(ab)t=a;a=b;b=t;if(bc)t=b;b=c;c=t;if(ab)t=a;a=b;b=t;,说明:,嵌套只能在一个分支内嵌套,不出现交叉。其嵌套的形式将有很多种,嵌套层次也可以任意多。在swicth结构中,每一个case分支可以完整包含另一个ifelse结构,也可完整包含另一个swicth结构。提示:为了便于阅读和维护,建议在写含有多层嵌套的程序时,使用缩进对齐方式。,4.2.5选择结构程序举例,例:小学数学题,要求:随机产生两道数学题(参加运算的数在110之间),一道加法,一道减法。产生一道题后,让用户输入答案;判断答案的正确性,并给出提示。记录用户答对的题数,并对最终的成绩作出评价。可以使用if语句,或switch语句。,4.3循环结构,循环结构的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。注意两个概念:给定的条件称为循环条件反复执行的程序段称为循环体在C语言中,实现循环结构的语句主要有3种:whiledoWhilefor语句,4.3.1while语句,while语句的一般形式为:while(表达式)语句;表达式是循环条件,语句为循环体执行过程:计算表达式的值,当值为真(非0)时,执行循环体语句。否则,退出,例:在屏幕上打印110,说明:,计算的值,若表达式的值为真(非0)时,则执行循环体语句;不断反复,直到表达式的值为假(0),则不执行循环体语句,而直接转向循环体外的第一条语句。是循环反复执行的程序,称为“循环体”,当需要执行多条语句时,应使用“”括起来组成一个复合语句。while语句是先判断条件,后执行循环体,为“当型”循环,因此若条件不成立,有可能一次也不执行循环体。,例:编程序求:s=1+2+3+100,main()ints=0,n=1;while(n=100)s=s+n;n+;printf(S=%d,s);,4.3.2do.while语句,一般形式为:do语句;while(表达式);执行过程:先执行循环体语句一次,再判别表达式的值,若为真(非0)则继续循环,否则终止循环。,例:编程序求:s=1+2+3+100,voidmain()ints=0,n=1;dos=s+n;n+;while(n=100);printf(S=%d,s);,while(n=100)s=s+n;n+;,用辗转相除法求两自然数m,n的最大公约数和最小公倍数。例求m=28,n=20的最大公约数.if(mn)t=m;m=n;n=t;r=m%n;while(r!=0)m=n;n=r;r=m%n;,循环mnr赋好初值时:28208第一次结束:2084第二次结束:840,注意以下几点:,在if语句,while语句中,表达式后面都不能加分号,而在do-while语句的表达式后面则必须加分号。当循环体由多个语句组成时,也必须用括起来组成一个复合语句。如果循环至少要执行一次,while和do-while语句可以相互替换。,4.3.3for循环语句,一般形式为:for(表达式1;表达式2;表达式3)语句;表达式1(控制变量的初始化):用来给循环变量赋初值,也允许在for语句外给循环变量赋初值,此时可以省略该表达式。表达式2(循环的条件):循环条件,一般为关系表达式或逻辑表达式。表达式3(循环控制变量的更新):用来修改循环变量的值,一般是赋值语句。,当循环体由多个语句组成时,也必须用,for语句的执行过程:,注意:在整个for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。,例:编程序求:s=1+2+3+100,voidmain()intn,s=0;for(n=1;n=100;n+)s=s+n;printf(s=%dn,s);getch();,voidmain()ints=0,n=1;while(n=100)s=s+n;n+;printf(“s=%d,s);,例:打印20个1020的随机数在屏幕上。,for(表达式1;表达式2;表达式3)语句;,表达式1;while(表达式2)语句;表达式3;,有关for语句的几点说明:,for语句中的“表达式1”、“表达式2”和“表达式3”都可以省略,但两个分号不能省略。若“表达式2”省略了,则判定循环控制条件为真(非0)“表达式1”和“表达式3”,可以是一个简单的表达式,也可以是逗号表达式。注意:三个表达式都可以是任何表达式。,4.3.4循环的嵌套多重循环结构,一个循环内完整地包含另一个循环结构,则称为多重循环嵌套一层称为二重循环,嵌套二层称为三重循环例子:打印九九乘法表打印由数字组成的如下所示金字塔图案,4.3.5三种循环语句比较,4.4其它控制语句,4.4.1break语句作用范围:switch语句或循环语句功能:跳出switch语句或跳出本层循环,转去执行后面的程序。break语句的一般形式为:break;注意:break语句用于循环体中,一般与if语句联合使用,例:车牌抽取程序,要求,用户可以有5次机会选择。若选到中意的号码,可以使用键盘中的Y键来确定若已确定选中号码,则无需再继续选择了。若5次都没有选中,进行提示,表示选中失败。,4.4.2continue语句,作用范围:只能用在循环体中功能:结束本次循环,转入下一次循环条件的判断与执行。其一般格式是:continue;注意:本语句只结束本层本次的循环,并不跳出循环。,例,计算半径为1到15的圆的面积,仅打印出超过50的圆面积。,voidmain()intr;floatarea;for(r=1;r=15;r+)area=3.141593*r*r;if(area50.0)continue;printf(square=%fn,area);,break与continue的区别,continue:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。,break:语句只能用在switch语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。,4.4.3goto语句(无条件转移语句),一般格式:goto语句标号;如:label:i+;gotolabel1;注意:语言不限制程序中使用标号的次数,但不得重名。注意:在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。,4.5应用程序举例4.5.1素数与哥德巴赫猜想,例:判断一个给定的整数是否为素数基本思想:把m作为被除数,将2Int(Sqrt(m)作为除数,如果都除不尽,m就是素数,否则就不是。可用以下程序段实现,k=sqrt(m);for(i=2;i=k)printf(Yesn);elseprintf(Non);,例:编一程序验证哥德巴赫猜想,for(n1=3;n1k)printf(%d=%d+%dn,n,n1,n2);,发现n1不是素数后无需判断n2了,执行continue;后,当前次循环的后半部分无需执行,4.5.2穷举法,基本思想:一一列举各种可能的情况,并判断哪一种可能是符合要求例:将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?分析:5元的最少1张,最多100张1元的最少1张,最多100张0.5元的最少1张,最多100张列出所有的情况,把真正符合要求的情况打印出来。,voidmain()intx,y,z,n;printf(5yuan1yuan0.5yuann);n=0;for(x=1;x=100;x+)for(y=1;y=100;y+)for(z=1;z=100;z+)if(x+y+z=100,4.5.3迭代法,递推法:有一只猴子,捡

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论