选择结构的程序设计.ppt_第1页
选择结构的程序设计.ppt_第2页
选择结构的程序设计.ppt_第3页
选择结构的程序设计.ppt_第4页
选择结构的程序设计.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C语言程序设计,第五章 选择结构的程序设计,主要内容,1. 关于条件的表示 2. if 条件分支结构 3. 选择结构的嵌套 4. switch-case开关语句 5. 程序举例,引入:,在现实生活中,需要进行判断和选择的情况是很多的 处理这些问题,关键在于进行条件判断 由于程序处理问题的需要,在大多数程序中都会包含选择结构,需要在进行下一个操作之前先进行条件判断,5.1 关于条件的表示,进行逻辑判断时,C语言中提供了三种运算: 关系运算、逻辑运算、条件运算,三种运算的结果: 均为逻辑值:即为“真”或“假”。 对于参与运算的逻辑型数据,进行逻辑判断时 将非0视为“真”; 0视为“假”。,关系运算符 关系运算符共有6种(双目运算符 ) 大于 = 大于等于 小于 = 小于等于 = 等于 != 不等于,一、关系运算符和关系表达式,优先级: ,=, , =同级(高); != ,=同级(低) 结合性: 从左到右,算术运算符运算级别高于关系运算符。 ab+c a(b+c),关系运算的结果应该为逻辑型“真”或“假”,用整型1表示“真”,用整型0表示“假”,即其结果为逻辑值。,关系运算实例 关系表达式 75 的值是 1,57 的值是 0。,已知: int a=13, b=2, c=1; ab ab)=c ab=c a-b=c,成立, 结果为 1 不成立,结果为 0 成立, 结果为 1 不成立,结果为 0 结果为 1 与上面等价,结果为 1 等价于(a-b)=1,结果为 0,例 若a=0; b=0.5; x=0.3; 则 a=x=b的值为,0,例 5278在C中是允许的, 值为,0,例 int i=1, j=7,a; a=i+(j%4!=0); 则a=,2,例 a0 结果为 A100 结果为,1,0,关系运算注意(1),例 注意区分“=”与“= =” int a=0,b=1; if(a=b) printf(“a equal to b”); else printf(“a not equal to b”);,例 应避免对实数作相等或不等的判断 如 1.0/3.0*3.0=1.0 结果为 可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,关系运算注意(2),if(a=b),逻辑运算符 & 逻辑与 (双目) | 逻辑或 (双目) ! 逻辑非 (单目) 其中, !运算符优先级最高, &次之,|最低。,二、逻辑运算符和逻辑表达式,结合方向:,! :从右向左 & :从左向右 | :从左向右,对于&运算符,见假即假; 对于|运算符,见真即真。,C语言中, 运算量: 0表示“假”, 非0表示“真”, 运算结果: 0表示“假”, 1表示“真”,逻辑运算符和表达式(1),优先级:,结合方向:,例 a=4;b=5; !a a&b a|b !a|b 4&0|2 53&2|84-!0 c&d,值为1,值为0,值为1,值为1,值为1,值为1,/(53)&2|(8(4-(!0) 值为1,逻辑运算符和表达式(2),短路特性:逻辑表达式求解时,并非所有的逻辑运算符都被执行,只是在必须执行下一个逻辑运算符才能求出表达式的解时,才执行该运算符。,例 a (m=ab)&(n=cd),/结果m=0,n=1,逻辑运算符和表达式(3),条件运算符(三目) ? : 条件表达式: 表达式1 ? 表达式2 : 表达式3,三、条件运算符和条件表达式,功能: 如果表达式1成立(表达式1值为非0),则执行表达式2;否则(表达式1不成立),执行表达式3。,例: max= (ab) ? a : b; 求变量a与b的最大值 min = (ab) ? a : b; 求变量a与b的最小值,条件运算符的运算方向: 在一个表达式内为“自左向右”; 多个表达式连用结合性“自右向左”。,例: int x=1,y=2,z=3,w=4; printf(“%dn”,yx?w:z);,条件表达式的使用 #include void main() char ch; scanf(“%c“, ,5.2 if条件分支结构,if语句的三种基本形式 (1)简单if分支结构 if(表达式) 语句; 例: if(xy) printf(“%d”,x);,表达式必须用括号括起来。,例5.1 输入两个实数,按代数值由小到大的顺序输出这两个数。 #include void main() float a,b,t; scanf(“%f,%f”,y,5.2 if条件分支结构,例5.2 输入三个数a,b,c,要求按由小到大的顺序输出。,if ab 将a和b对换 if ac 将a和c对换 if bc 将b和c对换,5.2 if条件分支结构,#include void main ( ) float a,b,c,t; scanf(“%f,%f,%f”, ,5.2 if条件分支结构,(2) ifelse两路分支结构 if(表达式) 语句1; else 语句2;,例:在屏幕上显示输出两个数中的较大者。,if (xy) printf(“%d”,x); else printf(“%d”,y);,5.2 if条件分支结构,(3) ifelse ifelse多路分支结构 if(表达式1)语句1; else if(表达式2)语句2; else if(表达式3)语句3; else if(表达式m)语句m; else 语句n;,5.2 if条件分支结构,例:从键盘输入一个字符,对输入的字符进行分类,分为:控制、数字、大写字母、小写字母和其他字符等五类。 分析: ASCII码表中的前32个 (ASCII码为 031) 字符为控制字符; 09为数字; AZ为大写字母; az为小写字母; 其它。不是以上 4 类字符的全部字符。,#include void main ( ) char c; printf (“Enter a character:“); c = getchar( ); if (c=0 ,注意:如何判断数字、大写字母和小写字母,说明: (1)3种形式的if语句中在if后面都有表达式, 一般为逻辑表达式或关系表达式。,(2)第二、第三种形式的if语句中,在每个 else前面有一个分号,整个语句结束处有一 个分号。,(3)在if和else后面可以只含有一个内嵌的操 作语句,也可以有多个操作语句,此时用大 括号将几个语句括起来成为一个复合语句。,5.2 if条件分支结构,5.3 选择结构的嵌套,if语句的嵌套:在if语句中又包含一个或多个if语句称为if语句的嵌套。,内嵌if,形式: if() if() 语句1; else 语句2; else if() 语句3; else 语句4;,输入变量x, 计算y: x+1 x=3,if (x2) if(x1) y = x+1; else y = x+2; else if(x3) y = x+3; else y = x+4;,匹配规则: else总是与它上面的、最近的、同一复合语句中的、未配 对的if语句配对。,例: if() if() 语句1; else if() 语句2; else 语句3;,例: if() if() 语句1; else if() 语句2; else 语句3;,当if和else数目不同时,可以加大括号来确定配对关系。,5.3 选择结构的嵌套,-1 (x0) 一个x值,输出y值。 算法1: 算法2: 输入x 输入x 若x0,则y=1 若x=0,则y=0 输出y 若x0,则y=1 输出y,5.3 选择结构的嵌套,#include void main() int x,y; scanf(“%d”, ,5.3 选择结构的嵌套,上例中的程序段有四个,请判断哪个是正确的? 程序1: 程序2: if(x=0) y=-1; if(x0) y=1; else else y=0; if(x=0) y=0; else y=-1; else y=1; 程序3: 程序4: y=-1; y=0; if(x!=0) if(x=0) if(x0) y=1; if(x0) y=1; else y=0; else y=-1;,正 确,正 确,5.3 选择结构的嵌套,5.4 switch-case开关语句(多分支选择语句),switch语句的格式: switch(表达式) case 常量表达式:语句; case 常量表达式:语句; case 常量表达式:语句; default: 语句; ,表达式的值为整型、字符型或枚举型,switch 后面的表达式的各个不同的取值,5.4 switch-case开关语句(多分支选择语句),例:要求按照考试成绩的等级输出百分制分数段,用 switch语句实现: switch(grade) case A:printf(“85100n“); case B:printf( “7084n“); case C:printf( “6069n“); case D:printf( “60n“ ); default:printf( “errorn“); ,5.4 switch-case开关语句(多分支选择语句),switch语句格式 switch (表达式) case 常量1: 语句序列1; break; case 常量2: 语句序列2; break; default: 语句序列n+1; ,5.4 switch-case开关语句(多分支选择语句),5.4 switch-case开关语句(多分支选择语句),说明: switch后面括弧内的“表达式”, ANSI标准允许它为任何类型。,(2) 当表达式的值与某一个case后面的常量表达式的值相 等时,就执行此case后面的语句,若所有的case 中的常量表达式的值都没有与表达式的值匹配的,就执行default后面的语句。,(3) 每一个case的常量表达式的值必须互不相同,否则就 会出现互相矛盾的现象(对表达式的同一个值,有两种或 多种执行方案)。,5.4 switch-case开关语句(多分支选择语句),(4) 各个case的出现次序不影响执行结果(有break的情况)。 例如,可以先出现“case :”,然后是“case :”。,(5) 执行完一个case后面的语句后,流程控制转移到下一 个case继续执行(无break的情况)。“case常量表达式”只是起语句标号作用,并不是在该处进行条件判断。在执行switch语句时,根据switch后面表达式的值找到匹配的入口标号,就从此标号开始执行下去,不再进行判断。 在执行一个case分支后,可以用一个break语句来终止switch语句的执行。,(6) 多个case可以共用一组执行语句。,5.4 switch-case开关语句(多分支选择语句),5.5 程序举例,例1 运输公司对用户计算运费。 路程()越远,每公里运费越低。标准如下: 250 没有折扣 250500 折扣 5001000 折扣 10002000 折扣 20003000 10折扣 3000 15折扣 设每公里每吨货物的基本运费为,货物重为,距离为, 折扣为,则总运费的计算公式为: *(),分析折扣变化的规律性: 折扣的“变化点”都是的倍数 设一变量,c的值为s/250。c代表的倍数。 ,无折扣; ,折扣; ,; ,; ,; ,。,5.5 程序举例,#include void main ( ) int c,s; float p,w,d,f; scanf(“%f,%f,%d“,5.5 程序举例,1.switch语句与if语句不同,仅能判断一种关系:是否恒等。,2.switch语句中case子句的常量可以是整型常量、字符型常量、枚举型数据,或是整型常量表达式,不允许是变量。,3.在同一个switch中,case子句的常量不能相同。在嵌套的switch语句中,不同层次的switch之间,可有相同的常量。,switch语句 使用注意事项,4.case 和 default 子句只能在switch语句中使用,且 case和 default 只起标号作用,可出现在switch中的任何位置。,5.case 和 default 子句后面的语句序列允许由多个可执行语句组成,且不必用“ ”括起来,也可以为空语句。,switch语句 使用注意事项,switch语句的变形 1.default子句可以省略。 2.case 和 default 子句后面的语句可以为空语句。 3.switch语句中可省略break语句,但省略后会改变流程。,例 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d”,a,b); ,运行结果:a=2,b=1,嵌套的 switch语句,例55 求x2方程的解。 基本的算法: ,不是二次方程。 b2,有两个相等实根。 b2 ,有两个不等实根。 b2 ,有两个共轭复根。,5.5 程序举例,#include #include void main ( ) float a,b,c,disc,x1,x2,realpart,imagpart; scanf(“%f,%f,%f“,5.5 程序举例,else if(disc1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论