C语言程序设计(第四章)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第四章选择结构程序设计学习目标掌握switch语句的使用掌握if语句的使用掌握break语句的使用一if语句if语句用来表示算法的选择结构。有三种形式:a)一般形式if(e)语句或写成:if(e)语句其中:e是表达判断条件的任何表达式。通常是关系表达式和逻辑表达式。语句是条件为真时要执行的语句,该处只能放置一条语句。若要执行多条语句,则必须使用复合语句。1、单路选择结构的if语句注意:整个结构是一条语句(包含语句部分);if(e)的后面不能加分号,否则为当条件为真时执行空语句。b)if语句的执行与功能先对e求值,若e的值为真(非0)执行语句,若e的值为假(0),执行跟在语句后面的语句。e为非0非0e=0语句求e的值下一条语句例1:if(n)printf(“%f”,m/n);这里n等同于使用n!=0的判定。例2:if(!n)n++;这里!n等同于n==0的判定。main(){floata,b,t;scanf(“%f,%f”,&a,&b);if(ab){t=a;a=b;b=t;}printf(“a=%5.2f,b=%5.2f”,a,b);}例5:使用复合语句例若程序运行时的输入:3.7,-2.3则程序的输出:a=-2.30,b=3.702、两路选择结构的if语句a)一般形式if(e)语句1else语句2b)两路选择结构if语句的执行与功能先对e求值,若e的值为真(非0)执行语句1,若e的值为假(0),执行else后面的语句2。语句1或语句2执行后,继续执行跟在语句2后面的语句。e为非0?非0e=0语句1语句2if结构后的语句例:if(xy)printf(“%d”,x);elseprintf(“%d”,y);main(){doublex,xabs;scanf(“%lf”,&x);if(x0)xabs=-x;elsexabs=x;printf(“x=%f,|x|=%f”,x,xabs);}c)求实数x的绝对值的例if(e1)语句1elseif(e2)语句2elseif(e3)语句3……elseif(en)语句nelse语句n+13、多路选择结构的if语句a)一般形式它用来进行两个以上的多路条件判定,并选择执行相应的处理语句。其中ei与语句i解释同前,最后的else属于最后一个if,并且它可以缺省。else和中间的elseif不能单独使用,后面也不能有分号。b)多路选择结构的if语句的执行(1)从“表达式1”开始顺序进行诸条件的判定,若ei条件为真,则执行其后的语句i,忽略其后所有的表达式条件判定,语句i执行完后便结束整个if结构的执行,程序直接转移到“语句n+1”后的语句处执行(如果最后有else子句);(2)如果从ei起到en的所有条件判断都为假,则执行else后的语句n+1(如果else子句存在);(3)如果所有的条件都不成立,且最后又无else子句,则这个嵌套的if语句中没有任何语句被执行,直接执行该嵌套结构后的那条语句。e1为非0语句2语句n语句1e2为非0en为非0语句n+1…en=0非0非0非0d)if语句的嵌套if结构中的“语句”可以是任何C语言语句,因此它们可以是一个if语句,同理,内嵌的if语句又可以是嵌套另一个if语句,依此类推。但在实际程序设计中常需要使用带else子句和不带else子句的if语句的混合嵌套。在这种情况下,嵌套中就会出现if与else个数不等的情况,很易于出现混乱的现象。例如:一般而言,如果嵌套的if语句都带else子句,那么if的个数与else的个数总相等,加之良好书写习惯,则嵌套中出现混乱与错误的机会就会少一些。if(表达式1)if(表达式2)语句else语句从形式上看,编程者似乎希望程序中的else子句属于第一个if,但编译程序并不这样认为,仍然把它与第二个if相联系。对于这类情况,C语言明确规定:if嵌套结构中的else总是属于在它上面的、最近的、又无else子句的那个if语句。尽管有这类规定,建议还是应尽量避免使用这类嵌套。如果必须这样做,应使用复合语句的形式明显指出else的配对关系。如可以这样来处理:4.4switch语句switch语句是C语言中提供的一种有效的、结构清晰的多路选择语句。它根据给出的表达式的值,将程序控制转移到某个语句处执行。使用它可以克服嵌套的if语句易于造成混乱及过于复杂等问题。C程序设计中常用它来实现分类、菜单设计等处理。switch(e){casee1:语句序列;[break;]casee2:语句序列;[break;]………………caseen:语句序列;[break;]defaul:语句序列;}1)switch语句一般形式此处至少有一个空格!2)功能与执行计算e的值,依次与e1至en做相等判断,若e==em成立,则执行em之后的语句序列,执行到break语句时跳出switch语句。3)语法规则a)e必须是可以转换成整数的任何表达式。b)ei必须是整型(包括char)常量表达式(值可为负),且它们的值不能相同,但顺序无限制。c)default的位置任意,不必放在最后的位置。d)如果default放在最后的位置,其后的break语句可缺省。e)switch结构中可以没有default,即可缺省,直接跳到最后的大扩号“}”。f)不同的case子句后面的语句序列可以相同。此时,相同的语句序列可以只写一个(写在最后的那个case子句的后面,其他的可以不写,但“caseei:”不能不写)。在执行switch语句的过程中,一旦遇到break,立即退出switch语句。所以一般在语句序列i后应有break语句,否则在执行完语句序列i后将继续执行下一个case后的语句序列i+1,直到遇到一个break为止。switch语句中可以嵌套另一个switch语句。在嵌套的switch结构中,当前遇到的break总是结束所在switch的执行,而不是退出整个嵌套的switch结构。外层嵌套的switch结构中的ei与内层嵌套的switch结构中的ei可以相同。while(t){printf(“\nA.Loadfile\n”“B.savefile\n”“C.exit\n”“choiceA、B、Cplease:”);switch(c=getchar()){case‘a’:case‘A’:f_load();break;case‘b’:case‘B’:f_save();break;case‘c’:case‘C’:t=0;break;default:printf(“wrongcommand!”);}}注意:这里假定t已有非0的值例:注意:去掉break后的执行效果!main(){switch((1+32767)%32767){case1:printf(“1”);break;case2:printf(“2”);break;case3:printf(“3”);break;default:printf(“other”);}}输出结果为:other例:main(){switch(2.5){case1:printf(“1”);break;case2:printf(“2”);break;case3:printf(“3”);break;default:printf(“other”);}}输出结果为:2例:/*表达式e为浮点数时将自动转换成整数*/语句格式:break;语句功能:立刻跳出当前所在结构,执行该结构之后的第一条语句。语法规则:a)位于switch语句中,隔离、结束各case后的语句序列。b)位于循环结构中(while、do-while、for语句),跳出循环。5)break语句while(1){语句序列if(!t)break;}例:

1 / 29
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功