《C语言程序设计》第4章控制结构.ppt

上传人:牧羊曲112 文档编号:5896083 上传时间:2023-08-31 格式:PPT 页数:63 大小:504KB
返回 下载 相关 举报
《C语言程序设计》第4章控制结构.ppt_第1页
第1页 / 共63页
《C语言程序设计》第4章控制结构.ppt_第2页
第2页 / 共63页
《C语言程序设计》第4章控制结构.ppt_第3页
第3页 / 共63页
《C语言程序设计》第4章控制结构.ppt_第4页
第4页 / 共63页
《C语言程序设计》第4章控制结构.ppt_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《《C语言程序设计》第4章控制结构.ppt》由会员分享,可在线阅读,更多相关《《C语言程序设计》第4章控制结构.ppt(63页珍藏版)》请在三一办公上搜索。

1、第4章 控制结构,本章要求:,掌握选择控制语句if语句、switch语句以及他们的嵌套应用;掌握循环控制语句for语句、while语句、dowhile语句以及他们的嵌套应用;掌握break语句、continue语句的应用;能够运用3种结构进行综合程序设计。,4.1 关系运算与逻辑运算,例子:三个数中找最大判断是否是闰年判断密码的正确与否关键点:判断的条件如何确立?,选择结构,4.1.1 关系运算符与关系表达式,比较两个量的运算符称为关系运算符:,=,=,!=关系运算符的优先级:“、=、关系运算符 赋值运算符 一般形式为:表达式 关系运算符 表达式其值:关系成立为“真”,不成立则为“假”C语言中

2、用“1”表示“真”;“0”表示“假”,如 56 x=3 xc)a!=(c=b)(a=3)(b=5),又如:当 a=5,b=4 时 a+=3b,-False(0),-True(1),-False(0),-6,4.1.2 逻辑运算符与逻辑表达式,1、逻辑运算符!非运算&与运算|或运算结合性:&和|均为双目运算符,具有左结合性。非运算符!为单目运算符,具有右结合性优先级表示如下:!高于&高于|,2、逻辑表达式,逻辑表达式的一般形式为:表达式 逻辑运算符 表达式 按照运算符的优先顺序可以得出:ab&cd!b=c|dc&x+yb,(ab)&(cd),(!b)=c)|(da),(a+b)c)&(x+y)b

3、),逻辑表达式的值:逻辑表达式的值也为“真”和“假”两种,用“1”和“0”来表示。,0 和非0 的区别,例:表示数学表达式:3x7 正确的表达式:3=x&x=7 错误的表达式:3=x=7 3=x|x=7,例:用人单位招聘秘书,条件如下:年龄(age)小于40岁女性(sex为m为男性,sex为f为女性)学历(edu)专科(为2)或本科(为3)正确:age40&sex=f&(edu=2|edu=3)考虑:若分别写成:age40&sex=f&(edu=2&edu=3)age40|sex=f|(edu=2|edu=3),3、关于逻辑运算的说明,表达式 a&b&c 的求解过程只有a为真时,才判别b的值;

4、只有a和b均为真时,才判别c的值。只要a为假,就不再判别b和c的值,直接求得表达式的值为假。,表达式 a|b|c 的求解过程只要a为真,就不再判别b和c的值,直接求得表达式的值为真。只有a为假时,才判别b的值;只有a和b均为假时,才判别c的值。,4.2 选择结构,4.2.1 if条件语句 if语句有单分支、双分支和多分支等结构 1单分支if语句。使用格式:if(表达式)语句;执行过程:若表达式的值为真(非0)则执行其后的语句,(0)否则不执行该语句。,判断0或非0可以是:关系表达式逻辑表达式数学表达式 等等,只能是一个语句,若要执行多个语句,可以使用,例:输入任意两个整数x,y,比较后,确保x

