C语言第4章选择结构程序设计.ppt

上传人:本田雅阁 文档编号:3479717 上传时间:2019-09-01 格式:PPT 页数:37 大小:157.02KB
返回 下载 相关 举报
C语言第4章选择结构程序设计.ppt_第1页
第1页 / 共37页
C语言第4章选择结构程序设计.ppt_第2页
第2页 / 共37页
C语言第4章选择结构程序设计.ppt_第3页
第3页 / 共37页
C语言第4章选择结构程序设计.ppt_第4页
第4页 / 共37页
C语言第4章选择结构程序设计.ppt_第5页
第5页 / 共37页
点击查看更多>>
资源描述

《C语言第4章选择结构程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言第4章选择结构程序设计.ppt(37页珍藏版)》请在三一文库上搜索。

1、第4章 选择结构程序设计,4.1 关系运算符与关系表达式 4.2 逻辑运算符和逻辑表达式 4.3 if语句 4.4 switch语句 4.5 选择程序设计实例,关系运算符,1.关系运算符的运算对象、规则与结果、结合性如下表所示:,2.关系运算符的优先级, 算术运算符 优先于 关系运算符 ,= 优先于 ,! ,= 同级,结合性是自左向右 ,!同级,结合性是自左向右,3.关系运算符的使用实例,设变量定义如下: char c1a,c2A; (c1,c2可看成整型,其值为97,65),int n165,n297; float f10.3E1,f23.0001;,则: c1c2,n1n2,f1f2的值依

2、次是 1.,0,0 c1n1,c2n2,c1n2的值依次是 1,0,1 f1c1,f2c2,f1n162的值依次是 0,1,1, c1c21c2n1n2f1!f2的值是 1,关系表达式,用关系运算符将两个表达式(可以是算术表达式或关系表达式、逻辑表达式、字符表达式)连接起来的式子,称关系表达式。 例如,下面都是合法的关系表达式: ab, abbc, (a=3)(b=5), ab, (ab)(bc),关系表达式的值是一个逻辑值,即“真”或“假”。 例如, 关系表达式“5=3”的值为“假”,“5=0”的值为“真”。 C语言没有逻辑型数据,以1代表“真”,以“0”代表“假”。 例如,a=3,b=2,

3、c=1,则: 关系表达式“ab”的值为“真”,表达式的值为1。 关系表达式“(ab)=c”的值为“真”(因为ab的值为1,等于c的值),表达式的值为1。 关系表达式“bca”的值为“假”,表达式的值为0。,如果有以下赋值表达式: d=ab d的值为1。 f=abc f的值为0 (因为“”运算符是自左至右的结合方向,先执行“ab”得值为1, 再执行关系运算“1c”,得值0,赋给f)。,逻辑运算符,逻辑运算符是对两个关系式或逻辑值进行运算的,运算结 果仍是逻辑值。,在C语言中,逻辑值用数值非0和0来表示逻辑真和假的, 所以逻辑运算符也可以对两个数值型数据进行运算,包括 整型、实型、字符型等数据。,

4、1.逻辑运算符,2.运算规则,3.逻辑运算符的优先级, !优先于双目算术运算符 优先于 关系运算符 优先于 & 优先于 | !和单目算术运算符式同级别的,结合性是自右向左 双目逻辑运算符的结合性是自左向右,逻辑表达式,逻辑表达式的值应该是一个逻辑量“真”或“假”。c语言编译系统在给出逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真”时,以0代表“假”,以非0代表“真”。即将一个非零的数值认作为“真”。 例如: 若a=4,则!a的值为 0 (2) 若a=4,b=5,则a&b的值为 1 (3) a、b值同前, a|b的值为 1 (4) 4&0|2的值为 1,特别注意!,

5、(1) 用&对两个表达式进行计算时,若第一个表达式的值 为“假”,则运算结果与第二个表达式的值无关,结果肯 定为假,所以C语言规定此时第二个表达式将不再计算。,用|对两个表达式进行计算时,若第一个表达式的值为 “真”,则运算结果与第二个表达式的值无关,结果肯定 为“真”,所以C语言规定此时第二个表达式也不再计算。,4.逻辑运算符的使用例子,设变量定义如下: char c1a,c2A; int n165,n297; float f13.0,f23.0001;,则: !c1的值时0 n1 & n2的值是1 f1 |f2的值是 1 !(c2c1)的值是 1 !c2c1的值是 0 f1f2|!c1的值

6、是0 n132n2&n1c2的值是1,if 语句,1if语句的三种形式,(1) if(表达式)语句 例如:if(xy)printf(“d”,x);,这种if语句的执行过程如图 :,(2)if(表达式)语句1 else 语句2,例如: if(xy)printf(“d”,x); else printf(“d”,y);,(3),if(表达式)语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 : else if(表达式m) 语句m else 语句n,(4)说明:, 三种形式的if语句中在if后面都有“表达式”,一般为逻 辑表达式或关系表式。 例如,if(ab & xy)

