C语言_选择结构.ppt

上传人:PIYPING 文档编号:13451289 上传时间:2021-12-26 格式:PPT 页数:60 大小:2.53MB
返回 下载 相关 举报
C语言_选择结构.ppt_第1页
第1页 / 共60页
C语言_选择结构.ppt_第2页
第2页 / 共60页
C语言_选择结构.ppt_第3页
第3页 / 共60页
C语言_选择结构.ppt_第4页
第4页 / 共60页
C语言_选择结构.ppt_第5页
第5页 / 共60页
点击查看更多>>
资源描述

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

1、选择结构程序设计,C 语言程序设计 Lecture 4,2,关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算符和条件表达式,switch语句,if语句,选择结构程序示例,goto语句,3,关系运算符和表达式,关系运算符种类:= !=结合方向:自左向右优先级别:,例 ca+b/c(a+b) ab!=c /(ab)!=c a=bc /a=(bc),关系表达式的值:是逻辑值“真”或“假”,用1和0表示,例 int a=3,b=2,c=1,d,f; ab (ab)=c b+cb f=abc,/表达式值1,/表达式值1,/表达式值0,/ d=1,/ f=0,4,关系运算注意:,例 若a=0; b

2、=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.0/3.0*3.0=1.0 结果为可改写为:fabs(1.0/3.0*3.0-1.0)1e-6,0,5,逻辑运算符种类: ! & |逻辑运算真值表(见教材)(逻辑运算-产生真假值的运算),C语言中,运算量:0表示“假”非0表示“真”,运算结果:0表示“假”,1表示“真”,逻辑运算符和表达式,若a=4,!a的值为若a=4,b=5,则a &

3、amp; b 的值为则a | b 的值为则!a | b 的值为4 & 0|2 的值为,6,优先级:,结合方向:,! :从右向左& :从左向右| :从左向右,01101, a+bc&b=c a|b+c&b-c !(ab)&!c|1 !(x=a)&(y=b)&0 !(a+b)+c-1&b+c/2,已知a=1,b=2,c=3,7,逻辑运算规则简化:,、两个表达式作 (m=ab)&(n=cd) m?,n?,0,1,8,例:判断某一年是否是闰年。条件是能被4整除,但不能被100整除或能被400整除。用year表示年份,判断闰年的逻辑

4、表达式为:如果给year输入一个的值,使上面的表达式的值为时,则year所代表的年份就是闰年。,(year%4=0 & year%100!=0)|(year % 400=0),(year%4!=0)|(year%100=0 & year % 400 !=0),变换一下角度,如何判断year不是闰年?,9,例 (a=b)?Y:N (x%2=1)?1:0 (x=0)?x:-x (c=a & c=z)?c-a+A:c,条件运算符可嵌套 如 x0?1:(x0?-1:0)优先级: 13,一般形式: expr1 ? expr2 : expr3执行过程功能:相当于条件语句,但不能取代

