您好,欢迎访问三七文档
第四章程序的控制流【教学要求】1.熟练掌握IF语句的三种形式,掌握IF语句的基本结构以及IF语句的嵌套,并能将条件运算符给出的语句转化成IF语句的形式。2.掌握SWITCH语句的一般形式,并能把复杂的分支选择性结构化成SWITCH语句来解决问题。3.掌握WHILE语句与DOWHILE语句的结构与使用方法。6.掌握FOR语句的结构,熟练掌握其使用方法。7.会使用常见的循环嵌套形式。5.能正确区分FOR语句、DO…WHILE语句与WHILE语句三者的不同。8.掌握BREAK语句和CONTINUE的应用及其区别。9.分析总结常用的程序设计方法及算法特点,并能编写相应的程序。一、选择结构程序设计(条件语句)•条件语句的作用:用来判定所给定的条件是否满足,并根据判定的结果决定执行给出的两种操作之一。•条件语句的几种形式•条件运算符二、switch语句•switch语句的用途:解决“多路选择”的问题。•switch语句的格式•switch语句的使用三、循环结构程序设计四、break、continue语句的作用及在循环中的应用五、综合举例教学要点1、一般形式if(表达式)例如:语句块1if(xy)printf(“max=%d”,x);elseelseprintf(“max=%d”,y);语句块22、常见形式1)简化形式if(表达式)语句块例如:if(xy)printf(“%d”,x);使用说明2)阶梯式3)嵌套形式4、综合举例if语句的三种形式if(表达式1)语句块1elseif(表达式2)语句块2elseif(表达式3)语句块3elseif(表达式4)语句块4...else语句块n例如:if(score90)printf(“verygood”);elseif(score80)printf(“good”);elseif(score60)printf(“ok”);elseprintf(“bad”);1、语句块:当有若干条语句时,必须用{…}括起来。如:if(ab)当只有一条语句时,用“;”。{x=1;max=a;}2、表达式:•if语句的表达式一般情况下为逻辑表达式或关系表达式。如:if(a==b&&x==y)printf(“a=b,x=y”);•也可以是任意类型(包括整型、实型、字符型、指针类型)例如:if(‘a’)printf(“%d”,’a’);if(‘3’)printf(“OK!”);注意:“非零”与“零”的用法•请区分if(x=1)与if(x==1)的不同。3、例:if语句的使用要点例exp4_1输入两个数,按数值将其按大小顺序输出.#includestdio.hmain(){floata,b,t;scanf(“%f,%f”,&a,&b);if(ab){t=a;a=b;b=t;}printf(“%5.2f,%5.2”,a,b);}要点:交换两个数据的方法输入两个数据abTF交换数据输出数据例exp4_2输入三个数按大小顺序输出.#includestdio.hmain(){floata,b,c,t;if(ab){t=a;a=b;b=t;}if(ac){t=a;a=c;c=t;}if(bc){t=b;b=c;c=t;}printf(“%5.2f,%5.2f,%5.2f”,a,b,c);}例exp4_4:写一程序判定某一年是否为闰年。闰年的判定:某年能被4整除但不能被100整除或者能被4整除,又能被400整除.year被4整除FTTTTFFFyear被100整除year被400整除leapleap=1leap=1leap=0leap=0输出闰年输出非闰年例exp4_4:#includestdio.h请同学们考虑程序有无main()其它简化形式{intyear,leap;scanf(“%d”,&year);if(year%4==0){if(year%100==0){if(year%400==0)leap=1;elseleap=0;}elseleap=1;}elseleap=0;if(leap)printf(“%dis”,year);elseprintf(“%disnot”,year);printf(“aleapyear\n”);}if语句的嵌套1、含义:一条if语句重又包含另一个if语句称为if语句的嵌套.2、一般形式if()if()语句块1else语句块2elseif()语句块3else语句块43、使用要点4、例内嵌if内嵌if嵌套使用要点1、if语句中if与else的配对关系为else总是与它上面的最近的if配对.书写格式的缩进与否与它们之间的配对无关.例如:if()if()语句块1else语句块2这时的else配对的对象为内层的if,而不是外层的if.2、要实行强行的配对关系可以利用{}。如:if(){if()语句块1}else语句块2例exp4_3有一函数:-1(x0)y=0(x=0)1(x0)#includestdio.hmain(){intx,y;scanf(“%d”,&x);if(x0)y=-1;elseif(x==0)y=0;elsey=1;printf(“x=%d,y=%d\n”,x,y):}条件运算符(?:)1、含义:在if语句中,表达式为真和假时都执行一条赋值语句并且都是给同一个变量赋值.这时可以把if语句简化为条件运算符.2、一般形式为:表达式1?表达式2:表达式3;如:可以写成:if(ab)max=a;max=(ab)?a:b;elsemax=b;(条件运算符是三目运算符)3、使用要点4、应用举例条件运算符的使用要点1.条件运算符的执行顺序先求表达式1,若为真则求解表达式2,整个表达式的值为表达式2的值;若表达式1的值为假则求解表达式3,整个表达式的值为表达式3的值.2.比较条件运算符与其他运算符的优先级别和结合性3.条件表达式中表达式1的类型可以与表达式2和表达式3的类型不一致.表达式2与表达式3的类型也可以不一致.例exp4_5#includestdio.hmain(){floatx=1.0;inta=2,b=3;x=(ab)?a:b;printf(“%f”,x);}输出为:3.0000条件表达式(ab)?a:b的值为整型数据,但x为实型数据,所以输出为实型数据.例exp4_6#includestdio.hmain(){floatx=1.0;输出为:3inta=2,b=3;3.0000a=(xb)?x:b;printf(“%d\n”,a);printf(“%f”,(xb)?x:b);}条件表达式(xb)?x:b的值为实型数据,但a为整型数据,所以printf(“%d\n”,a);输出为整型数据,printf(“%f”,(xb)?x:b);为实型数据.switch语句的格式switch(表达式){case常量表达式1:语句块1;break;case常量表达式2:语句块2;break;….case常量表达式n:语句块n;break;default:语句块n+1}switch语句的使用要点1.switch中的表达式可以是整型或字符型表达式。(也可以是枚举类型,新标准的c语言允许为任意类型.)2.每个常量表达式的值必须各不相同,否则将会出现矛盾.3.当表达式的值与case后面的常量表达式值相等时就执行此case后面的语句.4.“case常量:”只起语句标号的作用。5.break语句在switch中的作用:强行跳出switch体转到其它某条语句,每个case后面应有一个break语句(否则程序的执行顺序将改变),default分支后的break可以省略。6.各个case出现的先后顺序不影响程序的执行结果.7.多个case可以执行一组语句.8.举例:例exp4_7:写出下面程序的输出结果.main(){intx;scanf(“%d”,&x);switch(x){case5:printf(“excellent”);case4:printf{“Good”);case3:printf(“Pass””);case2:printf(“Fail”);/*break;*/default:printf(“Poor”);}}若从键盘输入3,则程序的输出为:PassFailPoor例:若变量已正确定义,则以下程序段的运行结果是:a=2;b=7;c=5;switch(a0){case1:switch(b10){case1:printf(@);break;case0:printf(!);break;}case0:switch(c==5){case0:printf(*);break;case1:printf(#);break;default:printf(%%);break;}default:printf(&);}printf(\n);A.@#&B.!#&C.@#D.!*答案:A例:程序main(){inta=5;if(a++5)printf(%d\n,a);elseprintf(%d\n,a--);}执行后显示结果是()。A.4B.6C.5D.有语法错误循环结构程序设计功能:重复执行某一种动作(代码)若干次。•goto语句构成的循环•while循环•do—while循环•for循环•while、do—while、for三种循环的比较•循环的嵌套使用:一个循环中又包含另一个循环成为循环的嵌套.上面讲到的三种循环可以互相嵌套.goto语句构成的循环1、一般形势为:goto语句标号;2、例:100#includestdio.h求nmain()n=1{inti,sum=0;i=1;运行结果为:5050loop:if(i=100){sum=sum+i;i++;gotoloop;}printf(“%d”,sum);}3、说明:目前goto语句很少使用,过多的使用goto语句会降低程序的可读性。while语句构成的循环1、功能:while语句一般完成当型循环,2、语句格式为:while(表达式p){循环体}3、执行过程:当表达式P为非零时,反复执行A操作,直到P为假时才停止。PA当P为真AFT100例如:求nn=1main(){inti,sum;i=1;要点:while(i=100)·循环体若不止一条语句时,{sum=sum+i;应用{…}括起来。i++;}·在循环体中应有使循环趋于结束的语printf(“%d”,sum);句,以避免“死循环”。}i=1当i=100Sum=sum+ii++do—while语句1、功能:do—while语句一般完成直到型循环,2、格式为:do语句块;while(表达式p);3、执行过程:先执行循环体,后判定表达式,当表达式的值为“假”时,循环结束。PATF直到P为假A100例如:求nn=1main(){inti,sum=0;i=1;do{sum=sum+i;i++;}while(i100);printf(“%d”,sum);}从上面对一个问题的两种解决方法可以看出:while循环与do_while循环在绝大多数情况下是可以相互转化的.i=1直到i100Sum=sum+ii++各种循环的比较(1)注意while与do_while循环中(条件)后面的“;”。(2)while与do_while执行循环体与判断的顺序不同。(3)各自的应用场合不同。•while强调“条件是否满足”•do_while强调“动作的行为”(4)for语句为非条件循环语句,功能比条件循环要强,也更灵活,凡能使用条件循环的场合,用for循环都能实现。(5)各种形式的循环都可以用来处理同一问题,一般情况下它们可以互相替代。for语句构成的循环1、功能:用于循环次数已确定或给定循环条件的情况,适合于描述一个事物从初始态到终止态的变化过程。最为灵活。2、语句格式为:for(表达式1;表达式2;表达式3)循环体;3、执行过程为:(1)先求解表达式1(初值);(2)求解表达式2,并判定其值是否为真(非0),若为真,则执行其所包含的语句,然后执行下面的步骤3;若为假
本文标题:b程序b的控制流
链接地址:https://www.777doc.com/doc-7634831 .html