5、要大于等于y,再输出。void main()int x,y,t;printf(Enter x and y:n);scanf(%d%d,2双分支结构ifelse.语句 使用格式:if(表达式);else;语句的执行过程:当表达式的值为非0(条件成立)时执行,否则执行else后面。,例:输入三个数,然后输出其中最大的数。void main()int a,b,c,max;scanf(“%d%d%d”,3ifelse if语句(多分支结构)语句形式:if(表达式1)语句1;else if(表达式2)语句2;.else if(表达式n)语句n;else 语句块n+1;,例:简单计算器,例:已知百分制成绩

6、x,显示对应的五级制成绩,下列哪些正确。,4.使用if语句中应注意以下问题,if(a=5)语句;if(b)语句;都是允许的。,if(xy)t=x;x=y;y=t;,if(ab)max=a;,5if语句的嵌套,当if语句中的执行语句又是if语句时,则构成了if 语句嵌套的情形。如:,if(表达式1)if(表达式2)语句;,if(表达式1)if(表达式2)语句1;else 语句2;else if(表达式3)语句3;,要特别注意if和else的配对问题。例如:其中的else究竟是与哪一个if配对呢?if(表达式1)if(表达式1)if(表达式2)if(表达式2)语句1;语句1;else else 语

7、句2;语句2;,语言规定:else 总是与它前面最近的if配对,4.2.2 条件运算符和条件表达式,条件运算符为?:它是一个三目运算符。条件表达式的一般形式为:表达式1?表达式2:表达式3 其求值规则为:如果表达式1的值为真,则以表达式2 的值作为条件表达式的值,否则以表达式3的值作为整个条件表达式的值。条件表达式通常用于赋值语句之中。例如:,if(ab)max=a;else max=b;,max=(ab)?a:b;,条件运算符的说明:,运算优先级:低于关系运算符和算术运算符,高于赋值符。如:max=ab?a:b条件运算符?:是一对运算符,不能分开单独使用。结合方向:自右至左。例如:,ab?a

8、:cd?c:d,cd?c:d,例:若输入的大写字母转换成相应的小写字母,否则原样输出。,void main()char ch;scanf(%c,if(ch=A,4.2.3 switch语句(开关语句),switch语句使用的一般形式为:switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,计算表达式的值k,若k等于常量表达式的值,则执行对应语句,若k与上诉常量均不相同,执行该语句,例:使用switch语句实现百分制成绩化五级制成绩。,switch(x/10)case 10:case 9:printf(

9、A);case 8:printf(B);case 7:printf(C);case 6: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(分别代表星期一到星期天),输出相应的内容。,void main()int a;printf(input integer number:);scanf

10、(%d,说明:,在case后的各常量表达式的值不能相同,否则会出现错误。在case后,允许有多个语句,可以不用括起来。各case和default子句的先后顺序可以变动,而不会影响程序执行结果。但需要配合“break;”使用。default子句可以省略不用。,4.2.3 选择结构的嵌套,if(表达式1)语句1;else if(表达式2)语句2;.else if(表达式n)语句n;else 语句n+1;,switch(表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;,这些语句部分

11、,都可以包含另一个完整的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之间),一道加法,一道减法。产生一道

12、题后,让用户输入答案;判断答案的正确性,并给出提示。记录用户答对的题数,并对最终的成绩作出评价。可以使用if语句,或switch语句。,4.3 循环结构,循环结构的特点:在给定条件成立时,反复执行某程序段,直到条件不成立为止。注意两个概念:给定的条件称为循环条件反复执行的程序段称为循环体在C语言中,实现循环结构的语句主要有3种:while doWhilefor语句,4.3.1 while语句,while语句的一般形式为:while(表达式)语句;表达式是循环条件,语句为循环体执行过程:计算表达式的值,当值为真(非0)时,执行循环体语句。否则,退出,例:在屏幕上打印110,说明:,计算的值,若表

13、达式的值为真(非0)时,则执行循环体语句;不断反复,直到表达式的值为假(0),则不执行循环体语句,而直接转向循环体外的第一条语句。是循环反复执行的程序,称为“循环体”,当需要执行多条语句时,应使用“”括起来组成一个复合语句。while语句是先判断条件,后执行循环体,为“当型”循环,因此若条件不成立,有可能一次也不执行循环体。,例:编程序求:s=1+2+3+100,main()int s=0,n=1;while(n=100)s=s+n;n+;printf(S=%d,s);,4.3.2 do.while语句,一般形式为:do 语句;while(表达式);执行过程:先执行循环体语句一次,再判别表达式

14、的值,若为真(非0)则继续循环,否则终止循环。,例:编程序求:s=1+2+3+100,void main()int s=0,n=1;do s=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;,循环 m n r赋好初值时:28 20 8第一次结束:20 8 4第二次结束:8 4 0,注意以下几点:,在if语句,while语句中,表达式后面

15、都不能加分号,而在 do-while语句的表达式后面则必须加分号。当循环体由多个语句组成时,也必须用括起来组成一个复合语句。如果循环至少要执行一次,while和do-while语句可以相互替换。,4.3.3 for循环语句,一般形式为:for(表达式1;表达式2;表达式3)语句;表达式1(控制变量的初始化):用来给循环变量赋初值,也允许在for语句外给循环变量赋初值,此时可以省略该表达式。表达式2(循环的条件):循环条件,一般为关系表达式或逻辑表达式。表达式3(循环控制变量的更新):用来修改循环变量的值,一般是赋值语句。,当循环体由多个语句组成时,也必须用,for语句的执行过程:,注意:在整个

16、for循环过程中,表达式1只计算一次,表达式2和表达式3则可能计算多次。,例:编程序求:s=1+2+3+100,void main()int n,s=0;for(n=1;n=100;n+)s=s+n;printf(s=%dn,s);getch();,void main()int s=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”都可以省

17、略,但两个分号不能省略。若“表达式2”省略了,则判定循环控制条件为真(非0)“表达式1”和“表达式3”,可以是一个简单的表达式,也可以是逗号表达式。注意:三个表达式都可以是任何表达式。,4.3.4 循环的嵌套多重循环结构,一个循环内完整地包含另一个循环结构,则称为多重循环 嵌套一层称为二重循环,嵌套二层称为三重循环 例子:打印九九乘法表打印由数字组成的如下所示金字塔图案,4.3.5 三种循环语句比较,4.4 其它控制语句,4.4.1 break语句 作用范围:switch 语句或循环语句功能:跳出switch语句或跳出本层循环,转去执行后面的程序。break语句的一般形式为:break;注意:

18、break语句用于循环体中,一般与if语句联合使用,例:车牌抽取程序,要求,用户可以有5次机会选择。若选到中意的号码,可以使用键盘中的Y键来确定若已确定选中号码,则无需再继续选择了。若5次都没有选中,进行提示,表示选中失败。,4.4.2 continue语句,作用范围:只能用在循环体中功能:结束本次循环,转入下一次循环条件的判断与执行。其一般格式是:continue;注意:本语句只结束本层本次的循环,并不跳出循环。,例,计算半径为1到15的圆的面积,仅打印出超过50的圆面积。,void main()int r;float area;for(r=1;r=15;r+)area=3.141593*r

19、*r;if(area50.0)continue;printf(square=%fn,area);,break与continue的区别,continue:结束本次循环,即不再执行循环体中continue 语句之后的语句,转入下一次循环条件的判断与执行。应注意的是,本语句只结束本层本次的循环,并不跳出循环。,break:语句只能用在switch 语句或循环语句中,其作用是跳出switch语句或跳出本层循环,转去执行后面的程序。,4.4.3 goto语句(无条件转移语句),一般格式:goto 语句标号;如:label:i+;goto label1;注意:语言不限制程序中使用标号的次数,但不得重名。注

20、意:在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。,4.5 应用程序举例 4.5.1 素数与哥德巴赫猜想,例:判断一个给定的整数是否为素数基本思想:把m作为被除数,将2Int(Sqrt(m)作为除数,如果都除不尽,m就是素数,否则就不是。可用以下程序段实现,k=sqrt(m);for(i=2;i=k)printf(Yesn);else printf(Non);,例:编一程序验证哥德巴赫猜想,for(n1=3;n1k)printf(%d=%d+%dn,n,n1,n2);,发现n1不是素数后无需判断n2了,执行continue;后,当前次循环的后

21、半部分无需执行,4.5.2 穷举法,基本思想:一一列举各种可能的情况,并判断哪一种可能是符合要求 例:将一张面值为100元的人民币等值换成100张5元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?分析:5元的最少1张,最多100张 1元的最少1张,最多100张 0.5元的最少1张,最多100张列出所有的情况,把真正符合要求的情况打印出来。,void main()int x,y,z,n;printf(5yuan 1yuan 0.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,

22、4.5.3 迭代法,递推法:有一只猴子,捡到了一框桃子。它每天吃现存桃子的一半再多一个。到了第7天,它只有一个桃子了,问它第一天捡到了几个桃子?解:注意后一天和前一天的桃子数的关系。x=(x+1)*2;,例,用迭代法求平方根,已知迭代公式为:编程分析:可假定一个初值x0=a/2(估计值),根据迭代公式得到一个新的值x1,这个新值x1比初值x0更接近要求的值x;再以新值作为初值,即:x1x0,重新按原来的方法求x1,重复这一过程直到|x1-x0|(某一给定的精度)。此时可将x1作为问题的解。,x0=a/2;/*取迭代初值*/x1=0.5*(x0+a/x0);while(fabs(x1-x0)0.00001)x0=x1;/*为下一次迭代作准备*/x1=0.5*(x0+a/x0);printf(%f s sqrt is:%fn,a,x1);,迭代法求平方根部分代码,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号