第3章程序控制结构优秀课件.ppt
第3章程序控制结构第1页,本讲稿共20页三种基本结构:顺序结构、分支结构、循环结构三种基本结构:顺序结构、分支结构、循环结构 S1S2S2S1条件S1条件(a)顺序结构 (b)选择结构 (c)循环结构图3.1 三种基本控制结构流程图第2页,本讲稿共20页(1)第一种形式为基本形式:第一种形式为基本形式:if(表达式表达式)语句;语句;输入两个整数,输出其中的较大数void main()int a,b,max;printf(n input two numbers:);scanf(%d%d,&a,&b);max=a;if(maxb)printf(max=%dn,a);else printf(max=%dn,b);第4页,本讲稿共20页(3)(3)第三种形式为第三种形式为if-else if-elseif-else if-else形式:前二种形式的形式:前二种形式的ifif语语句一般都用于两个分支的情况。当有多个分支选择时,可采用句一般都用于两个分支的情况。当有多个分支选择时,可采用if-else if-elseif-else if-else语句。语句。其一般形式为:其一般形式为:if(表达式1)语句1;else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式n-1)语句n-1;else 语句n;void main()char c;printf(input a character:);c=getchar();if(c=0&c=A&c=a&cb)a+;b+;else a=0;b=10;if(a=b)printf(%d,a);else printf(a=0);第6页,本讲稿共20页3.1.3 if语句的嵌套语句的嵌套if(表达式表达式)if语句语句 if(表达式表达式)if语句;语句;else if语句语句 else 总是与它前面最近前面最近的if 配对 3.1.4 条件运算符和条件表达式条件运算符和条件表达式 例如:例如:if(ab)max=a;else max=b;可用条件表达式写为可用条件表达式写为 max=(ab)?a:b;(1)条件运算符?:它是一个三目运算符三目运算符(2)条件表达式 由条件运算符组成条件表达式。一般形式为:表达式1?表达式2:表达式3 参见课本P.31例3.5第7页,本讲稿共20页main()char ch,c;scanf(“%c”,&ch);if(chAchZ)cch+32;else cch;printf(%c”,c);(3)应用举例:条件语句条件语句部分用下面的部分用下面的条件表达式条件表达式来代替:来代替:c chAchZ?ch+32:ch 编编程程:输输入入一一个个字字符符,判判别别它它是是否否为为大大写写字字母母,如如果果是是,将将转转换换成成小小写写字字母母,如如果果不不是是,则则不不转换转换,然后,然后输输出得到的字符。出得到的字符。补充内容补充内容补充内容补充内容第8页,本讲稿共20页补充内容补充内容补充内容补充内容由由 t=a;a=b;bt;这这三三个个语语句句可可组组成成一一个个交交换换语语句句。功功能能是是:通过通过t t作中间量,实现交换作中间量,实现交换a a与与b b的值。的值。交交 换换 语语 句句 例如:程序段 设 int a=3,b=1,t;ifif(a ab b)t=a t=a;a=ba=b;b bt t;printf printf(”a=%d,b=%da=%d,b=%d”,a,a,b b););和 ifif(a ab b)t ta a;a ab b;b bt t;printfprintf(”a ad d,b bd d”,a a,b b););请问:1.两段程序有什么区别?2.其执行结果有什么不同?a=1,b=3a=3,b=?第9页,本讲稿共20页3.2.1 switch语句语句(不带不带break语句语句)一般形式为:一般形式为:switch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;.case 常量表达式n:语句n;default:语句n+1;例例3.7 从键盘输入一个数字,则输出一从键盘输入一个数字,则输出一个英文单词。个英文单词。void main()int a;printf(input integer number:);scanf(%d,&a);switch(a)case 1:printf(Mondayn);case 2:printf(Tuesdayn);case 3:printf(Wednesdayn);case 4:printf(Thursdayn);case 5:printf(Fridayn);case 6:printf(Saturdayn);case 7:printf(Sundayn);default:printf(errorn);3.2 switch3.2 switch语句语句第10页,本讲稿共20页3.2.2 switch语句语句(带带break语句语句)一般形式为:一般形式为:switch(表达式表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;break;void main()int a;printf(input integer number:);scanf(%d,&a);switch(a)case 1:printf(Mondayn);break;case 2:printf(Tuesdayn);break;case 3:printf(Wednesdayn);break;case 4:printf(Thursdayn);break;case 5:printf(Fridayn);break;case 6:printf(Saturdayn);break;case 7:printf(Sundayn);break;default:printf(errorn);3.2.3 switch语句使用注意事项语句使用注意事项(1)每个case后的各常量表达式的值应互不相同,否则会出现错误。(2)在每个case后允许有多个语句,可以不用 括起来。(3)default子句可以省略不用。(4)如果每个case中都有break语句,那么case和default出现的次序不会影响程序的运行结果。第11页,本讲稿共20页3.3.1 for语句的一般形式为:语句的一般形式为:for(表达式表达式1;表达式;表达式2;表达;表达3)语句;语句;表达式表达式1:通常用来给循环变量赋初值,一般是赋值表达式,也允许在for语句外给循环变量赋初值,此时可以省略该表达式。表达式表达式2:通常是循环条件,一般为关系表达式或逻辑表达式。表达式表达式3:通常可用来修改循环变量的值,一般是赋值语句。语句语句:为循环体语句。例例3.10 用用for语句计算语句计算 s=1+2+3+99+100void main()int n,s=0;for(n=1;n=100;n+)s=s+n;printf(s=%dn,s);3.3 for 语语 句句表达式1表达式3表达式2?语句YN第12页,本讲稿共20页3.3.2 for语句使用注意事项语句使用注意事项for语句中的各表达式都可省略,但分号间隔符不能少。语句中的各表达式都可省略,但分号间隔符不能少。1)for(;表达式;表达式;表达式;表达式)省去了表达式省去了表达式1。(见课本P.35例3.11)2)for(表达式;表达式表达式;表达式)省去了表达式省去了表达式2。(将造成无限循环)3)for(表达式;表达式;表达式;表达式;)省去了表达式省去了表达式3。(见课本P.36例3.12)4)for(;)省去了全部表达式。省去了全部表达式。(见课本P.36例3.13)循环体可以是空语句。循环体可以是空语句。例3.14#include void main()int n=0;printf(input a string:n);for(;getchar()!=n;n+);printf(%d,n);第13页,本讲稿共20页for语句可以嵌套使用(循环的嵌套是指一个循环的循环体中包含了另一语句可以嵌套使用(循环的嵌套是指一个循环的循环体中包含了另一个循环),构成多重循环。个循环),构成多重循环。for的二重循环的使用:打印的二重循环的使用:打印6以内的乘法表。以内的乘法表。main()()int i,j;for(i1;i6;i)for(j;ji;j)printf(d*d2d”,i,j,i*j););printf(”n”););1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36第14页,本讲稿共20页3.4 while语语句句3.4.1 while语句的一般形式语句的一般形式while语句的一般形式为:while(表达式)语句;其中:表达式是循环条件,语句为循环体。表达式?循环体语句0 0=0=0 While循环计算循环计算1加到加到100 main()int n=1,s=0;while(n=100)s=s+n;n+;printf(“s=%d”,s);第15页,本讲稿共20页3.4.2 while语句使用注意事项语句使用注意事项 循环体如包括有一个以上的语句,则必须用循环体如包括有一个以上的语句,则必须用 括起来,组成复合语句括起来,组成复合语句。应注意循环条件的选择以避免死循环。应注意循环条件的选择以避免死循环。允许允许while语句的循环体又是语句的循环体又是while语句、语句、for语句或语句或do-while语句,从而形成多重语句,从而形成多重循环(循环的嵌套使用参见循环(循环的嵌套使用参见3.5节)。节)。while语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为语句中的表达式一般是关系表达或逻辑表达式,只要表达式的值为真真(非非0)即可继续循环。即可继续循环。例3.18 main()int a=0;while(a=5)printf(%d,a+);第16页,本讲稿共20页表达式?循环体语句0=0 图3.6 while语句 流程图3.5 do-while语句语句3.5.1 do-while语句的一般形式语句的一般形式do-while语句的一般形式为:其中:语句是循环体,表达式是循环条件。do语句;while(表达式);do-while循环计算循环计算1加到加到100 main()int n=1,s=0;do s=s+n;n+;while(n=100);printf(“s=%d”,s);第17页,本讲稿共20页(1)for()while()(2)do for()while();(3)while()for()(4)for()for()3.5.2 do-while语句使用注意事项语句使用注意事项在在if语句,语句,while语句中,表达式后面都不能加分号,而在语句中,表达式后面都不能加分号,而在 do-while语句的表达式语句的表达式后面则必须加分号。后面则必须加分号。do-while和和while语句相互替换时,要注意修改循环控制条件语句相互替换时,要注意修改循环控制条件。在在do和和while之间的循环体由多个语句组成时,也必须用之间的循环体由多个语句组成时,也必须用 括起来组成一个复合语句。括起来组成一个复合语句。do-while语句也可与语句也可与while、for语句相互嵌套,构成多重循环。以下结构语句相互嵌套,构成多重循环。以下结构都是合法的嵌套。都是合法的嵌套。第18页,本讲稿共20页4种转移语句:种转移语句:break、continue、return和goto。3.6.2 continue语句语句 一般格式是:continue;例例3.20 3.20 输出输出100100以内能被以内能被7 7整除的数。整除的数。void main()int n;for(n=7;n=100;n+)if(n%7!=0)continue;printf(%d,n);3.6程序转移控制语句程序转移控制语句break语句的一般形式为:语句的一般形式为:break;3.6.1 break语句语句 例:例:breakbreak的使用的使用void main()int n;for(n=7;n=100;n+)if(n%7!=0)break;printf(%d,n);例例:continue和和break的使用的使用 main()int i=0;while(i10)if(i1)printf(%d,i);continue;if(i=5)break;i+;请问请问:此程序的输出结果如何此程序的输出结果如何?第19页,本讲稿共20页THE END Thanks!第20页,本讲稿共20页