《中职类的C语言课件.ppt》由会员分享,可在线阅读,更多相关《中职类的C语言课件.ppt(29页珍藏版)》请在三一办公上搜索。
1、第4章 选择程序设计,选择结构是C语言程序中的一种重要结构形式,这种程序结构通过条件判断的方法有选择性地执行部分程序语句,大大提高了程序的灵活性,并强化了程序的功能。我们在编写C程序时通常都要使用到选择结构,以设计出结果多样化的程序。正确掌握选择结构的使用方法是学习C程序设计的一项基本要求。,【学习目标】,理解C语言中各类控制语句的执行过程、功能和使用方法掌握if语句的3种形式、if和else配对规则及if语句的嵌套能正确地使用switch语句设计多分支选择结构,4.1 概述,在日常生活中,经常遇到这样的情况:只有满足一定条件时才能做某一件特定的事情,否则就不能做这件事情转而去完成其他任务。例
2、如,只有担任学生干部的学生才能被评为优秀学生干部,否则只能被评为优秀学生;只有高考成绩达到某一较高录取分数线的学生才能升入重点大学,否则只能升入一般大学,甚至还可能失去继续学习的机会。,C语言程序是结构化的程序。在运行C程序时,并不是组成程序的所有代码都会按照书写顺序依次执行而获得单一的运行结果。C语言中通过选择结构来实现对代码的选择执行,在C程序的选择结构中包含了条件判断语句,运行程序时,首先进行必要的条件判断,然后根据条件成立与否有选择性地执行不同的程序代码,使得同一程序在不同的运行条件下可以获得不同的结果,这样就增强了程序的灵活性。,在C语言中,选择程序结构主要通过以下两类语句来实现。i
3、f语句。switch语句。本章将分别讲述使用这两类语句构成选择结构的一般方法。,4.2 条件选择语句if语句,4.2.1 if语句的第1种形式if结构4.2.2 if语句的第2种形式if-else结构4.2.3 if语句的第3种形式if-else if-else结构,使用if语句构成的选择结构在C语言中应用最为广泛,是C程序中的重要结构单元。根据实现功能和实现形式的差异,if语句包括以下3种形式。if结构:根据一定条件选择执行一条(或一组)语句。if-else结构:根据一定条件从两条(或两组)语句中选择执行一条(或一组)语句。if-else if-else结构:根据一定条件从多条(或多组)语句
4、中选择执行一条(或一组)语句。下面将分别介绍这3种if语句的设计方法。,4.2.1 if语句的第1种形式if结构,if结构是最简单的选择结构,首先判断一个条件,当条件满足时,执行对应的语句(组),否则跳过该语句(组)。图4-1 if语句执行流程图(1)if结构的格式为if(表达式)语句(2)if语句的执行流程如图4-1所示。(3)if语句结构的执行过程如下。首先判断表达式的值,如果其值为“真(非0)”则执行语句(或语句组),然后执行后续语句;如果其值为“假(0值)”则跳过语句(或语句组),然后执行后续语句。,4.2.2 if语句的第2种形式if-else结构,if-else语句可以实现双分支结
5、构,可以根据条件成立与否从两个语句(组)中选取一个来执行。(1)if-else结构的格式为if(表达式)语句1;else 语句2;其中,语句1称为if子句,语句2称为else子句,这种if子句与else子句配套的语句叫做if-else语句。在程序运行过程中,根据表达式的值真假与否,从两个子句中选取一个子句执行。(2)if-else结构的流程图如图4-2所示。(3)if-else结构的执行过程如下。首先判断表达式的值,如果其值为“真(非0)”则执行语句1(或语句组1),然后执行后续语句;如果其值为“假(0值)”则执行语句2(或语句组2),然后执行后续语句。图4-2 if-else结构的流程图if
6、-else结构用于根据条件满足与否从两条(或两组)语句中选择执行一条(或一组)语句。先看以下的案例程序。,4.2.3 if语句的第3种形式if-else if-else结构,前面已讲述了if语句的两种基本使用形式,使用if结构可以根据条件满足与否跳过部分语句;使用if-else结构可以根据条件满足与否从两组语句中选择执行其中的一组。但是,在这两种用法中,最多也只能处理有两种可供选择的情况。如果在程序设计时需要从多组语句中选择一组来执行又应该怎么办呢?这时就可以使用if语句的第3种形式if-else if-else结构。,(1)if-else if-else结构的格式如下:if(表达式1)语句1
7、;else if(表达式2)语句2;else if(表达式3)语句3;else if(表达式n-1)语句n-1;else 语句n;,(2)使用说明。if-else if-else语句用在多分支路径中,在程序执行时,按照程序书写顺序依次判断每条分支圆括号内表达式的真假。当圆括号内表达式的值为“真(非0)”时,则执行该分支下面的语句,完成后退出条件结构而执行后续语句。程序仅仅选择执行表达式值为“真(非0)”的那条路径下的语句“多选一”。如果所有表达式的值都为“假”,则执行最后一个else路径下的语句。在程序运行过程中,有且仅有一条路径上的语句被执行。,4.3 多分支选择语句switch结构,4.3
8、.1 switch结构的基本形式4.3.2 带break语句的switch语句,在前面的内容中,学习了使用if语句构建选择结构的一般方法。使用if-else结构可以实现双分支选择功能,使用if-else if-else结构可以实现多分支选择功能,但是这种多分支结构使用起来比较繁琐。在C程序中,使用switch结构可以非常方便地构成多分支选择结构。一个程序涉及的分支越多,越适合使用switch结构。,4.3.1 switch结构的基本形式,图4-4 switch结构的流程图switch结构用于实现多分支选择结构,也就是说可以从多组语句中选择执行其中的部分语句。(1)switch结构的语法格式为s
9、witch(表达式)case 常量表达式1:语句1;case 常量表达式2:语句2;case 常量表达式n:语句n;default:语句n+1;,(2)该语句的执行过程如下首先将“表达式”的值依次与各个“常量表达式”进行比较,哪个“常量表达式”的值与“表达式”的值相等,就执行该“常量表达式”后面的语句,此时该语句称为执行switch语句的入口。一旦一个语句被执行后,顺次执行其后的所有语句,而不必再判断相应的“常量表达式”的值是否和“表达式”的值相等。,当所有case后的“常量表达式”都不与“表达式”的值相等时,就只执行default后的语句。当“表达式”的值与“常量表达式1”相一致时,不仅执行
10、语句1,而且其后的语句2到语句n+1也都被执行。同理,当“表达式”与“常量表达式3”相一致时,不仅执行语句3,而且其后的语句4到语句n+1也都被执行;当所有的“常量表达式”与“表达式”都不一致时,就只执行语句n+1。,(3)使用说明switch后面圆括号内的“表达式”可为任何类型,并且“表达式”的类型和“常量表达式”的类型一定要一致,否则会出现语法错误。当“常量表达式”的值与“表达式”的值相等时,执行其后的所有的语句,否则就执行default后面的语句。圆括号不能省略,且其外没有“;”,否则会出现语法错误。switch语句中大括号内的部分称为switch语句的语句体。,default出现的顺序
11、并不影响程序的功能,default后的语句总是最后执行。case后必须是常量表达式并且每个case后面的常量表达式必须互不相同,case和常量表达式之间一定要有空格,否则为语法错误。每个case所管辖的语句可以是一条语句,也可以是多条语句,若是多条,可不加大括号。case后的语句还可以为空,当为空时,什么都不做,程序继续执行下一条case后的语句,不影响其他语句的执行。,4.3.2 带break语句的switch语句,break语句用来实现程序的跳转和退出。由前一节可知,switch语句的基本结构只能实现“满足一个条件执行多个或一个case之后语句的情况”,但是如果要实现“满足多个或一个条件只
12、执行一个case之后语句的情况”又怎么办呢?此时就要使用带break语句的switch语句。,(1)带break语句的switch语句语法格式为switch(表达式)case 常量表达式1:语句1;break;case 常量表达式2:语句2;break;case 常量表达式n:语句n;break;default:语句n+1;与switch语句的基本形式相比,带break语句的switch语句最本质的差异是:一旦程序执行到break语句,将跳出switch语句,从而结束分支选择。,(2)带break语句的switch语句的流程首先计算switch后面圆括号内的表达式的值,比较该值和case后的“
13、常量表达式”的值是否相等,找到执行switch语句体的入口。入口之前的case的语句不被执行,只执行入口以后case后的语句。如果入口以后的case之后均没有break语句,则入口后所有case后的语句均被依次顺序执行,最后执行default以后的语句(此时即为switch语句的基本用法)。如果在执行入口及其以后case后的语句的过程中一旦遇到break语句,则立即结束switch语句的执行。,(3)用法说明switch语句的基本用法中的所有规范均适用于带break语句的switch语句。对带break语句的switch语句当“常量表达式”的值与“表达式”的值相等时,就执行相应“常量表达式”后
14、的语句(包括case和default后的语句),如果遇到break语句则跳出switch语句的语句体,结束switch语句的执行;当“常量表达式”的值与“表达式”的值不相等时,就只执行defaut后面的语句。,习题,一、选择题下面不正确的if语句形式是。Aif(xy);Bif(x=y)x+=y;Cif(x!=y)scanf(%d,a)Dif(xy)x+;y+;else scanf(%d,b);,if语句的语法正确的是。Aif(x0)prinntf(%f,x)Bif(x0)x=x+y;y=y-x;else prinntf(%f,-x);else printf(%d,x);Cif(x0)x=x+y
15、;y=y-x:Dif(x0)x=x+y;y=y-x;else printf(%d,x);else printf(%d,x);,二、填空题1某服装店经营套服,不单件出售。若买的不少于100套,每套70元;若买的不少于50套,每套80元;若买的不足50套,每套90元。以下程序的功能是读入买上衣和裤子的套数n并计算应付的款项m。#includemain()int m,n;printf(Input n:n);scanf(%d,n);if()m=n*70;if()m=n*80;if(n50)m=(),2以下程序段:switch(grade)case A:printf(85100n);case B:pri
16、ntf(7084n);case C:printf(6069n);break:case D:printf(60n);defaut:printf(error);若输入的grade值为A,则输出的结果是。若输入的grade值为B,则输出的结果是。若输入的grade值为C,则输出的结果是。若输入的grade值为D,则输出的结果是。若输入的grade值为b,则输出的结果是。,三、编程题1输入整数a,b,若a2+b2大于100,则输出百位以上的数字,否则输出两数之和。2判断输入的正整数是否既是5又是7的整倍数。若是则输出yes,否则输出no。3输入3个整数,判断能否构成三角形。能则按从小到大的顺序输出3条边的值;否则输出字符串“cant comprise!”。4编程实现以下功能:输入一个小写字母,将字母循环后移5个位置后输出。例如a变成f,w变成b。,