7、printf (“ab,xy”); 在执行if语句时先对表达式求解,若表达式的值为0,按 “假”处理,若表达式的值为非0,按“真”处理,执行指定 的语句。 假如有以下if语句:if(3)printf(“O.K.”); 是合法的,执行结果输出“O.K.”,因为表达式的值为3, 按 “真”处理。由此可见,表达式的类型不限于逻辑表达 式,可以是任意的数值类型(包括整型,实型、字符型、 指针型数据)。, 第二、第三种形式的if语句中,在每个else前面有一分号, 整个语句结束处有一分号。,例如:if (x0) print(“f”,x); else printf(“f”,x);,各有一个分号,这是由于分

8、号是C语言中不可缺少的部分,这个分号是if 语句中的内嵌语所要求的。如果无此分号,则出现语法错 误。else子句不能作为语句单独使用它必须是if语句的一部 分与if配对使用。, 在if和else后面可以只含一个内嵌的操作语句(如上例), 也可以有多个操作语句,此时用花括号“”将几个语句括 起来成为一个复合语句。,(5)例:输入两个实数,按其由小到大的次序输出这两个数。,程序如下:,main() float a,b,t; scanf (“%f,%f”, ,运行情况如下: 3.6,3.2 3.20,3.60,例41 设计程序,划分学生的成绩优,良,及格,不及格,输入成绩,输出等级。 #includ

9、e “stdio.h“ main() int score; char grade; scanf(“%d“, ,例42 输入三个整数,按从小到大的顺序输出。 #include “stdio.h“ main() int a,b,c,t; scanf(“%d %d %d“, ,2. 嵌套的if语句,在 if()语句1 else 语句2 中,其中语句1,语句2本身又 可以是if语句,从而构成了嵌套的if语句。C规定,else 也必 须与最近的if相匹配。,例1: if ( ) if ( ) 语句 1; else 语句 2; else if ( ) 语句3 ;,有以下几个程序,请判断哪个是正确的?,程序

10、1:,main() int x,y; scanf(“%d”, ,程序2:将上面程序的if语句(第46行)改为:,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:,y0; if (x=0) if (x0) y=1; else y=1;,只有程序1和程序2是正确的,switch 语句,1switch的一般形式:,switch(表达式) case常量表达式1:语句 1 case常量表达式2:语句 2 : : case常量表达式n:语句 n default

11、:语句 n1 ,例44 根据输入的百分制成绩,转换成相应的等级。 #include “stdio.h“ main() int score,mark; printf(“请输入成绩n“); scanf(“%d“,case 5: case 4: case 3: case 2: case 1: case 0: printf(“%d-En“,score);break; ,2关于switch的说明:,(1)switch后面括弧内的“表达式”,ANSI标准允许它为任 何类型。,(2)当表达式的值与某一个case后面的常量表达式的值相等 时,就执行此case后面的语句,若所有的 case中的常量 表达式的值都

12、没有与表达式的值匹配的,就执行default 后面的语句。,(3)每一个case的常量表达式的值必须互不相同,否则就会出 现互相矛盾的现象。,(4)各个case和default的出现次序不影响执行结果。,(5)执行完一个case后面的语句后,流程控制转移到下一个 case继续执行。“case常量表达式”只是起语句标号作用, 并不是在该处进行条件判断。在执行switch语句时,根 据switch后面表达式的值找到匹配的入口标号,就从此 标号开始执行下去,不再进行判断。因此,应该在执行 一个case分支后,使流程跳出switch结构,即终止 switch语句的执行。可以用一个break语句来达到此

13、目 的。,选择结构是结构化程序设计中的三种基本结构之一。 在大多数程序中都会包含选择结构。它的作用是,根据所指定的条件是否满足,决定从给定的两组或多组操作选择其一。,选择程序设计举例,写程序,判断某一年是否是闰年。以变量leap代表是否闰年的 信息。若闰年,令leap1;非闰年,leap0。最后判断 leap 是否为1(真),若是,则输出“闰年”信息。,编写程序如下: main () int year, leap; scanf (“%d”,else printf(“%d is not ”,year); printf (“a leap year.n”); ,运行情况如下: 1989,1989 i

14、s not a leap year.,2000,2000 is a leap year.,可以将程序中第513行改写成以下的if语句,if (year%4!=0) leap=0; else if (year%100!=0) leap=1; else if (year%400!=0) leap=0; else leap=1;,也可以用一个逻辑表达式包含所有的闰年条件,将上述if语句 用下面的if语句代替: if (year%40,写程序。运输公司对用户计算运费。路程(s)越远,每公 里运费越低。标准如下:,S250km 没有折扣 250S500 2%折扣 500S1000 5%折扣 1000S2

15、000 8%折扣 2000S3000 10折扣 3000S 15折扣,0,2,4,6,8,10,12,250,500,750,1000,1250,2000,3000,14,16,设每公里每吨货物的基本运费为p,货物重为w,距离为s,折扣 为d,则总运费f的计算公式为 f=p*w*s*(1-d),main() int c,s; float p,w,d,f; scanf (“%f,%f,%d”, else c=s/250 switch(c) case 0:d0;break; case 1:d2;break; case 2: case 3:d5;break;,case 4: case 5: case 6: case 7:d8;break; case 8: case 9: case 10: case 11:d10;break; case 12:d15;break; f=p*w*s*(1-d/100.0); printf(“freight=%15.4f”,f); ,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1