C程序设计C程序设计 (24).pdf
C C程序设计程序设计Programming in CProgramming in C编程实现选择分支(编程实现选择分支(2 2)1、程序顺序结构2、程序选择结构C C程序设计程序设计程序设计程序设计3 33.4.1 if3.4.1 if语句语句【例3.3】利用下面的Heron公式计算三角形面积。设三角形的三边长a、b、c,构成三角形的条件是:,同时成立。则面积:其中。()()()st ta tb tc2abctabcbcacab4 43.4.1 if3.4.1 if语句语句例3.31#include#include 2#include#include 3 intint mainmain()()4 5 doubledouble a a,b b,c c;6 printfprintf(input a,b,c:);(input a,b,c:);7 scanfscanf(%lf%lf%lf,&(%lf%lf%lf,&a a,&,&b b,&,&c c););/输入三角形三边长/输入三角形三边长8/判断三边长是否构成三角形/判断三边长是否构成三角形9 ifif(a a+b b c c&a a+c c b b&b b+c c a a)10 doubledouble s s,t t;11 t t=(=(a a+b b+c c)/)/2.02.0;12 s s=sqrtsqrt(t t*(*(t t-a a)*()*(t t-b b)*()*(t t-c c););/Heron公式计算三角形面积/Heron公式计算三角形面积13 printfprintf(area=%lf(area=%lfnn,s s););14 15 elseelse printfprintf(error(errornn););5 53.4.1 if3.4.1 if语句语句例3.31#include#include 2#include#include 3 int main()int main()4 5 double a,b,c;double a,b,c;6 printf(input a,b,c:);printf(input a,b,c:);7 scanf(%lf%lf%lf,&a,&b,&c);/输入三角形三边长scanf(%lf%lf%lf,&a,&b,&c);/输入三角形三边长8 /判断三边长是否构成三角形/判断三边长是否构成三角形9 if(a+bc&a+cb&b+ca)if(a+bc&a+cb&b+ca)10 double s,t;double s,t;11 t=(a+b+c)/2.0;t=(a+b+c)/2.0;12 s=sqrt(t*(t-a)*(t-b)*(t-c);/Heron公式计算三角形面积s=sqrt(t*(t-a)*(t-b)*(t-c);/Heron公式计算三角形面积13 printf(area=%lfn,s);printf(area=%lfn,s);14 15 else printf(errorn);else printf(errorn);area=6.000000input a,b,c:3 4 5程序运行屏幕6 63.4.2 switch3.4.2 switch语句语句switch语句的作用是计算给定的表达式,根据结果选择从多个分支入口执行,语句形式为:switchswitch(表达式表达式)casecase 常量表达式1常量表达式1:.:.语句序列1语句序列1casecase 常量表达式2常量表达式2:.:.语句序列2语句序列2casecase 常量表达式n常量表达式n:.:.语句序列n语句序列ndefaultdefault:.:.默认语句序列默认语句序列 7 73.4.2 switch3.4.2 switch语句语句图3.3 switch语句执行流程8 83.4.2 switch3.4.2 switch语句语句(1)switch语句中case分支的语句序列可以是一个语句,也可以是任意多的语句序列,也可以没有语句;既可以是简单语句,又可以是复合语句和控制语句。如果没有语句,则一旦执行到这个case分支,什么也不做,继续往下执行。9 93.4.2 switch3.4.2 switch语句语句举例switchswitch(n n)casecase 7 7:printfprintf(step5(step5nn););casecase 6 6:casecase 5 5:printfprintf(step4(step4nn););casecase 4 4:printfprintf(step3(step3nn););printfprintf(step2(step2nn););casecase 2 2:printfprintf(step1(step1nn););defaultdefault:printfprintf(step0(step0nn););10103.4.2 switch3.4.2 switch语句语句(2)switch语法中各个case分支和default分支的出现次序在语法上没有规定,但次序的不同安排会影响执行结果。11113.4.2 switch3.4.2 switch语句语句举例n为3时,程序A输出0,程序B输出012,因为程序A只执行第5行,而程序B依次执行第3、4、5行。/程序B/程序Bswitchswitch(n n)defaultdefault:printfprintf(0);(0);casecase 1 1:printfprintf(1);(1);casecase 2 2:printfprintf(2);(2);1/程序A/程序A2 switchswitch(n n)3 casecase 1 1:printfprintf(1);(1);4 casecase 2 2:printfprintf(2);(2);5 defaultdefault:printfprintf(0);(0);6 12123.4.2 switch3.4.2 switch语句语句(3)switch语法中default分支是可选的,若没有default分支且没有任何case标号的值相等时,switch语句将什么也不做,直接执行后续语句。13133.4.2 switch3.4.2 switch语句语句(4)switch语句后面的圆括号是语法规定必须有的。分支选择可以是C语言的任意表达式,但其值必须是整数(含字符类型)、枚举类型,或者包含能转换成这两种类型的类型。如果有其他类型的值,例如浮点数或逻辑型结果,则会产生隐式类型转换,如果不能隐式类型转换,则出现语法错误。通常情况下,分支选择是整型的算术运算表达式,应该谨慎出现别的表达式。switchswitch(整数/字符类型/枚举类型整数/字符类型/枚举类型)14143.4.2 switch3.4.2 switch语句语句举例分支选择为逻辑运算表达式,按整数处理,真为1,假为0,除此之外的其他case分支是不可能转向去的。switchswitch(k k=6565)casecase 0 0:printfprintf(false(falsenn););casecase 1 1:printfprintf(true(truenn););15153.4.2 switch3.4.2 switch语句语句(5)switch语法中的case分支必须是常量表达式且互不相同,即为整型、字符型、枚举类型的常量值,但不能包含变量。例如若c是变量,则“case c=a&c=z:”的写法是错的。case分支后面的冒号是必须的,即使没有后面的语句序列。16163.4.2 switch3.4.2 switch语句语句从switch语句的语法上来看,一旦开始执行某个分支,就会一直执行到没有语句为止;换言之,从某个分支开始执行,也会将另一个分支的语句序列执行到。实际问题求解中,多分支选择却不是这样的,它往往要求某个分支的语句执行后,switch就结束,所要求的执行流程如图所示。17173.4.2 switch3.4.2 switch语句语句图3.4 结构化的switch流程18183.4.2 switch3.4.2 switch语句语句为了实现这样的控制流程,可以使用break语句,语句形式为:在switch语句中任意位置上,只要执行到break语句,就结束switch语句的执行,转到后续语句。breakbreak;19193.4.2 switch3.4.2 switch语句语句所以,更常见的switch结构应该如下,它提供了程序多分支选择执行流程。最后分支是可以不用break语句的。switchswitch(表达式表达式)casecase 常量表达式1常量表达式1:.:.语句序列1语句序列1;breakbreak;casecase 常量表达式2常量表达式2:.:.语句序列2语句序列2;breakbreak;casecase 常量表达式n常量表达式n:.:.语句序列n语句序列n;breakbreak;defaultdefault:.:.默认语句序列默认语句序列 结束结束