c语言程序设计第四章

上传人:san****019 文档编号:70846531 上传时间:2019-01-18 格式:PPT 页数:49 大小:549.81KB
返回 下载 相关 举报
c语言程序设计第四章_第1页
第1页 / 共49页
c语言程序设计第四章_第2页
第2页 / 共49页
c语言程序设计第四章_第3页
第3页 / 共49页
c语言程序设计第四章_第4页
第4页 / 共49页
c语言程序设计第四章_第5页
第5页 / 共49页
点击查看更多>>
资源描述

《c语言程序设计第四章》由会员分享,可在线阅读,更多相关《c语言程序设计第四章(49页珍藏版)》请在金锄头文库上搜索。

1、第四章 选择结构,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

2、 当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.,总之,在

3、逻辑运算中,非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时, 执行语

4、句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)

5、 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

6、 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 输入三个数,按大

7、小顺序输出。,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) els

8、e 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

9、(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;

10、 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的

11、值。,一般形式,表达式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)可去掉

12、( ),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、表达

13、式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: 根据成绩等级打印

14、百分数段.,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;,一般形式改为:,以上存在一个问题: 没有完

15、全起到分支作用。,解决办法: 增加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其值通常为

展开阅读全文
相关资源
相关搜索

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

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号