收藏 分享(赏)

选择结构程序设计(1).ppt

上传人:dreamzhangning 文档编号:3366314 上传时间:2018-10-19 格式:PPT 页数:58 大小:1.10MB
下载 相关 举报
选择结构程序设计(1).ppt_第1页
第1页 / 共58页
选择结构程序设计(1).ppt_第2页
第2页 / 共58页
选择结构程序设计(1).ppt_第3页
第3页 / 共58页
选择结构程序设计(1).ppt_第4页
第4页 / 共58页
选择结构程序设计(1).ppt_第5页
第5页 / 共58页
点击查看更多>>
资源描述

1、,第四章,选择结构程序设计,云南师范大学 陈娟,C 语言程序设计,回顾,程序的控制结构。任何复杂的算法都可以由顺序结构、选择(分支)结构和循环结构这三种基本结构组成。由此构成了程序的三种控制结构。语言程序的执行部分是由语句组成的。程序的功能也是由执行语句实现的。C语言中的语句可以分为控制语句、表达式语句、函数调用语句、复合语句及空语句五类。赋值语句是由赋值表达式加上一个分号“;”构成。,回顾,printf函数称为格式输出函数,一般形式:printf(“格式控制”,输出列表); scanf函数称为格式输入函数,一般形式:scanf(“格式控制“,地址列表); getchar( )函数是从终端输入

2、一个字符,它的返回值为一整型数,即是被输入字符的ASCII码。 putchar( )函数是向终端输出一个字符。,第四章:选择结构程序设计,学习的意义,在编制程序时,有时并不能保证程序一定执行某些指令,而是要根据一定的外部条件来判断哪些指令要执行。如我们去点菜,可能有这样的步骤:条件判断,学习目标,这里,我们并不知道具体操作时执行哪段指令,但菜谱给出了不同条件下的处理方式,计算机程序也是如此,可以根据不同的条件执行不同的代码,这就是选择结构。程序总是为解决某个实际问题而设计的,而问题往往包含多个方面,不同的情况需要有不同的处理,所以选择结构在我们的实际应用程序中可以说是无处不在,离开了选择结构很

3、多情况将无法处理,因此,正确掌握选择结构程序设计方法对于我们编写实际应用程序尤为重要。,有胡萝卜吗?,有黄瓜吗?,制作胡萝卜沙拉,有,多重条件判断,有,制作黄瓜沙拉,制作黄瓜沙拉,没有,没有,返回,关系运算符、逻辑运算符、条件运算符 选择结构的程序设计(if语句、switch语句) 选择结构程序设计举例,学习目标,理解选择结构的含义;掌握关系运算符、逻辑运算符和条件运算符的用法;记住关系运算符、逻辑运算符和条件运算符与其它运算符的优先级关系和结合性;掌握if、switch语句的使用方法。,学习内容,主要内容,4.1 关于算法 4.2 条件判断 4.3 用if语句实现选择结构 4.4 利用swi

4、tch语句实现多分支选择结构 4.5 程序举例,4.1 关于算法 4.1.1 算法的概念,一个程序由两部分构成:数据结构。程序中数据的类型和数据的组织形式 ,是对数据的描述。算法。操作步骤,是对操作的描述。简而言之,是解决问题的方法与步骤。,程序 = 数据结构 + 算法。,程序:算法的具体实现。,计算机算法分为两类:数值运算算法。目的是求数解值。非数值运算算法。应用较数值运算算法来说更广泛。,学习C语言,不仅要熟练掌握其语言本身的特点、语法规则等意外,更重要的就是掌握分析问题、解决问题的方法,就是锻炼分析、分解,最终归纳整理出算法的能力。,算法,计算长方形的面积,问题:,1.接收用户输入的长方

5、形长度和宽度两个值; 2.判断长度和宽度的值是否大于零; 3.如果大于零,将长度和宽度两个值相乘得到面积,否则显示输入错误; 4.显示面积。,算法,算法:解决问题的具体方法和步骤,流程图是算法的一种图形化表示方式。它直观、清晰。 它使用一组预定义的符号来说明如何执行特定任务。,开始/结束,处理,输入/输出,判断/分支,连接符,流程线,4.1 关于算法 4.1.2 怎样表示算法,算法的表示方法:自然语言表示。用流程图表示算法 。,流程图,(3)用N-S流程图表示算法,1973年美国学者提出了一种新型流程图:N-S流程图。 顺序结构:,选择结构:,循环结构:,(4)用伪代码表示算法,伪代码使用介于