5、一般if语句,例 求 a+|b| printf(“a+|b|=%dn”,b0?a+b:a-b);,结合方向:自右向左 如 ab?a:cd?c:d ab?a:(cd?c:d)expr1、expr2、expr3类型可不同,表达式值取较高的类型,例 x?a:b /x=0,表达式值为b; x0,表达式值为axy?1:1.5 /xy ,值为1.0; xy ,值为1.5,条件运算符与表达式,10,课堂练习,1.判断一个点是否 落入圆形中。 2.判断一个点是否落入阴影部分。 (小圆的半径为1),x*x+y*y=100,(pow(x-2,2)+pow(y-2,2)=1|(pow(x-2,2)+pow(y+2,

6、2)=1| (pow(x+2,2)+pow(y-2,2)=1| (pow(x+2,2)+pow(y+2,2)=1,11,已知int x=1,y=2,z;执行语句z=xy?+x:y+;后,x、y、z的值分别为_、_和 _ 。已知int a=4,b=5,c;执行语句c=a=ab后,a的值为 _ 。已知int x=10,y=3 , z;执行语句printf(%dn , z = (x%y , x/y);后,输出结果为 _ 。已知char ch=A;ch=(ch=A语句后,输出结果为_。,main ( )int a,b,d=222;a=d/100%9;b=(-1),12,已知int x=15,y=5;

7、执行语句printf(“%dn”,x%=(y%=2);后,输出结果为_。int a=3,b=4,c=5;则值为0的表达式是()A) a,13,if 语句,1、if语句先求出给定的条件,然后根据条件是否满足(“真”或“假”)决定给出的两种操作之一。即用来实现选择结构。2、下面介绍if语句的三种形式。单分支双分支多分支,14,形式:if (表达式) 语句例子:,(1)单分支选择结构,if (xy) printf(%dn,x);printf(%dn,y);,if (ab,15,(2)双分支选择结构,形式:if (表达式) 语句1 else 语句2例子:if (xy) printf(”%dn”,x);

8、else printf(”%dn”,y);,16,(3)多分支选择结构,形式:if (表达式) 语句1 else if (表达式2) 语句2 else if (表达式3) 语句3 . else if (表达式m) 语句m else 语句n 例子:见书。,17,(4)if语句嵌套的问题,在if语句中又包含一个或多个if语句称为if语句嵌套。应该注意if与else的配对关系。从最内层开始,else总是与它上面最近的而且是未曾配对的if配对。试分析:,if ( ) if ( ) 语句1 else 语句2else if ( ) 语句3 else 语句4,if ( ) if ( ) 语句1 else i

9、f ( ) 语句2 else 语句3,if ( ) if ( ) 语句1 else if ( ) 语句2 else 语句3,18,if语句嵌套的问题举例,下面实现函数(见右)的程序段哪些是正确的,哪些是错误的?,if (x0 ) y=-1;else if(x=0) y=0; else y=1;,if ( x=0) if(x0) y=1; else y=0;else y=-1;,y=-1;if(x!=0) if(x0) y=1;else y=0;,y=0;if(x=0) if(x0) y=1;else y=-1;,19,3、若在if语句中,在表达式为“真”和“假”时,都只执行一个赋值语句给同一个

10、变量赋值,则可以用简单的条件运算符处理。如:if (ab) max=a;else max=b;可改为:max=(ab)?a:b;,20,4、使用if语句的注意事项三种形式的if语句后面的表达式一般为逻辑表达式或关系表达式,但也可以是其它数值类型的表达式(如整型、实型、字符型和指针型)注意每个语句后面都有分号;如果语句 m为多个操作语句,则必须用 括起来成为一个复合语句。,21,if (3) printf(“%sn”,“O.K”); if (a) printf(“%sn”,“O.K”); if ( 2.1) printf(“%sn”,“O.K”); if(x0) y=0;z=0; if(x0)

11、y=0;z=0; else y=1;z=1; else y=1;z=1; if (a+bc,22,例 输入两个实数,按从小到大排列并输出。main() float a,b,t; scanf(%f,%f,23,例 输入三个实数,按从小到大排列并输出。main() float a,b,c,t; scanf(%f,%f,%f, ,24,运行结果:-1,例 (ch4_01.c)考虑输出结果:,main() int x=100,a=10,b=20; int v1=5,v2=0; if(ab) if(b!=15) if(!v1) x=1; else if(v2) x=10; x=-1; printf(“%

12、d”,x); ,25,switch语句,if 语句只有两个分支可供选择,而实际问题常常需要用到多分支选择。例如:学生成绩分类、人口统计分类等等。当然,这些问题可以用嵌套的if语句处理,但如果分支较多则程序冗长且可读性降低。C语言提供的switch语句可直接处理多分支选择。,26,一般形式为:switch (表达式)case 常量表达式1:语句1 case 常量表达式2:语句2 case 常量表达式n:语句n default :语句n+1,27,例根据变量i的值,输出相应的字符: switch (i) case 1:printf(“An”); case 2:printf(“Bn”); case

13、3:printf(“Cn”); case 4:printf(“Dn”); default:printf(“En”); ,28,switch后面括号内的“表达式”可以是整型表达式或字符表达式,也可以是枚举型数据。每一个case后的常量表达式的值必须互不相同。常量表达式的值只起语句标号的作用。例如:如果i的值为3,结果将为: C D E可在case对应的分支语句后加break语句解决问题。,29,float a=6.5; char b=a;switch (a) case 6:printf(“O.K!”);break; default: printf(“ERROR!”); switch (b) ca

14、se a:printf(“O.K!”);break; case 97:printf(“O.K!”);break; default: printf(“ERROR!”); ,例(ch4_02.c),各个case的常量表达式的值必须互不相同。,30,最后说明一点,多个case可以共用一组执行语句,如: switch (grade) case 9: case 8:case 7: case 6: printf(“Passedn”); break; case 5: case 4: case 3: case 2: case 1: case 0:printf(“Failedn”); break; defaul

15、t :printf(“Errorn”); ,各个case后的语句可以是多个语句,且不用花括号括起来。,31,例,main() char x; int a10; scanf(%c,运行时输入:a显示:a=1输入:b显示:a=2输入:c显示:a=10,思考:如果没有break;语句,结果如何?,32,#include 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;printf(“a=%d,b=%dn“,a,b);,运行结果:a

16、=2,b=1,例,33,#include main () int s;s=getchar();switch(s-2) case 0:case 1:putchar(s+4);case 2:putchar(s+4);break;case 3:putchar(s+3);default:putchar(s+2);break;printf(n);,运行时输入:2显示结果:66输入: 4显示结果: 8若修改第5行为:switch(s-2)运行时输入:2显示结果:4输入:4显示结果: 6因为全是default,34,goto语句,1、 无条件转移语句; 格式:goto 标号;2、有标号的语句称为标号语句;

17、格式: 标号:语句;说明:goto语句后的标识符必须存在。 目的地处的标识符后必须有冒号。 因此在结构化程序设计中要慎用,限制使用goto语句。,35,选择结构程序举例,例 给出一百分制成绩,要求输出成绩等级及评语。90100为A, 8089为B, 7079为C,6069 为D,小于60为E其它 为error。,36,main() int score; char grade; scanf(%d, ,解法一,37,main() int score; char grade; scanf(%d, ,解法二,38,main() float score; char grade; printf(“Inpu

18、t:n”); scanf(“%f”,解法三,39,case 7: grade=C;break; case 6: grade=D;break; case 5: case 4: case 3: case 2: case 1: case 0: grade=E;break;printf(“grade=%cn”,grade); ,40,1、写出以下程序运行结果。main ( ) int a=1,b=0;switch(a) case 1: switch (b) case 0:printf(*0*);break; case 1: printf(*1*);break; case 2: printf(*2*);

19、break; ,本章自测题,41,2、由键盘输入3个整数a、b、c,输出其中的最大数。(要求使用条件运算符),3、编写一个运算器程序,输入两个操作数和一个符号,输出结果,注意0不能做除数。,4、读入1到7之间的某个数,输出一个星期中相应的某一天的单词。,42,#include stdio.h main()int num1,num2,result; char op; printf(Please enter two numbersn); scanf(%d%d, ,43,main( ) int n; printf(please input day(17):); scanf(%d, ,44,本章重点,

20、判断就是设定条件用关系运算式和逻辑运算式表示。&,|,!, ,=,!=等掌握各逻辑运算符和关系运算符的优先级,判断的结果非0既1, 1表示满足条件if语句有三种表示方法及其在程序中的应用.多层if语句的嵌套可用switch语句实现。在switch语句中注意break的运用,45,课后练习,1、输入一个年号year和月号month,计算该月有几天,并输出结果。2、有一函数 写一程序,输入x的值,输出y值。,46,3、计算邮资. 最低重量为1克,基本费为0.80元.每增加1克,增加邮费0.50元,加快费为2.00元,47,main( )int year,month,day;printf(e

21、nter year,case 2: if (year%4=0 ,48,字位运算符(在简单程序中使用较少),位是最小的数据单位。有些数据用几个位就能表示。用基本类型变量表示这类对象很浪费。一个办法是把多个这类数据存入一个基本类型对象。系统程序常需直接操作位数据。硬设备工作状态常用二进制串表示,操作它们常需用二进制位串方式发命令。,49,1、位运算概述,一、C语言的低级语言功能: C语言具有系统功能调用:具有对int 和char 类型数据直接进行位操作的能力。,50,位运算:位取值0/1,位运算由一两个0/1值计算出0/1值结果。常用运算有四个,“否定”为一元运算符:,1)位“否定”:对象值1时得

22、0,对象值0时得1;2)位“与”:两对象都是1时得1,否则0;3)位“或”:两对象都是0时得0,否则1;4)位“异或”:恰有一对象为1时得1,否则0。,51,C基于位运算定义了字位运算符,作用于整型数据得到整型结果。一元运算把数据看成位序列,各位分别运算;二元运算由两数据的对应位分算出结果的各位。,52,设x和y都是16位的整变量,值分别是:x: 0010,1001,0101,0111y: 1001,1100,1111,1010对x和y的各种字位运算:x 1101,0110,1010,1000 x & y 0000,1000,0101,0010 x | y 1011,1101,1111

23、,1111x y 1011,0101,1010,1101,53,2、位运算符使用方法,一、按位与运算符(&):a&b作用是将a和b中各个位都分别进行与运算。 用0和一个数据中的某些位相与,可以屏蔽掉某些位,而保留其余位。二、按位或运算符(|):a | b作用是将a和b中各个位都分别进行或运算。 用1和一个数据中的某些位相或,可以使某些位变为1,而其余位不变。,54,2、位运算符使用方法,三、按位异或运算符():ab作用是将a和b中各个位都分别进行异或运算。 用1和一个数据中的某些位相异或,可以使某些位数据翻转,即1变0,0变1,而其余位不变。四、按位取反运算符(): a 作用是

24、将a中各个位都分别进行取反运算。 可使一个数据的所有位翻转,即1变0,0变1。,55,2、位运算符使用方法,五、左移运算符( ):a2 作用是将a中各个位全部右移2位,左端补入符号位。 右移一位相当于除2操作。,56,掩码(mask):为做位运算而构造的二进制串。字位运算常需做掩码:直接写或通过字位运算构造。写掩码常用十六进制/八进制写法。,57,例,设x是16位整型变量(16位二进制序列),写表达式判断它的值的第5位和第8位是否都为0。整数从低位向高位顺序为第0到第15位: 15 0 x 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1掩码 0 0 0 0 0 0 0 1 0

25、0 1 0 0 0 0 0用掩码与x做字位与,第5位和第8位的信息留下来,结果中其他位总是0。上述条件可写为:x ,58,常用操作使用的掩码和运算(解释,举例) :1)取出被处理二进制串的某些位:用& 运算;掩码:这些位为1其他位为0。2)把某些位置0其他位不变(“复位”/“清0”):用& 运算;掩码:要改变位为0,其他位为1。3)把某些位置1其他位不变(“置位”/“置1”):用| 运算;掩码:要设置的位为1,其他位为0。4)翻转某些位而其他位不变(翻转):用 运算;掩码:要翻转位为1/其他位为0。,说设置/改是为方便。这些运算总从两个整数(二进制串)求出结果,不改变原有计算对象。,59,3、位运算应用举例,写一个程序,以无符号数a为计算对象,取出该数从第p位开始的n位数据。问题的关键:掩码的构造0的字位否定得到全1;左移n位使最低n位变0其余位是1;求否定得到低n位为1,高位都是0的掩码;掩码与x右移结果做字位与就取出了所需的n位。,60,main()unsigned a,b,c,p,n;scanf(“%x%d%d”,

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

当前位置:首页 > 科普知识


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