C语言程序设计PPT教学课件-第四章 选择结构.ppt_第1页
C语言程序设计PPT教学课件-第四章 选择结构.ppt_第2页
C语言程序设计PPT教学课件-第四章 选择结构.ppt_第3页
C语言程序设计PPT教学课件-第四章 选择结构.ppt_第4页
C语言程序设计PPT教学课件-第四章 选择结构.ppt_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

第4章 选择结构,学习目标: 1)会运用关系运算 2)逻辑运算 3)if语句,4.1 关系运算和逻辑运算,4.1.1 语言的逻辑值,关系表达式,逻辑表达式,运算,逻辑值(),在语言中用“”表示真;“”表示假,c语言提供了六种关系运算符: (大于) = (大于或等于) = = (等于) != (不等于) 关系运算符优先级低于算术运算符。,优先级相同(低),优先级相同(高),4.1.2 关系运算符和关系表达式,比较运算,关系运算,关系运算符优先级高于赋值运算符,如下图:,ab!=c (ab)!=c,a= =bc a= =(bc),a=bc a=(bc),例如: ca+b c(a+b),4.1.2.2 关系表达式及关系表达式的值,关系表达式的结果值规定为1或0. 1 结果为真 (成立) 0 结果为假 (不成立),定义: 用关系运算符将两个表达式 (算术、关系、逻辑、赋值、字 符等表达式)连接起来的式子。,如:a=6、b=12、c=2. ab 值为“” ; a+bb 值为“” (a=3)(b=5) 值为“”; a b 值为“(详见附录),思考一下:(ab)(bc) 的值为多少?,如: 当a=3, b=2, c=1时,(ab)= =c 成立 1,b+ca 不成立 0,d=ab 则ab值为1, 所以d=1.,f=abc ab为1, abc为0,所以f=0.,关系运算为左结合,4.1.3 逻辑运算符和逻辑运算表达式(p36),逻辑运算符: & (与)、(或) 、! (非),其意义见下表:,a&b 当a, b均为1时,才为1,a b 当a, b中有一个为1时,即为1,!a 当a为1, !a为0,反之为1.,由此看到: 和&为双目运算符. !为单目运算符。,优先级定义:,2. &和低于关系运算符,!高于算术运算符。,1. !(非)优先于&(与),&优先于 (或)。,即: !& ,例: !a&b xy & c (!a)&b (xy)&c (!a)&b) (xy)&c),高 低,1. 逻辑表达式的值与关系表达式值一样,真为1,假为0。,例: a=4 则 !a 值为0.此处只要a 0,为真.则!a值为0., a=4, b=5 a&b为1,前面已定义了逻辑表达式,以下看一看逻辑表达式的值及具体的运算。, 4&0 | 2 为1.,总之,在逻辑运算中,非0值参加逻辑运算时 被看成1处理., a=4, b=5 a | b为1, a=4, b=5 !a | b为1,2. 一个逻辑表达式中的逻辑运算符并不是一定全部执行.,一个实际的例子:判断年号是否为闰年。,如: a&b&c. 则当a=0(假)时, b,c不需判断。当a=1,b=0,则不需判c.,又如: a |b |c. 当a=1时,b, c均不必判别。,闰年的定义:, 能被4整除且又能被400整除。, 年号能被4整除但不能被100整除。,当(year%4!=0) (year%100= =0& year%400!=0) 为1时, year为非闰年。,设用变量year表示年号,则当(year%4= =0& year% 100 !=0)|year%400= =0) 为1时,year为闰年,否则为非闰年。如果要判别非闰年可 在上述表达式前加非(!)运算符.,即: 当!( (year%4= =0 & year%100!=0) |year% 400= = 0) 为1时,year为非闰年。,或者:,4.2 if 语句条件判断,4.2.1 if语句的三种形式,功能: 当表达式值非0时, 执行语句a,否则不执行语句a.,例如: if (xy) printf(“ %d“, x),形式1 if(表达式)语句a,其流程图:,!,#include main() float a, b, t; scanf(“%f, %f“, ,例子: 输入两个实数,按代数值由小到大次序输出这两个数。,3.6, 3.2 3.20, 3.60,运行情况如下:,形式2: if(表达式)语句a else 语句b,功能: 表达式为非0,执行语句a 表达式为0,执行语句b,例: if(xy) printf(“%d“, x); else printf(“ %d“, y);,!,例子1: 输入两个数,分别赋给x和y,输出其中一个最大的数。 #include main() int x,y; scanf(“%d%d“, ,例子2:从键盘输入一个数,判断它是否能被7整除。若能被7整除,打印yes,否则打印no。 #include main() int i ; printf (“input i=“); scanf(“%d“, ,形式3 if(表达式1)语句1,else if (表达式2) 语句2,else if (表达式3) 语句3, ,else if(表达式n) 语句n,else 语句n+1,流程:,表达1,表达2,表达3,表达n,语句1,语句2,语句3,语句n,语句n+1, 0,= 0,= 0, 0, 0, 0,= 0,= 0,如: if (3) printf (“o.k“); if (a),1. 表达式可以是逻辑、关系,甚至是算术表达式。,2. 上述形式中的语句必须以分号结束,3. 上述形式中的语句可以是由 括起来的复合语句。 此时,在 外可以不用分号.,注意的问题:,例4.2 输入三个数,按从小到大的顺序输出。,# include main ( ) float a, b, c,t; scanf(“%f,%f,%f“, ,运行情况如下: 3,7,1 1.00, 3.00, 7.00,例4.5 编写程序实现功能:根据输入的学生成绩给出相应 的等级,大于或等于90分以上的等级为a,60分以下的等级为 e,其余每10分为一个等级 。 #include main() int i; printf(“enter i: ”); scanf (“%d”, ,42.2 if语句的嵌套(p40),if (表达式1),内嵌if,else,内嵌if,注意: else与最近的if 配对.,一般形式:,在上述形式的if语句中, 又可以是if语句称为嵌套。,if (表达式2) 语句1,if (表达式3) 语句3,else 语句2,else 语句4,例如: if ( ),if ( ) 语句2 else 语句3,if ( ) if ( ) 语句1 else ,所以:必要时加 .,if ( ) 语句1 else,例子: 有一函数,y=,1 (x0),编一程序,输入一个x值,输出y值。,有以下几种写法,请判断哪些是正确的?,程序1: main ( ) int x, y; scanf(“%d“, ,程序2:将上面程序的if语句改为: if (x=0) if (x0) y=1; else y=0; else y= 1;,程序3: 将上述if语句改为: 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;,4.3 条件运算符,max=ab? a:b; 当ab为真时, max a, 否则maxb,c语言提供了一个简单的条件赋值语句或条件 表达式。 格式: 表达式1?表达式2: 表达式3 功能:先判表达式1, 若非0,则值为表达式2的 值,否则为表达式3的值。,注: 1. 条件运算符优先于赋值运算符. 例: max=(ab? a:b)可去掉( ) 即:max=ab?a:b,2. 条件运算符低于关系运算符和算术运算符。 例: max=ab? a:b+1 max= ab? a:(b+1) 不是:max=(ab? a:b)+1,3. 条件运算符结合性为从右至左. 如: ab? a:cd ? c:d 相当于 ab? a:(cd? c:d),4. 条件表达式不能取代一般的if语句,只有当if 的两 个分支为给同一变量赋值时才可替代if.,if (ab) printf(“%d“, a); else printf (“%d“, b);,由于printf.不是表达式,故不可用条件表达式,但可为: printf(“%d“, ab? a:b);,5. 表达式1、表达式2、表达式3可类型不同。,main ( ) char ch; scanf (“%c“, ,例5.4 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,运行结果如下: a a,4.4 switch 语句(p43),引入: 当某一表达式有n个取值,每一取值执行一语句,则如果用内嵌if十分繁锁,而用switch简单。 格式: switch(表达式) case 常量表达式1: 语句1 case 常量表达式2: 语句2 case 常量表达式n: 语句n default : 语句n+1 ,例如: 根据成绩等级打印百分数段。,#include main() int grade; printf(“enter a mark:“); scanf(“%d“, ,功能:,根据表达式的取值, 判断其与哪一个常量表达 式相等。如是表达式i, 则自语句i开始执行,直到语句n+1止。 若与所有常量表达式值不相等,则从default后的语句开始执行。 以上存在一个问题: 没有完全起到分支作用。 解决办法: 增加break语句, 使之跳出switch结构。,switch (表达式) case 常表1: 语句1; break; case 常表2: 语句2; break; case 常表n: 语句n; break; default: 语句n+1; ,请大家修改以上例子,使之正确。,一般格式改为:,注: 1. 常表值必须互不相等,否则二异性。,2. case顺序无关紧要。,3. 不一定非用break不可,有时几种情况合并执行一组语句。,switch (grade) case a : case b: case c: printf(“60n“); break; case d: printf(“60n“); break; ,例子: 写一程序,输入年号,判断是否为闰年。 算法: 根据闰年的判断条件 当年号能被4整除但不能被100整除时,它为闰年。 当年号能被100整除又能被400整除时,它为闰年。,设用变量year表示年号,leap为待置值变量,当year为闰年:leap1, 否则leap0.,2. 流程图:,3. 程序:,main ( ) int year, leap; scanf(“%d“, ,if (leap) printf(“%d is“, year); else printf(“%d is not“, year); pri

温馨提示

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

评论

0/150

提交评论