6、自然语言和计算机语言之间的文字和符号来描述算法,例:if x 为正print xelse print -x,4.2 条件判断 4.2.1 关系运算和关系表达式,1.关系运算符及其优先次序,说明: 关系运算符的优先级低于算术运算符 关系运算符的优先级高于赋值运算符,4.2 条件判断 4.2.1 关系运算和关系表达式,2.关系表达式,用关系运算符连接起来的式子称为关系表达式。 关系表达式的一般形式为:,例:ab,a+bb+c,(a=3)(b=5),ab)(bc),注意: 关系表达式的值是一个逻辑值,即“真”或“假”。,例:关系表达式”ab”的值为“真”,表达式的值为1,已知:a = 1; b =

7、2; c = 3;问:d = a != c = a b c;的值?,答:d 的值为1。 等价于:d = (a != c) = (a b) c);,表达式 关系运算符 表达式,C语言中没有专用的逻辑值,1代表真,0代表假,4.2 条件判断 4.2.2 逻辑运算符和逻辑表达式,1.逻辑运算符及其优先次序,优先次序: !(非)&()|() 逻辑运算符中的“&”和“|”低于关系运算符, “!”高于算术运算符,逻辑运算真值表,4.2 条件判断 4.2.2 逻辑运算符和逻辑表达式,例:a&b 若a,b为真,则a&b为真。a|b 若a,b之一为真,则a|b为真。!a 若a为真,则!a为假。,4.2 条件判断

8、 4.2.2 逻辑运算符和逻辑表达式,2.逻辑表达式,例:设a=4,b=5: !a的值为0 a&b的值为1 a|b的值为1 !a|b的值为1 4&0|2的值为1,任何非零的数值被认作“真”,用逻辑运算符连接起来的式子称为逻辑表达式。 逻辑表达式的值应该是一个逻辑量“真”或“假”。,4.2 条件判断 4.2.2 逻辑运算符和逻辑表达式,例:53&84-!0 自左向右运算,1&0逻辑值为0,83逻辑值为0,4-1值为3,!0逻辑值为1,53逻辑值为1,表达式值为0,4.2 条件判断 4.2.2 逻辑运算符和逻辑表达式,在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。 (1)a&b&c 只有

9、a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。 (2)a|b|c 只要a为真,就不必判断b和c的值,只有a为假,才判断b。a和b都为假才判断c,例:(m=ab)&(n=cd)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“ab”的值 为0,因此m=0,而“n=cd”不被执行,因此n的值不是0而 仍保持原值1。,4.2 条件判断 4.2.2 逻辑运算符和逻辑表达式,答 (year%4=0&year%100!=0)|year%400=0案 值为真(1)是闰年,否则为非闰年。,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,(1)if (表达式) 语句

10、,例:if(xy) printf(“%d”,x);,if语句的三种基本形式,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,(2)if(表达式) 语句1else 语句2,例:if (xy) printf(“%d”,x);else printf(“%d”,y);,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,(3)if(表达式1)语句1else if(表达式2)语句2else if(表达式3)语句3else if(表达式m)语句melse 语句n,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,例:if (number500)cost=0.15;

11、else if(number300)cost=0.10;else if(number100)cost=0.075;else if(number50)cost=0.05;else cost=0;,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,说明: 3种形式的if语句中在if后面都有表达式,一般为逻辑表达式或关系表达式。 if语句中有内嵌语句,每个内嵌语句必须以分号结束。 else语句不能作为语句单独使用,它是if语句的一部分,必须与if配对使用。 在if和else后面可以只含有一个内嵌的操作语句,也可以由多个操作语句,此时用花括号将几个语句括起来成为一个复合语句。,4.3 用

12、if语句实现选择结构 4.3.1 if语句的3种形式,例4.1 输入两个实数,按代数值由小到大的顺序输出这两个数。 #include void main() float a,b,t; scanf(“%f,%f”,t=a;a=b;b=t; /*t为中间变量,临时存放空间*/设a=3.6 ,b=-3.2,分解如下: 1、t=a; a b t2、a=b; a b t3、b=t; a b t,3.6,-3.2,3.6,-3.2,-3.2,-3.2,3.6,3.6,3.6,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,例4.2 输入三个数a,b,c,要求按由小到大的顺序输出。,if a

