1、2018/6/9,1,第四章 选择型程序设计,2018/6/9,2,目录,1 C语言程序基本结构2 if语句 3 switch语句 4 程序举例,第四章 选择型程序设计,2018/6/9,3,C程序,源文件1源文件2源文件3.源文件n,预处理命令函数1函数2.函数n,说明语句执行语句,main(),最小编译单位,最小功能单位,必须具有一个主函数,1 C语言程序基本结构,1 C语言程序基本结构 3.1.1 C语句概述,2018/6/9,4, 一个C程序由若干函数组成 程序中有且仅有一个主函数main() 程序的运行从主函数开始 函数由函数名和函数体组成 函数体由说明语句和执行语句组成 C中执行语
2、句有四类,说明语句表达式语句复合语句控制语句空 语 句,C程序的特点,1 C语言程序基本结构,2018/6/9,5,用运算符将运算对象连接形成的式子就是表达式。,表达式构成的规则如下:,1. 单个的常量、变量、函数调用都是表达式。 “前缀单目运算符 表达式”是表达式。 “表达式 后缀单目运算符”是表达式。 “表达式 双目运算符 表达式”是表达式。5. “表达式 ?表达式 :表达式”是表达式。6. 有限次使用上述规则获得的运算式也是表达式。,3.1.2 表达式语句一. 表达式,表达式的数据类型按其值可分为整型、实型和逻辑型。,1 C语言程序基本结构,表达式值的数据类型称为表达式的数据类型。,20
3、18/6/9,6,表达式加分号就构成了表达式语句。,赋值语句,例如: x = 5 ;,赋值表达式,分号,+,=,函数调用表达式:printf(“abcd”) 函数调用语句: printf(“abcd”) ;,算术表达式: x+y 算术表达式语句: x+y ;,合法的语句,二 表达式语句,1 C语言程序基本结构,注意:条件中不能含赋值符号,例:若a的值等于100,则成绩为优秀,if(a=100).,赋值运算,关系运算,格式:变量=表达式;,功能:将表达式的值赋给左边的变量(存入该内存单元中),说明:左边是以变量名为标识的内存单元。当右边类型与变量类型不符时,先进行类型转换,再赋值。左边必须是变量
4、,不允许是常量或表达式。,k=1 ;k+1=1;1=k ;,三. 赋值语句,if(a=100).,2018/6/9,8,结构化程序有三种基本结构,顺序结构,选择结构,循环结构,语句执行的顺序与程序书写的顺序一致,条件成立,执行A;否则,执行B,重复执行某组动作,结构,条件成立时,反复执行A;条件不成立,停止,重复执行动作A,当某一条件成立时,停止,3.1.3 C程序的基本结构,2018/6/9,9,main( ) int a,b,c; a=5; b=6; c=a+b; printf(“%d”,c);,程序执行的顺序和语句书写的顺序一致,有一个数据入口一个数据出口,基本结构,一、顺序结构,201
5、8/6/9,10,条件,A,B,Y,N,当条件满足时,执行语句A;否则,执行语句B,有一个数据入口一个数据出口,键盘输入一个整数,判断其正负,例,int a;,a,a0,if(a0) printf(“a为正数”);else printf(“a为负数”);,语句A,语句B,打印a的值,二、选择结构,2018/6/9,11,Y,N,求1100的自然数之和,X=100,x=1S=0,语句,若条件满足,重复执行语句内容;否则,退出循环,条件,一个数据入口一个数据出口,s=s+x; x=x+1;,语句,S,条件不满足,不执行任何语句,三、循环结构 1. 当型循环,2018/6/9,12,语句,N,Y,求
6、1+2+3+n 1000,n=1s=0,语句,不论条件是否满足,语句至少执行一次,2. 直到型循环,s=1+2+3+ n=? (sa) c=a+b; printf(“%d”,c); else ; ,控制语句,表达式语句,复合语句,函数调用语句,空语句,3.1.6 空语句,2018/6/9,16,2 if 语句,2 if 语句-选择结构程序设计 3.2.1 条件语句,if语句构成的条件结构是C的三种基本结构之一,用来确定给定的条件是否满足,所含条件一般是关系表达式或逻辑表达式。,根据学生分数判断是否及格?根据学生分数如何进行分级?,提出问题,自然语言:如果 那么 否则C语言:分支语句,如何解决?
7、,2018/6/9,17,本节重点,if语句的基本格式带分支的条件语句 多分支的条件语句if结构的嵌套,1. if语句的基本格式: if (表达式) 语句 功能:判断表达式的值,若为非 0,执行语句;否则,跳过语句继续执行下一条语句。,输出不及格的成绩main( ) int a; scanf(“%d”, ,一、 if 语句的三种基本形式,2018/6/9,18,格式: if(表达式) 语句1 else 语句2,main( ) int a; scanf(“%d”, ,N,条件,Y,语句2,语句1,功能:判断表达式的值,若为非0,执行语句1;否则执行语句 2,2. 带分支的条件语句,2018/6/
8、9,19,求a 和 b 两数中较大的一个数。,main( ) int a,b,max; scanf(%d , %d, ,maxa,将b赋给max,程序举例格式一,2018/6/9,20,main( ) int a,b,max; scanf(%d, %d,求a和b两数中较大的一个数。,ab?,max=b,Y,N,max=a,格式二,程序举例格式二,2018/6/9,21,多分支,格式 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,
9、3. 多分支的 if 结构,从键盘输入一个整数a,按其值的大小,输出a小于10;a大于10小于100 ;a大于100小于1000或a大于1000。,程序举例,main() int a; scanf(“%d”, ,2018/6/9,23,5. 当 if 后有多个执行语句时,必须用 将多个语句括起来,构成一个复合语句,而 之外不必有分号。,多分支,1. if语句中进行条件判断的“表达式”必须用( )括起来,且不可省略。,2. 条件后面不加分号。,3. 语句之后有分号。,4. else 不是语句,不能单独使用。,有关 if 语句的说明,多分支,main( ) int year; float mone
10、y,rate,total; /* 本金,月利率,本利合计*/ printf(Input money and year =?); scanf(%f,%d, ,程序举例:计算本利合计,2018/6/9,25,格式: if(表达式) if( 表达式1) 语句11 else 语句12 else if (表达式2) 语句21 else 语句22,在一个if结构中,包含一个或多个if结构。,判断表达式的值,若为非0,再判断表达式1的值,非0执行语句11,否则执行语句12; 若表达式的值为0,再判断表达式2的值,非0执行语句21,否则执行语句22。,功能:,二、 if 语句的嵌套,2018/6/9,26,i
11、f语句的嵌套流程图,2018/6/9,27,在if语句的“语句1”或“语句2”中又包含着if语句。,main( ) int x, y; printf (Enter integer X and Y:); scanf (%d,%d, ,表达式,if与else之间的匹配,else总是与同它最近的 if相匹配。,表达式1,注意,程序举例:判断两数的关系,嵌套,else,if,if,else,else,else,else,if,if,if,程序举例,课堂作业,2018/6/9,29,格式:switch(表达式) case 常量表达式1:语句1 case 常量表达式2:语句2 . case 常量表达式n:
12、语句n default: 语句n+1 ,多重分支的条件语句 switch,3 switch 语句,3 switch语句 (多分支结构程序设计) 3.3.1 开关语句,例题:按照考试成绩输出百分制分数段,main( ) char grade; scanf (“%c”, ,输入字母 B,输出:70-84 60-69 60 Error,?,printf(“70-84n”);,printf(“70-84n”); break;,程序举例,2018/6/9,31,2 case 后的每个常量表达式必须各不相同。,说明:,1 括号内的表达式可以是 int ,char。,3 case 和 default的位置是
13、任意的。,4 每一个case之后应有一个 以跳出 switch( ) 结构。,break(间断语句);,5 每个case 之后的执行语句可多于一个,但不必加 。,6 允许几种case情况下执行相同的语句,不必每个都写case 。,注意事项,2018/6/9,32,语句1,=常量1?,计算表达式的值,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
14、语句,会顺序执行下面的r=x-y;r=x*y;r=x/y;则 :最后的结果为?,3.3.2 程序分析:四则运算,例:输入年,月,计算该月有多少天?,main( ) int year,month,days; printf(“Enter year,几个CASE 执行相同的语句,跳出开关结构,/* 处理“大”月 */,程序举例2,关系到如何判闰年?,case 4: case 6: case 9: case 11: days=30 ; break; case 2: if (year%4=0) ,判断是否为闰年,开关结构结束,/* 处理“小”月 */,/*处理“平”月*/,程序举例2 (续),2018/
15、6/9,36,二、开关语句(基本形式,功能,要求,break 的作用,和default的作用),一、if语句的基本形式,分支形式,多分支形式,以及嵌套形式 else与if 的匹配,三、 需注意的问题: 1. 自增,自减作为if的条件时,边界条件的处理 2. if中的复合语句 ,选择语句小结,2018/6/9,37,4 应用实例,4 应用实例应用实例流程图,输入两个整数,若它们的平方和大于100,则输出平方和百位以上的各数字,否则输出两个整数的和。,对于一个整数,取前几位(百位以上)用除法;取后几位(百位以下),用取模运算。,例如:当K=12345时,前三位:K/100=123,后两位:K%10
16、0=45,2018/6/9,38,main( ) int a,b,c,d; printf(“Please input a,bn”); scanf(“%d,%d”,输入:11,10 输出:221,2输入:3,2 输出:a+b=5,应用实例程序,上机与作业二,第三章 选择结构的程序设计(必做题) x (-5=600, N=6%;编写程序,对输入的购买金额,输出顾客购买金额、实际支付的金额和返还的金额。,2018/6/9,40,E N D,交作业注意事项,1. 只收word文件,其它如txt文件或文件夹均退回重做。2. word文件名格式:如: 080201011001-计算机1班-陈德梁(作业1)
17、.doc3. 作业内容,每道题都要有:题目、程序和运行结果。4.,学号-班号-姓名(作业号).doc,先将程序编写在稿纸上,第9周上机调试运行得到正确结果。,2018/6/9,41,TC 上机介绍,目前(2008.9)D501机房桌面上的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”, /* 整数为零 */,