《第四章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《第四章选择结构程序设计.ppt(34页珍藏版)》请在优知文库上搜索。
1、设计选择结构程序,要考虑两个方面的问题:设计选择结构程序,要考虑两个方面的问题:一:在一:在C语言中如何来表示条件判断?语言中如何来表示条件判断? 用关系表达式或逻辑表达式用关系表达式或逻辑表达式二:在二:在C语言中实现选择结构用什么语句?语言中实现选择结构用什么语句? 实现选择结构用实现选择结构用if语句语句或或switch语句语句。第四章 选择结构程序设计n关系表达式n关系运算符n = = 0 & x = A & x 99 & x 1000 p87p99 1.switch1.switch的语句格式:的语句格式: switchswitch( (表达式表达式) ) case case 常量表达
2、式常量表达式:语句:语句 case case 常量表达式常量表达式:语句:语句 case case 常量表达式常量表达式n n:语句:语句n n default default :语句:语句n + 1n + 1 2. 2. 功能:将功能:将表达式的值表达式的值与与各常量表达式各常量表达式相比较,相比较,若与常量表达式若与常量表达式i i相等,相等,则 执 行 语 句则 执 行 语 句 i ,i , 语 句语 句i+1,i+1, ,语句语句n+1n+1。若所。若所有的常量表达式值都不有的常量表达式值都不与表达式值相匹配,则与表达式值相匹配,则执行执行defaultdefault后的语句后的语句(
3、defaultdefault可以没有)。可以没有)。若语句中含有若语句中含有breakbreak语句,语句,则跳出则跳出switchswitch,执行,执行switchswitch的后续语句的后续语句。 例如:若已知例如:若已知x x在在1 1到到1010之间,要按如下公式计算之间,要按如下公式计算y y。 x-1 (1x2)x-1 (1x2) sinx sinx (2x3) (2x3) y= 1+x2 (3x5) y= 1+x2 (3x5) 2x-5 (5x8) 2x-5 (5x8) x/3 (8x10) x/3 (8x= 1 & x = 1 & x = 2 & x = 2 & x = 3
4、& x = 3 & x = 5 & x = 5 & x = 8 & x = 8 & x 10 ) y = x / 3;若用若用switchswitch语句可以写成语句可以写成: : (对照(对照 P103 switchP103 switch语句格式)语句格式) switch ( ( int ) x ) switch ( ( int ) x ) case 1 : y = x 1; break; case 1 : y = x 1; break; case 2 : y = sin ( x ) ; break; case 2 : y = sin ( x ) ; break; case 3 : case
5、 4 : y = 1 + x case 3 : case 4 : y = 1 + x * * x ; break; x ; break; case 5 : case 6 : case 7 : y = 2 case 5 : case 6 : case 7 : y = 2 * * x 5; break; x 5; break; case 8 : case 9 : y = x / 3; case 8 : case 9 : y = x / 3; 例如:根据考试成绩的等级,打印出评语。例如:根据考试成绩的等级,打印出评语。switch ( grade ) switch ( grade ) case ca
6、se A A : printf ( “ : printf ( “ 优优 ” ” ) ; break ;) ; break ; case case B B : printf ( “ : printf ( “ 良良 ” ” ) ; break ;) ; break ; case case C C : printf ( “ : printf ( “ 中中 ” ” ) ; break ;) ; break ; case case D D : printf ( “ : printf ( “ 及格及格 ” ” ) ; break ;) ; break ; case case E E : printf (
7、“ : printf ( “ 不及格不及格 ” ” ); break ;); break ; default : printf ( “ error n ” ) ; default : printf ( “ error n ” ) ; 结果为:?结果为:?若若gradegrade为为AA,则输出为:,则输出为:优良中及格不及格优良中及格不及格errorerror例如:根据考试成绩的等级,打印出评语。例如:根据考试成绩的等级,打印出评语。switch ( grade ) switch ( grade ) case case A A : printf ( “ : printf ( “ 优优 ” ”
8、) ; break ;) ; break ; case case B B : printf ( “ : printf ( “ 良良 ” ” ) ; break ;) ; break ; case case C C : printf ( “ : printf ( “ 中中 ” ” ) ; break ;) ; break ; case case D D : printf ( “ : printf ( “ 及格及格 ” ” ) ; break ;) ; break ; case case E E : printf ( “ : printf ( “ 不及格不及格 ” ” ); break ;); b
9、reak ; default : printf ( “ error n ” ) ; default : printf ( “ error n ” ) ; 结果为:?结果为:?若若gradegrade为为AA,则输出为:,则输出为:优优( ()switch)switch后的表达式类型一般为整型、字符型、或枚举型。后的表达式类型一般为整型、字符型、或枚举型。C C的新标准允许所有类型。的新标准允许所有类型。( () )常量表达式常量表达式 n n的值必须互不相同。的值必须互不相同。( ()break)break语句用于跳出语句用于跳出switchswitch。在。在casecase后的语句都有后的
10、语句都有breakbreak的的情况下,情况下,casecase的出现次序不影响执行结果。的出现次序不影响执行结果。( () )若没有若没有breakbreak语句则执行结果不同。语句则执行结果不同。例如,若去掉上例中的例如,若去掉上例中的5 5个个breakbreak语句,程序执行时输入语句,程序执行时输入A,A,则输则输出结果为:出结果为: 优良中及格不及格优良中及格不及格errorerror( (多个多个casecase可以共用一组执行语句。例如:可以共用一组执行语句。例如:case A : case B : case C : case case A : case B : case C
11、: case D: D: printfprintf ( “ ( “ 合格合格 ” ” ) ; break ;) ; break ;注意:注意:n例例 求一元二次方程求一元二次方程ax2+bx+c=0的解(的解(a0)。)。n例例 已知某公司员工的保底薪水为已知某公司员工的保底薪水为500,某月所接工程的利,某月所接工程的利润润profit(整数)与利润提成的关系如下(计量单位:元):(整数)与利润提成的关系如下(计量单位:元):nprofit1000没有提成;没有提成;n1000profit2000提成提成10%;n2000profit5000提成提成15%;n5000profit10000提
12、成提成20%;n10000profit提成提成25%。 算法设计要点:算法设计要点: 为使用为使用switch语句,必须将利润语句,必须将利润profit与提与提成的关系,转换成某些整数与提成的关系。分析成的关系,转换成某些整数与提成的关系。分析本题可知,提成的变化点都是本题可知,提成的变化点都是1000的整数倍的整数倍(1000、2000、5000、),如果将利润),如果将利润profit整除整除1000,则当:,则当:profit1000 对应对应0、11000profit2000 对应对应1、22000profit5000 对应对应2、3、4、55000profit10000 对应对应5
13、、6、7、8、9、1010000profit 对应对应10、11、12、 为解决相邻两个区间的重叠问题,最简单的方法就是:利润为解决相邻两个区间的重叠问题,最简单的方法就是:利润profit先先减减1(最小增量),然后再整除(最小增量),然后再整除1000即可:即可: profit1000对应对应0 1000profit2000对应对应1 2000profit5000对应对应2、3、4 5000profit10000对应对应5、6、7、8、9 10000profit对应对应10、11、12、main() long profit; int grade; float salary=500; printf(Input profit: ); scanf(%ld, &profit); grade= (profit 1) / 1000;/*将利润将利润-1、再整除、再整除1000,转,转化成化成 switch语句中的语句中的case标号标号*/