13、b 将a和b对换 if ac 将a和c对换 if bc 将b和c对换,4.3 用if语句实现选择结构 4.3.1 if语句的3种形式,#include void main ( ) float a,b,c,t; scanf(“%f,%f,%f”, ,4.3 用if语句实现选择结构 4.3.2 if语句的嵌套,形式: if()if() 语句1else 语句2 elseif() 语句3else 语句4,内嵌if,在if语句中又包含一个或多个if语句称为if语句的嵌套。,4.3 用if语句实现选择结构 4.3.2 if语句的嵌套,匹配规则: Else总是与它上面的,最近的,统一复合语句中的, 未配对的

14、if语句配对。,例: if()if() 语句1elseif() 语句2else 语句3,例: if()if() 语句1 elseif() 语句2else 语句3,当if和else数目不同时,可以加花括号来确定配对关系。,4.3 用if语句实现选择结构 4.3.2 if语句的嵌套,-1 (x0)算法1: 算法2:输入x 输入x若x0,则y=1 若x=0,则y=0输出y 若x0,则y=1输出y,4.3 用if语句实现选择结构 4.3.2 if语句的嵌套,#include void main() int x,y;scanf(“%d”, ,程序段 ,程序1:if(x0)y=-1elseif(x=0)

15、y=0; else y=1;,程序2:if(x=0)if(x0) y=1;else y=0; else y=-1;,4.3 用if语句实现选择结构 4.3.2 if语句的嵌套,上例中的程序段有四个,请判断哪个是正确的?,程序3: y=-1; if(x!=0) if(x0) y=1; else y=0;,程序4: y=0; if(x=0)if(x0) y=1; else y=-1;,正 确,正 确,错 误,错 误,修改程序段,程序3: y=-1; if(x!=0) if(x0) y=1; else y=0;,程序3: y= -1; if(x!=0) if(x0) y=1; else y=0;,程

16、序4:y=0; if (x=0) if(x0) y=1; else y= -1;,程序4: y=0; if(x=0)if(x0) y=1; else y=-1;,?,?,条件表达式,考试是 否及格?,是,不是,真,表达式1,假,表达式2,条件表达式用来处理if语句中判别的表达式的值无论为“真”或“假” 都要向同一个变量赋值执行一个赋值语句的情况。,4.3 用if语句实现选择结构 4.3.3 条件运算符和条件表达式,if (num100) value=y; else value=n; ,使用“if-else”的等同代码,假设 num = 200,value = num 100,;,?,y,:,n

17、,200,value,=,y,4.3 用if语句实现选择结构 4.3.3 条件运算符和条件表达式,4.3 用if语句实现选择结构 4.3.3 条件运算符和条件表达式,使用场合:若在语句中,当被判别的表达式的值为“真”或“假” 时,都执行一个赋值语句且向同一个变量赋值时,可以用一个条件运算符来处理。,格式:,条件表达式用来处理语句中判别的表达式的值 无论为“真”或“假” 都要向同一个变量赋值执行一个 赋值语句的情况。,表达式?表达式表达式,功能:判断表达式1的值,如果成立就执行表达式2,否则就执行表达式3,4.3 用if语句实现选择结构 4.3.3 条件运算符和条件表达式,例:if () max

18、=;else max ;当ab时将a的值赋给max,当ab时将b的值赋给max, 可以看到无论ab是否满足,都是向同一个变量赋值。 可以用下面的条件运算符来处理:max ()?;,4.3 用if语句实现选择结构 4.3.3 条件运算符和条件表达式,说明: 条件运算符的执行顺序:先求解表达式,若为非(真),则求解表达式。若表达式的值为(假),则求解表达式。 条件运算符优先级高于赋值运算符 ,低于关系运算符和算术运算符。 条件运算符的结合方向为“自右至左”。 “表达式2”和“表达式3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。 条件表达式中,表达式的类型可以与表达式和表达式的类型不同。

19、,4.3 用if语句实现选择结构 4.3.3 条件运算符和条件表达式,例4.4输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。 #include void main ( ) char ch; scanf(“%c“, ,如果字符变量ch的值为大写字母,则条件表达式的值为(ch32),即相应的小写字母。如果ch的值不是大写字母,则条件表达式的值为ch ,即不进行转换。,printf(“这是迈克尔,身高 180cm,加利福尼亚第 12 大街”);,printf(“这是丹尼尔,身高 193cm,现居住地不明,1998 年 12 月 12 日在佛罗

20、里达被捕”);,printf(“这是吉姆,身高 175cm, 墨西哥州海鸥路弗罗拉公寓,于 2003 年 11 月 1 日在新泽西因抢银行被捕”);,default:,printf(“未发现匹配项。对不起!”);,停止搜索,停止搜索,停止搜索,停止搜索,警察记录,不是,这是吉姆,身高 175cm, 墨西哥州海鸥路弗罗拉公寓, 于 2003 年 11 月 1 日在新泽西因抢银行被捕,不是,是,4.4 利用switch语句实现多分支选择结构,4.4 利用switch语句实现多分支选择结构,switch语句的格式: switch (表达式) case 常量表达式:语句case 常量表达式:语句cas

