C语言程序设计(第三版)第五章-原来

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
的逻辑值,1代表 真,0代表假 例:a>b,a+b>b+c,(a=3)>(b=5),‟a‟<„b‟,(a>b)>(b<c)
• 关系表达式的值是一个逻辑值,即“真”或“假”。 例:关系表达式”a>b”的值为“真”,表达式的值为1。
• • • • • • • •
例:a=3,b=2,c=1 关系表达式 a>b • 表达式值为真(1) (a>b)==c • 表达式值为真(1) (b+c)<a • 表达式值为假(0) 赋值表达式 d=a>b • d=1 f=a>b>c • f=0
switch语句
(4) 执行完一个case后面的语句后,流程控制转移到下一 个case继续执行。“case常量表达式”只是起语句 标号作用,并不是在该处进行条件判断。在执行 应该在执行一个case分支后,可以用一个break 语句来终止switch语句的执行。 若没有break语句,程序 将依次执行下面的case后的语句,直到遇到switch的 右花括号“}”为止。 (5) 在case后面,允许有多个执行语句,可以不用花括号 括起来。
思考:输入三个数a,b,c,要求按由小到大的顺序输出。
补:if语句的嵌套
在if语句中又包含一个或多个if语句称为if语句的嵌套。
一般形式: if() if() else else if() else
语句1 语句2 语句3 语句4
内嵌if
匹配规则: else总是与它上面的、最近的、未配对的if语句配对。
关系运算符的优先级高于赋值运算符
• • • •
例: c>a+b a>b==c a=b>c
• c>(a+b) • (a>b)==c • a=(b>c)
§5.1 关系运算符和关系表达式(续)
(二).关系表达式 • 用关系运算符将两个表达式(可以是算术表达式或 关系表达式,逻辑表达式,赋值表达式,字符表达式) C语言中没有专用 接起来的式子,称关系表达式
if(x>=0) if(x>0) y=1; 正 else y=0; 确 else y=-1;
程序4: y=0; if(x>=0) if(x>0) y=1; else y=-1;
错 误
switch语句
说明:
(1) 当表达式的值与某一个case后面的常量表达式 的值相等时,就执行此case后面的语句,若所 有的case中的常量表达式的值都没有与表达式 的值匹配的,就执行default后面的语句。 (2) 每一个case的常量表达式的值必须互不相同, 否则就会出现互相矛盾的现象。 (3) 各个case和default的出现次序不影响 执行结果。
第五章

本章要点


关系表达式 逻辑表达式
百度文库

选择结构程序设计

