1、2018/6/9,1,第五章 选择结构程序设计,李 书 涛 ,2018/6/9,2,目录,1 if条件分支结构2 switch-case开关语句3 选择结构的嵌套4 选择结构程序应用实例5 本章小结,第五章 选择结构程序设计,2018/6/9,3,C程序,源文件1源文件2源文件3.源文件n,预处理命令函数1函数2.函数n,说明语句执行语句,main(),最小编译单位,最小功能单位,必须具有一个主函数,1 if条件分支结构,1 if条件分支结构 5.1.1 C程序概述,2018/6/9,4, 一个C程序由若干函数组成 程序中有且仅有一个主函数main() 程序的运行从主函数开始 函数由函数名和函
2、数体组成 函数体由说明语句和执行语句组成 C中执行语句有四类,说明语句表达式语句复合语句控制语句空 语 句,C程序的特点,1 C语言程序基本结构,2018/6/9,5,结构化程序有三种基本结构,顺序结构,选择结构,循环结构,语句执行的顺序与程序书写的顺序一致,条件成立,执行A;否则,执行B,重复执行某组动作,结构,条件成立时,反复执行A;条件不成立,停止,重复执行动作A,当某一条件成立时,停止,5.1.2 C程序的基本结构,2018/6/9,6,main( ) int a,b,c; a=5; b=6; c=a+b; printf(“%d”,c);,程序执行的顺序和语句书写的顺序一致,有一个数据
3、入口一个数据出口,基本结构,一、顺序结构,2018/6/9,7,条件,A,B,Y,N,当条件满足时,执行语句A;否则,执行语句B,有一个数据入口一个数据出口,键盘输入一个整数,判断其正负,例,int a;,a,a0,if(a0) printf(“a为正数”);else printf(“a为负数”);,语句A,语句B,打印a的值,二、选择结构,2018/6/9,8,Y,N,求1100的自然数之和,X=100,x=1S=0,语句,若条件满足,重复执行语句内容;否则,退出循环,条件,一个数据入口一个数据出口,s=s+x; x=x+1;,语句,S,条件不满足,不执行任何语句,三、循环结构 1. 当型循
4、环,2018/6/9,9,语句,N,Y,求1+2+3+n 1000,n=1s=0,语句,不论条件是否满足,语句至少执行一次,2. 直到型循环,s=1+2+3+ n=? (s1000),2018/6/9,10,1 if( ) else 条件语句2 switch( ) 开关语句3 for( ) 循环语句4 while( )循环语句5 do while( );循环语句6 break 间断语句7 continue 继续语句 8 goto 转向语句9 return 返回语句,控制语句的作用在于控制程序的走向(流程) 共有九种语句,条件,循环,多分支,函数,5.1.3 流程控制语句,2018/6/9,11
5、,5.1.4 条件语句,if语句构成的条件结构是C的三种基本结构之一,用来确定给定的条件是否满足,所含条件一般是关系表达式或逻辑表达式。,根据学生分数判断是否及格?根据学生分数如何进行分级?,提出问题,自然语言:如果 那么 否则C语言:分支语句,如何解决?,2018/6/9,12,本节重点,if语句的基本格式带分支的条件语句 多分支的条件语句if结构的嵌套,1. if语句的基本格式: if (表达式) 语句 功能:判断表达式的值,若为非 0,执行语句;否则,跳过语句继续执行下一条语句。,输出不及格的成绩main( ) int a; scanf(“%d”, ,一、 if 语句的三种基本形式,20
6、18/6/9,13,格式: if(表达式) 语句1 else 语句2,main( ) int a; scanf(“%d”, ,N,条件,Y,语句2,语句1,功能:判断表达式的值,若为非0,执行语句1;否则执行语句 2,2. 带分支的条件语句,2018/6/9,14,求a 和 b 两数中较大的一个数。,main( ) int a,b,max; scanf(%d , %d, ,maxa,将b赋给max,程序举例格式一,2018/6/9,15,main( ) int a,b,max; scanf(%d, %d,求a和b两数中较大的一个数。,ab?,max=b,Y,N,max=a,格式二,程序举例格式
7、二,2018/6/9,16,多分支,格式 if (表达式1) 语句1 else if ( 表达式2 ) 语句2 else if (表达式3) 语句3 else 语句 n,表达式1,表达式3,表达式2,语句1,语句2,语句3,语句n,Y,Y,Y,N,N,N,3. 多分支的 if 结构,从键盘输入一个整数a,按其值的大小,输出a小于10;a大于10小于100 ;a大于100小于1000或a大于1000。,程序举例,main() int a; scanf(“%d”, ,2018/6/9,18,5. 当 if 后有多个执行语句时,必须用 将多个语句括起来,构成一个复合语句,而 之外不必有分号。,多分支
8、,1. if语句中进行条件判断的“表达式”必须用( )括起来,且不可省略。,2. 条件后面不加分号。,3. 语句之后有分号。,4. else 不是语句,不能单独使用。,有关 if 语句的说明,多分支,main( ) int year; float money,rate,total; /* 本金,月利率,本利合计*/ printf(Input money and year =?); scanf(%f,%d, ,程序举例:计算本利合计,2018/6/9,20,格式: if(表达式) if( 表达式1) 语句11 else 语句12 else if (表达式2) 语句21 else 语句22,在一个
9、if结构中,包含一个或多个if结构。,判断表达式的值,若为非0,再判断表达式1的值,非0执行语句11,否则执行语句12; 若表达式的值为0,再判断表达式2的值,非0执行语句21,否则执行语句22。,功能:,二、 if 语句的嵌套,2018/6/9,21,if语句的嵌套流程图,2018/6/9,22,在if语句的“语句1”或“语句2”中又包含着if语句。,main( ) int x, y; printf (Enter integer X and Y:); scanf (%d,%d, ,表达式,if与else之间的匹配,else总是与同它最近的 if相匹配。,表达式1,注意,程序举例:判断两数的关
10、系,嵌套,else,if,if,else,else,else,else,if,if,if,程序举例,课堂作业,2018/6/9,24,格式:switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 . case 常量表达式n:语句n default: 语句n+1 switch-case开关语句,多重分支的条件语句 switch,2 switch-case开关语句,2 switch-case开关语句 5.2.1 开关语句(多分支结构程序设计),例题:按照考试成绩输出百分制分数段,main( ) char grade; scanf (“%c”, ,输入字母 B,输出:
11、70-84 60-69 60 Error,?,printf(“70-84n”);,printf(“70-84n”); break;,程序举例,2018/6/9,26,2 case 后的每个常量表达式必须各不相同。,说明:,1 括号内的表达式可以是 int ,char。,3 case 和 default的位置是任意的。,4 每一个case之后应有一个 以跳出 switch( ) 结构。,break(间断语句);,5 每个case 之后的执行语句可多于一个,但不必加 。,6 允许几种case情况下执行相同的语句,不必每个都写case 。,注意事项,2018/6/9,27,语句1,=常量1?,计算表
12、达式的值,break;,语句2,=常量2?,break;,语句n+1,有default?,Y,N,N,N,Y,Y,switch语句流程图,main() float x,y; char c; double r; scanf(“%f,%f,%c”,当输入3,5,+之后,r的值为8.000000,如果没有break语句,会顺序执行下面的r=x-y;r=x*y;r=x/y;则 :最后的结果为?,5.2.2 程序分析:四则运算,例:输入年,月,计算该月有多少天?,main( ) int year,month,days; printf(“Enter year,几个CASE 执行相同的语句,跳出开关结构,/
13、* 处理“大”月 */,程序举例2,关系到如何判闰年?,case 4: case 6: case 9: case 11: days=30 ; break; case 2: if (year%4=0) ,判断是否为闰年,开关结构结束,/* 处理“小”月 */,/*处理“平”月*/,程序举例2 (续),2018/6/9,31,二、开关语句(基本形式,功能,要求,break 的作用,和default的作用),一、if语句的基本形式,分支形式,多分支形式,以及嵌套形式 else与if 的匹配,三、 需注意的问题: 1. 自增,自减作为if的条件时,边界条件的处理 2. if中的复合语句 ,选择语句小结
14、,2018/6/9,32,3 选择结构的嵌套,3 选择结构的嵌套,选择结构可以嵌套使用,如ifelse ifelse结构实际上就是if语句的嵌套形式。当需要处理问题的判断条件更为复杂时,可以用各种结构形式的if语句中相互镶嵌,可以是一个,也可以是多个if语句,形成相应的层层嵌套,但注意嵌套关系不能交叉。,2018/6/9,33,4 选择结构程序应用实例,4 选择结构程序应用实例应用实例流程图,输入两个整数,若它们的平方和大于100,则输出平方和百位以上的各数字,否则输出两个整数的和。,对于一个整数,取前几位(百位以上)用除法;取后几位(百位以下),用取模运算。,例如:当K=12345时,前三位
15、:K/100=123,后两位:K%100=45,2018/6/9,34,main( ) int a,b,c,d; printf(“Please input a,bn”); scanf(“%d,%d”,输入:11,10 输出:221,2输入:3,2 输出:a+b=5,应用实例程序,2018/6/9,35,选择结构程序应用实例,一. 使用if形式的if语句来实现选择结构,main ( ) float x,y; printf(input x=); scanf (%f,2018/6/9,36,二. 使用ifelse ifelse形式的if语句实现选择结构,main ( ) float x,y; pri
16、ntf(input x=); scanf (%f,2018/6/9,37,三. 使用嵌套的if语句实现选择结构,main ( ) float x,y; printf(input x=); scanf (%f,2018/6/9,38,5 本章小结,5 本章小结,条件分支结构是程序设计流程控制的重要组成部分,其中简单的if分支结构可以实现一路流程的分支;ifelse 两路分支结构可以实现二选一分支;ifelse ifelse 多路分支结构可以实现从多种情况条件中选择一路执行程序流程;条件运算符可以更加简洁地实现条件分支运算;而switch-case开关语句能够方便清晰地实现多选一的程序流程执行。各
17、种选择结构相互之间,根据逻辑上的需要可以分层嵌套,但是要注意层层匹配,不能交叉。,上机与作业二,第三章 选择结构的程序设计(必做题) x (-5=600, N=6%;编写程序,对输入的购买金额,输出顾客购买金额、实际支付的金额和返还的金额。,2018/6/9,40,E N D,交作业注意事项,1. 只收word文件,其它如txt文件或文件夹均退回重做。2. word文件名格式:如: 080107011001-测控1班-徐鹏霖(作业2).doc3. 作业内容,每道题都要有:题目、程序和运行结果。4.,学号-班号-姓名(作业号).doc,先将程序编写在稿纸上,第5周上机调试运行得到正确结果。,20
18、18/6/9,41,TC 上机补充说明,目前机房桌面上的TC快捷图标,其TC系统安装在D盘上, 路径为:D:TC21.OTC。因此需要修改TC环境菜单的Options 的下拉菜单的Directories项。在Directories之下修改三个项目的路径: C:TURBO2INCLUD 改为 D:TC21.OTCINCLUDE C:TURBO2LIB 改为 D:TC21.OTCLIB C:TURBO2 改为 D:TC21.OTC2. 注意保存自己的源程序文件并且带走。3. 可以方便使用C语言自身的图形命令,但不能使用汉字。,综合实例:判断输入整数的正负性和奇偶性。,main( ) int x; printf(“Enter a integer:”); /* 提示:输入一个整数 */ scanf(“%d”, /* 整数为零 */,