21、e 常量表达式:语句default :语句,计算表达式的值,如果等于常量表达式1,switch-case 语句是多路判断语句 switch 语句计算条件表达式并对照多个常数值进行检查,如果等于常量表达式2,如果等于常量表达式n,如果没有找到匹配的值,4.4 利用switch语句实现多分支选择结构,当switch后面“表达式”的值,与某个case后面的“常量表达式”的值相同时,就执行该case后面的语句;当执行到break语句时,跳出switch语句,转向执行switch语句的下一条。 如果没有任何一个case后面的“常量表达式”的值,与“表达式”的值匹配,则执行default 后面的语句(组)

22、。然后,再执行switch语句的下一条。,4.4 利用switch语句实现多分支选择结构,例: 要求按照考试成绩的等级输出百分制分数段,用 switch语句实现: switch(grade) case printf(85100);case printf(7084);case printf(6069);case printf(60);default printf ( error);,说明 switch后面的“表达式”,可以是int、char和枚举型中的一种。 每个case后面“常量表达式”的值,必须各不相同,否则会出现相互矛盾的现象(即对表达式的同一值,有两种或两种以上的执行方案)。 case后

23、面的常量表达式仅起语句标号作用,并不进行条件判断。系统一旦找到入口标号,就从此标号开始执行,不再进行标号判断,所以必须加上break语句,以便结束switch语句。,4.4 利用switch语句实现多分支选择结构,按照考试成绩的等级打印出百分制分数段,switch(grade) case A : printf(“ 85100n “);break; case B : printf(“ 7084n “); break; case C : printf(“ 6069n “); break; case D : printf(“ 60n “); break; default : printf(“ err

24、orn “); ,如: case A:case B:case C: printf(“score60n”);break;,续说明,case后可包含多个可执行语句,且不必加 switch可嵌套 多个case可共用一组执行语句,4.5 程序举例,例4.5写程序,判断某一年是否闰年。用下图来表示判断闰年的算法。,4.5 程序举例,#include void main() int year, leap; scanf(“%d“,if (year%4!=0) leap=0; else if( year % 100 !=0 )leap= 1;else if ( year % 400 !=0 ) leap=0;

25、else leap= 1;,运行情况: is not a leap year. is a leap year.,4.5 程序举例,例4.6 求2方程的解。,基本的算法: ,不是二次方程。 b2,有两个相等实根。 b2,有两个不等实根。 b2,有两个共轭复根。,4.5 程序举例,#include #include void main ( ) float a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f”,绝对值,/*判断a是否为0*/,disc绝对值为0,fabs,4.5 程序举例,else if(disc1e-6) x1=(-b+sqrt(

26、disc)/(2*a); x2=(-b-sqrt(disc)/(2*a); printf(“has distinct real roots:%8.4f and %8.4fn”,x1,x2); else realpart=-b/(2*a); imagpart=sqrt(-disc)/(2*a); printf(“ has complex rootsn”); printf(“%8.4f+%8.4fin”,realpart,imagpart); printf(“%8.4f-%8.4fin”,realpart,imagpart); ,运行情况: please enter a,b,c:“ , The e

27、quation has two equal roots : . 0000 please enter a,b,c:“ ,2 The equation has complex roots : .0000 . 0000 .0000 . 0000 please enter a,b,c:“ 2,6,1 The equation has distinct real roots: -0.1771 and -2.8229,4.5 程序举例,例4.7 运输公司对用户计算运费。 路程()越远,每公里运费越低。标准如下:250 没有折扣250 500 折扣500 1000 折扣1000 2000 折扣2000 30

28、00 10折扣3000 15折扣 设每公里每吨货物的基本运费为,货物重为, 距离为,折扣为,则总运费的计算公式为:*(),4.5 程序举例,分析折扣变化的规律性: 折扣的“变化点”都是250的倍数 在横轴上加一种坐标,c的值为s/250。 c代表250的倍数。 , 无折扣; ,折扣; ,; ,; 12,;12,。,4.5 程序举例(续),#include void main ( ) int c,s; float p,w,d,f; scanf(“%f,%f,%d”,运行情况: please enter price,weight,distance:23,345.7,136.45 freight=1081349.64 ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报