C语言第7讲 关系运算与逻辑运算 if 语句

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

程序运行情况如下: Enter x:8<CR> x= 8, y= 1
表4.3 逻辑运算符的运算规则
用逻辑表达式来表示多个条件的组合
如判断一个年份是否是闰年的逻辑表达式为:
(year%4==0)&&(year%100!=0)||(year%400==0)
数学表达式 0<x<10表示x的值应该在0到10的范 围内。但在C语言中不能用0<x<10这样一个关系 表达式来表述以上的数学关系。因为无论x是什么 值,按照C语言的运算规则,左边的表达式0<x的 运算结果只能为0或1,因而表达式0<x<10的运算 结果总是1。 只有用逻辑表达式0<x && x<l0才能正确地表述 以上数学关系。
例4.3
编写程序,根据输入的学生成绩,给出相应的等级。 90分以上的等级为A,60分以下的等级为E,其余每10 分为一个等级。 main( ) 程序运行情况如下: { int g; Enter g:78<CR> printf(" Enter g:"); g=78:C scanf(" %d " , &g); printf(" g=%d: " , g); if(g>=90) printf(" A\n "); else if(g>=80) printf(" B\n "); else if(g>=70) printf(" C\n "); else if(g>=60) printf(" D\n "); else printf(" E\n "); }
例:“非完 全求解”
#include "stdio.h" void main() {int x,a,b,c; a=1;b=2;c=3; x=(a-1)&&(++b)&&(++c); printf("1:a=%d,b=%d,c=%d,x=%d\n",a,b,c,x); a=1;b=2;c=3; x=a&&(b-2Biblioteka Baidu&&(++c); printf("2:a=%d,b=%d,c=%d,x=%d\n",a,b,c,x); a=1;b=2;c=3; x=a&&(++b)&&(++c); printf("3:a=%d,b=%d,c=%d,x=%d\n",a,b,c,x); }
例4.4 编写一程序实现符号函数的功能。
main() { int x, y ; printf("Enter x:"); scanf("%d", &x ); y= -1; if (x!=0) { if(x>0) y=1; } else y=0; printf("x=%d, y=%d\n", x, y); }
4.2 if语句
if语句可以根据给定的条件进行判断,决定执行 某个分支程序段,以实现选择结构的程序设计。
1. if语句的一般形式
if(表达式) 语句1 [else 语句2]
表达式可以 是任何类型 的C表达式 语句1、语句2 都可以是 复合语句 else子句不能单 独使用(可选)
if语句的执行过程:先求表达式的值
2. 嵌套的if语句
if语句中的if子句和else子句可以是任意合法 的C语句,当然也可以是另外一个if语句,通常称 这种语句为嵌套的if语句。 内嵌的if语句既可以嵌套在if子句中,也可以嵌 套在else子句中。在运用嵌套的if语句时,应该 特别注意else子句和if子句的配套问题。如果在 嵌套的if语句中没有用一对花括号强制地结束某 个内嵌的不带else子句的if语句,则else子句总 是与在它前面的、离它最近的、尚未与其它else 子句匹配的if子句相匹配。 以下介绍两种值得关注的嵌套if语句。
(1) 用嵌套的if语句形成多分支语句
在if语句的else子句中嵌套多个具有else子句的if语句 语句形式如下: if(表达式1) 语句1 else if(表达式2) 语句2 else if(表达式3) 语句3 else if(表达式4) 语句4 ... else 语句n 执行过程:从上向下逐一对if后的表达式进行检测,当其 中某一个表达式的值为非零时,就执行与之对应的if子句,阶 梯形子句中的其余部分就被跳越过去。如果所有表达式的值 都为零,则执行最后的else子句,即语句n;如果最内层的if 语句没有else子句,那么将不进行任何操作。
例4.1 输入三个整数,求最大值
main() {int n1, n2, n3, max ; printf("Please input three numbers:"); scanf("%d,%d,%d ",&n1,&n2,&n3); if (n1>n2) max=n1; /*简化形式*/ max=n1; else max=n2; if (n2>max) max=n2; if (n3>max) max=n3; printf("max=%d\n",max); } 程序运行情况如下: Please input three numbers:11,22,18<CR> max=22
10
9
2.关系表达式
用关系运算符将两个操作数(常量、变量或表达式) 连接起来,进行关系运算的式子,称为关系表达式。 例如,假设n1=5,n2=8,n3=10,则: (1)关系表达式n1==n2的值为0。 (2)关系表达式n1<=n3的值为1。 (3)关系表达式n1+n2>n3的值为1。 (4)关系表达式n1== n2>n3的值等为0。