主要内容
5.1 关系运算符和关系表达式
5.2 逻辑运算符和逻辑表达式
5.3 if语句
5.4 switch语句
5.5 程序举例
§5.1 关系运算符和关系表达式
(一).关系运算符及其优先次序 1. < (小于) 2. <= (小于或等于) 优先级相同(高) 3. > (大于) 4. >= (大于或等于) 5. == (等于) 优先级相同(低) 6. 说明: != (不等于) 关系运算符的优先级低于算术运算符
1.if( ) …else … 2.for ( ) … 3.while ( ) … 4.do …while ( ) 5.continue 6.break 7.switch 8.goto 9.return (条件语句) (循环语句) (循环语句) (循环语句) (结束本次循环语句) (中止执行switch语句或循环语句) (多分支选择语句) (转向语句) (从函数返回语句)
算法1: 输入x 若x<0,则y=-1 若x=0,则y=0 若x>0,则y=1 输出y 算法1: 输入x 若x<0,则y=-1 否则: 若x=0,则y=0 若x>0,则y=1 输出y
#include<stdio.h> void main() { int x,y; scanf(“%d”,&x); { 程序段 } printf(“x=%d,y=%d\n”,x,y); }
-1 (x<0) y= 0 (x=0) 1 (x>0) 上例中的程序段有四个,请判断哪个是正确的?
程序1: if(x<0) 正 y=-1; 确 else if(x==0) y=0; else y=1; 程序3: 错 y=-1; if(x!=0) 误 If(x>0) y=1; else y=0; 程序2:
(2)a||b||c 只要a为真,就不必判断b和c的值。 若a为假时,才需要判断b的值,b若为真,不判断c。 只有a为假,才需判断b,只有a和b都为假时, 才需要判断c的值。
逻辑运算符和逻辑表达式
• 用“&&”对两个表达式进行计算时,若第一个表达 式的值为“假”,则运算结果与第二个表达式值 无关,结果肯定为“假”,所以C语言规定第二个 表达式将不再计算。 • 用“||”对两个表达式进行计算时,若第一个表达 式的值为“真”,则运算结果与第二个表达式值 无关,结果肯定为“真”,所以C语言规定第二个 表达式也不再计算。
例:a>b&& x>y a==b || x==y !a || a>b
→ (a>b)&&(x>y) → (a==b) || (x==y) → (!a ) || (a>b)
逻辑表达式的运算结果: 以“1”代表为真,以“0”代表为假。 在判断一个量是否为真时,以非0代表为真,以0代表为假
注: 1.逻辑与运算&&:仅当两个操作对象都为真时,运算结果 才为真;只要有一个为假,运算结果就为假。 2.逻辑或运算||:仅当两个操作对象都为假时,运算结果 才为假;只要有一个为真,运算结果就为真。 3.逻辑运算符也可以对两个数值型数据进行计算, 包括整型、实型、字符型或指针型等数据。 例:a&&b 若a,b为真,则a&&b为真。 a||b 若a,b之一为真,则a||b为真。 !a 若a为真,则!a为假。
任何非零的数值被认作“真”
例:设a=4,b=5:
!a a && b a || b ! a || b 4&&0||2 ‟c‟ && ‟d‟
值为0 值为1 值为1 值为1 值为1 值为1
注意:1.如果在一个表达式中不同位置上出现数值,应区 分哪些是作为数值运算或关系运算的对象,哪些作为逻辑 运算的对象。即注意优先级问题。 例:5>3&&8<4-!0
(运算符“>”是自左向右结合,先执行a>b的值为 1,再执行1>c的值为0,0赋值给f)
• 注意: • 当字符数据比较时,是按该字符对应的 ASCII码值的大小进行比较,其实质也 是数值比较。 • 一般关系运算符要求连接的两个运算对 象为同类型数据。
补充:C语言只有9中控制语句 (控制语句用于完成一定的控制功能)
条件运算符
说明:
(4).“表达式2”和“表达式3”不仅可以是数值表达式,还可以 是赋值表达式或函数表达式。 如: (a>b)?(a=100):(b=100) a>b?printf(“%d”,a):printf(“%d”,b) 相当于 if (a>b) printf(“%d”,a); else printf(“%d”,b); (5).条件表达式中,表达式1的类型可以与表达式2和表达 式3的类型不同。 如:x?„a‟:‘b‟ (整形变量x的值若等于0,则条件表达式的值为‘b‟) 表达式2和表达式3的类型也可以不同,此时条件表达式 的值的类型为二者中较高的类型。 如:x>y?1:1.5 (若x<=y则值为1.5;若x>y则值为1,由于1.5为
逻辑运算符和逻辑表达式
用逻辑表达式来表示闰年的条件
•能被4整除,但不能被100整除。 •能被4整除,又能被400整除
答 案
(year%4==0&&year%100!=0)||year%400==0
值为真(1)是闰年,否则为非闰年。
逻辑运算符和逻辑表达式
(一).逻辑运算符及其优先次序 1. && (逻辑与) 相当于其他语言中的AND 2. || (逻辑或) 相当于其他语言中的OR 3. ! (逻辑非) 相当于其他语言中的NOT
优先次序: !(非)->&&()->||() 逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算 术运算符
实型,比整高,因此,将1转换为实型值1.0)
if语句(续)
说明:
(1).3种形式的if语句中在if后面都有表达式, 一般为逻辑表达式或关系表达式。 在执行if语句时先对表达式求解,若表达式的值 为0,按“假”处理;若表达式的值为非0,按 “真”处理;执行指定的语句。
表达式的类型不限于逻辑表达式,可以是任意的 数值类型(包括整型、实型、字符型、指针型 数据等)。
if语句(续)
说明:
(2).第二,第三种形式的if语句中,else子句不能 作为语句单独使用,它必须是if语句的一部分。 (3).在if和else后面可以只含有一个内嵌的操 作语句,也可以有多个操作语句,此时用花 括号将几个语句括起来成为一个复合语句。
if语句(续)
例5.1 输入两个实数,按代数值由小到大的顺序输出这两 个数。 #include<stdio.h> a>b void main() {float a,b,t; y scanf(“%f,%f”,&a,&b); n T=a if(a>b) A=b {t=a; B=t a=b; b=t;} printf(“%5.2f,%5.2f\n”,a,b); }
注:“( )”表示括号中是一个判断条件,“…”表示内嵌的 语句
条件运算符
说明:
(1).条件运算符的执行顺序:先求解表达式1,若为非0(真) 则求解表达式2,此时表达式2的值就作为整个条件表达式 的值。若表达式1的值为0(假),则求解表达式3,表达 式3的值就是整个条件表达式的值。
(2).条件运算符优先级高于赋值运算符 , 如:max=(a>b?a:b) 低于关系运算符和算术运算符。 如:max=(a>b)?a:b ; a>b?a:b+1 (3).条件运算符的结合方向为“自右至左”。 如:a>b?a: c>d?c:d → a>b?a:(c>d?c:d)
例:
if() if() 语句1
例:
if() {if() 语句1}
else
if() 语句2 else 语句3
else
if() 语句2 else 语句3
当if和else数目不同时,可以加花括号来确定配对关系。
-1 (x<0) 例 5.3 有一个函数 y= 0 (x=0),编一程序,输入一个x 值,输出y值。 1 (x>0)
5>3逻辑值为1
!0逻辑值为1
4-1值为3
表达式值为0
1&&0逻辑值为0
8<3逻辑值为0
逻辑运算符和逻辑表达式
在逻辑表达式的求解中,并不是所有的逻辑运算符都要 被执行。
(1)a&&b&&c 只要a为假,就不必判断b和c的值。 若a为真时,才需要判断b的值,b若为假,不判断c。 只有a为真,才需判断b,只有a和b都为真时, 才需要判断c的值。
相关文档
最新文档