c语言程序设计第四章.ppt_第1页
c语言程序设计第四章.ppt_第2页
c语言程序设计第四章.ppt_第3页
c语言程序设计第四章.ppt_第4页
c语言程序设计第四章.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第四章 选择结构,4.1 关系运算和逻辑运算,选择结构是程序基本控制结构之一。 C语言中的选择结构包括三种条件语句: if 语句 switch语句 条件表达式语句 4.1.1 C语言中的逻辑值 判断逻辑值:非0值为真,0值为假。 表达逻辑值:“1”为真,“0”为假。,.1.2 关系运算符和关系表达式 . 六个关系运算符,算术运算 关系运算 赋值运算,2关系表达式 关系表达式的值只有两个:为真时值为1,为假值为0。 例:,4.1.3 逻辑运算符和逻辑表达式,三种: & (与), (或) ! (非),其意义见真值表,4.1.3.1 C语言中的逻 辑运算符,a&b 当a, b均为1时,才为1,a b 当a, b中有一个为1时,才为1,!a 当a为1, !a为0,反之为1.,由此看到: 和&为双目运算符. !为单目运算符。,逻辑运算符运算规则: 对象值为0,结果为1。,优先级定义:,2. &和低于关系运算符。!高于算术运算符,1. !(非)优先于&(与).&优先于,即: !& ,例: !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,系统优化: exp1|exp2 中,若exp1为1,不再计算exp2,直接得1。 exp1&exp2中,若exp1为0,不再计算exp2,直接得0。,2. 一个逻辑表达式中的逻辑运算符并不是一定全部执行.,如: a&b&c. 则当a=0(假)时, b,c不需判断。当a=1,b=0,则不需判c.,又如: a b c. 当a=1时,b, c均不必判别。,逻辑表达式举例,11.2.1 if语句 if语句的两种形式: 形式一: if(表达式e) 语句S1,功能: 当表达式值非0时, 执行语句A,否则不执行语句A.,例如: if (xy) printf(“ %d“, x),形式1 if(表达式)语句A,其流程图:,形式2 if(表达式e)语句A else 语句B,功能: 表达式为非0,执行语句A ;表达式为0,执行语句B,例: if(xy) printf(“%d“, x); else printf(“ %d“, y);,注 1. 表达式e:可以是关系表达式, 逻辑表达式, 或任何类型表达式。其作用是控制整个语句的执行路线。 语句S1和语句S2可以是任何类型的单个语句(包括空语句和复合语句)。单个语句必须加“;”复合语句外面不用加“;”。 例如,以下语句是允许的:,if (x=0) y=x; s=x+y; else y=-x; s=0;,复合语句,复合语句,3. 整个if 语句,在语法上是一个语句。,一个语句,例4.1 分别用双目if语句和单目if语句求两个变量的最小值。 解1: 用双目if语句,程序如下: #include void main ( ) int x , y , min ; printf(“n Input x y:“); scanf (“ %d%d “, ,如从键盘上输入: 34 89 则输出结果: min(34,89)=34,解2:用单目if语句,程序如下: #include void main ( ) int x, y, min ; printf(“n Input x y:“); scanf (“ %d%d “, ,解3: 进行变量交换 #include void main ( ) int x, y, t ; printf(“n Input x y:“); scanf (“ %d%d “, ,例4.2. 从键盘上输入一字符,判断它是否是英文字母,若是输出Y, 否则输出 N。 解. #include #include void main ( ) char c; printf(“n Input a char:“); c=getch(); putchar(n); if(A=c ,括号内不能写成: A=c=Z|a=c=z,例4.3 输入三个数,按大小顺序输出。,main ( ) float a, b, c,t; scanf(“%f,%f,%f“, ,if (bc) t=b; b=c; c=t; printf(“%5.2f, %5.2f, %5.2f“, a, b, c); ,运行情况如下:,3,7,1 1.00, 3.00, 7.00,if语句的S1和S2可以是任何类型的语句。特别地,也可以是if语句(单目的或双目的)。当语句S1和(或)语句S2又是if语句时,就构成了if语句的嵌套。,注. 嵌套式if语句中,每个else通常是同它前边最近的那个if相匹配。 程序书写时注意层次关系,养成良好的习惯。,if (e1) if(e2) else else ,两层if 语句的嵌套,4.2.2. if语句的嵌套,例4.4 有一函数,y=,1 (x0),编一程序,输入一个x值,输出y值。,有以下几种写法,请判断哪些是正确的?,程序1: main ( ) int x, y; scanf(“d“, ,if (x0) y= 1; else if (x= =0) y=0; else y=1; printf (“x=%d, y=%dn“, x, y); ,程序2:将上面程序的if语句改为: if (x=0) if (x0) y=1; else y=0; else y= 1;,程序3: 将上述if语句改为: 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;,例4.5 对于已知的int型变量x值,计算并输出函数f(x)值。f(x)定义为:,程序如下: main ( ) float x, f ; printf(“nInput float x: x=0 ,例4.6: 对已知int型的百分制成绩score,按以下算法计算并输出其相应的等级: score90 等级为A 90score80 等级为B 80score60 等级为C score60 等级为D,程序如下: #include void main ( ) int score; printf(“n input score:”); scanf (“%d“, ,if (score=90) printf (“n A“) ; else,if (score=80) printf (“n B“) ; else,if (score=60) printf (“n C“) ; else printf (“n D“) ;,条件表达式语句等价于以下的if语句: if (e1) e2 ; else e3 ;,4.3条件表达式构成的选择结构,C语言提供了一个简单的条件赋值语句或条件表达式。,条件运算符为? : 三目运算符。,功能: 先判表达式1, 若非0,则值为表达式2的值,否则为表达式3的值。,一般形式,表达式1?表达式2: 表达式3,max=ab? a:b; 当ab. max a. 否则maxb,例4.7 判断一个int型变量的值是否奇数,是则输出 Odd ,否则输出 Even 。程序如下: main ( ) int n ; printf(“nInput int n:n“); scanf (“%d“, 程序最后一个语句中 printf的参数是条件表达式,其中n%2= =1为表达式e1 , “nOdd“为表达式e2,“nEven“为表达式e3。即,printf的参数为“nOdd“或“nEven“。,注: 1. 条件运算符优先于赋值运算符. 例: 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“, ch=(ch=A & ch=Z? (ch+32):ch) printf(“%c“, ch) ,例4.8 输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。,运行结果如下: A a,4.4 switch语句 具有多目分支的switch语句又称为开关语句,其一般形式为: switch (表达式e) case 常量表达式1 : 语句段1 break ; case 常量表达式n : 语句段n break ; default: 语句段n+1 ,例4.9: 根据成绩等级打印百分数段.,switch (grade), case A: printf (“85100n“);,case B: printf (“7084n“);,case C: printf (“6069n“);,case D: printf (“60n“);,default: printf (“errorn“);, 根据表达式的取值, 判断其与哪一个常量表达式相等。如=表达式i,则自语句i开始执行,直到语句n+1止。, 若与所有常量表达式值不相等,则从default后的语句开始执行。,功能:,switch (表达式) case 常表1: 语句1; break;,一般形式改为:,以上存在一个问题: 没有完全起到分支作用。,解决办法: 增加break语句, 使之跳出switch结构。,case 常表2: 语句2; break; case 常表n: 语句n; break; default: 语句n+1; ,请大家修改以上例子,使之正确。,注: 1. 常表值必须互不相等,否则二异性。,2. case顺序无关紧要。,3. 不一定非用break不可,有时几种情况合并执行一组语句。,例4.10 switch (grade) case A : case B: case C: printf(“60n“); break; case D: printf(“60n“); break; ,关于switch语句还有几点说明: 1. switch、case、default是系统的关键字,它们仅出现在switch结构中。default及其后的语句段可以缺省。 2. switch后的一对圆括号不能省,后面的一对大括号不能省。 3. switch语句中的各常量表达式其值均为整型或字符型。这些表达式中不能含有变量或函数调用。如,不允许有score =80 & score90。switch后面圆括号中的表达式e其值通常为整型或字符型。 4.系统执行switch结构中的某个语句段时,仅当遇到break语句时才结束并跳出switch语句,否则将顺序执行。,4.5 语句标号和goto语句,4.5.1语句标号 语句标号不必特意定义,可以是任意合法的标识符,在标识 符的后面加一个冒号就构成了标号。 注: 标号必须是标识符,可以和变量同名。通常用作goto语句的 转向目标。 在C语言中,可以在任何语句前加上语句标号。,4.5.2 goto语句 称为无条件转向语句。 格式:goto 语句标号; 功能:把程序的执行转向语句标号所在的位置,标号必须和 goto语句在同一个函数内。,4.5 程序举例,例1 写一程序,输入年号,判断是否为闰年。,1. 算法: 根据闰年的判断条件, 当年号能被4整除但不能被100整除时,它为闰年。, 当年号能被100整除又能被400整除时,它为闰年。,设用变量year表示年号,leap为待置值变量,当year为闰年:leap1, 否则leap0.,2. 流程图,leap%400=0,leap1,leap=0,打印非闰年,打印是闰年,结束,leap1,yes,No,yes,No,A,3. 程序:,main ( ) in

温馨提示

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

最新文档

评论

0/150

提交评论