语句形式如下: if (表达式1) { if(表达式2) 语句1} else 语句2 注意:if子句中的花括号 if(表达式1) if(表达式2) 语句1 else 语句2
用花括号把内层if语句括起来后,使得此内层 if语句在语法上成为一条独立的语句,从而使得 else子句只能与外层的if配对。
表4.2 逻辑运算符及其优先级
5 4 14 右结合
优先级次序: ! (逻辑非)14 算术运算符13/12 关系运算符10/9 &&(逻辑与)5 ||(逻辑或)4 赋值运算符2
2.逻辑表达式
由逻辑运算符和运算对象所组成的表达式称为逻辑表达 式。逻辑运算的对象可以是C语言中任意合法的表达式。 例如:在关系表达式(x>y)为真的条件下,若a值为10,b 值为16,表达式(a>b)&&(x>y)的值为“假”,用数值0来 表示;若a值为10,b值为6,表达式(a>b)&&(x>y)的值则 为“真”,用数值1来表示。
例4.2 输入三个整数,在变量a,b,c中排 序
main() { int a, b, c, t; printf ("input a, b, c: "); scanf ("%d %d %d ", &a, &b, &c ); printf ("a=%d, b=%d, c=%d\n ", a, b, c); if (a>b) { t=a; a=b; b=t; } 程序运行情况如下: if (a>c) input a, b, c: 62 34 24<CR> { t=a; a=c; c=t; } a=62,b=34,c=24 if (b>c) a=24,b=34,c=62 { t=b; b=c; c=t; } printf ("a=%d, b=%d, c=%d\n ", a, b, c); }
4.1.2 关系运算符与关系表达式
所谓“关系运算”实际上就是“比较运 算”,即将两个数据进行比较,判定两个数据是 否符合给定的关系。 例如,“a > b”中的“>”表示一个大于关系 运算。如果a的值是8,b的值是5,则这个关系 运算的结果为“真”,即数值1,表示条件成立; 如果a的值是6,b的值是9,则运算的结果为 “假”,即数值0 ,表示条件不成立。
1.关系运算符及其优先级
C语言提供了六种关系运算符,如表4.1所示。
表4.1关系运算符及其优先级
注意:有些运算符是由 两个字符组合而成的,如: <=;其两个字符之间不能 有空格。在关系运算符中, 前4个优先级相同,后2个 也相同,且前4个关系运算 符的优先级高于后2个。 所有关系运算符的优 先级都比算术运算符的优 先级低、但都比赋值运算 符的优先级高。
逻辑表达式的“非完全求解” 法
“非完全求解”法:当求出某个逻辑运算符的左边的运 算量的值就能够明确地确定这个逻辑运算的结果时,就结 束求解过程,直接给出运算结果。例如: (1) a && b && c 若a为“假”,直接求得a&&b及整个表达式的值为“假”; 若a为“真”,b为“假”,a&&b及整个表达式的值为 “假 ”。 只有当a为“真”时,才需要判别b的值;只有当a&&b 的值为“真”时,才需要判别c的值。 (2) a || b || c 若a为“真”,直接求得 a || b及整个表达式的值为“真”; 若a为“假”,b为“真”, a || b及整个表达式的值为 “真”; 只有当a为“假”时,才需要判别b的值;只有当a||b的 值为“假”时,才需要判别c的值。
注意:由于存在存储误差和转换误差,不能直接用 关系运算符“==”来判断两个实型数是否相等。 单精度实数:fabs(x-y)<0.000001 双精度实数:fabs(a-b)<1e-14
4.1.3 逻辑运算符与逻辑表达式
1.逻辑运算符及其优先级
C语言提供了三种基本的逻辑运算符。逻辑代数的其它 逻辑运算都可以转化为这三种逻辑运算的组合。
第7讲
关系运算与逻辑运算 if 语句
第四章 选择结构程序设计
4.1 关系运算和逻辑运算 4.2 if语句
4.1.1 逻辑值及其在C语言中的表示
关系运算和逻辑运算的运算结果都是一个逻 辑值,逻辑值只有两个值,即:“真”和“假”。 在C语言中,用数值1来表示“真”,用数值0来 表示“假”。
因此逻辑值也可以作为一个整数参与算术运 算。反之,对于参与关系运算或逻辑运算的任意 一个表达式,如果该表达式的值为零,就代表一 个逻辑“假”值;只要表达式的值不是零,无论 是正数还是负数,都代表一个逻辑“真”值。
相关文档
最新文档