第五章逻辑运算和判断选取控制
04逻辑运算和判断选取控制

第四讲第五章逻辑运算和判断选取控制内容:§5.1关系运算符和关系表达式§5.2逻辑运算符和逻辑表达式§5.3 if语句§5.1 关系运算符和关系表达式在程序设计中,我们经常会遇到对两个数据进行比较.比如说,在上节的最后例3.12中,如果我们在计算三角形的面积之前,能够对判别式disc的值进行判断,对于disc<0的情况进行另外的理,就不会出现令人啼笑皆非的结果了。
在计算机中程序设计中,比较运算是通过关系运算实现的.所谓关系运算实际上就是比较运算,即判断结果是否符合给定的条件。
一、关系运算符及其优先等级1. 关系运算符: < > <= >= == !=小于大于小于等于大于等于等于不等于2. 关系运算符的优先次序:<、 >、<=、>= ──→ ==、!=高──→ 低3. 关系运算符与其它运算符的优先次序:关系运算符的优先等级低于算术运算符,高于赋值运算符。
二、关系表达式1. 关系表达式:用关系运算符将两个表达式(算术、关系、逻辑、赋值表达式均可)连起来的式子叫关系表达式。
2. 关系表达式的取值: 关系表达式的值是一个逻辑值,即"真"或"假",条件成立取值为"真",以"1"代表"真";条件不成立,取值为"假",以"0"代表"假"。
§5.2 逻辑运算符和逻辑表达式除了关系运算之外,我们还会遇到这样的问题:若干个开关并联,在何种条件下,电路接通;若干个开关串联,在何种条件下,电路接通.这类问题就是我们上个学期讲过的逻辑运算问题。
一、逻辑运算符1. 逻辑运算符: && || !逻辑与逻辑或逻辑非(双目) (双目) (单目)2. 逻辑运算符的优先次序: ! ──→ && ──→ ||(非) (与) (或)高─────→低逻辑运算符与其它运算符的优先次序: 逻辑运算符中的!(非)运算符的优先等级高于算术运算符;||(或)和&&(与)运算符的优先等级低于关系运算符但高于赋值运算符。
第5章 逻辑运算和选择结构程序设计

else printf("Other charater!\n");
}
第21页,共30页。
【程序5.5】解一元二次方程ax2+bx+c=0。
分析 一元二次方程的解的情况有下列几种可能:
a=0,不是二次方程;
b2-4ac=0,有两个相等实根:
x
b 2a
b2-4ac>0,有两个不等实根:
b b2 4ac x
2a
b2-4ac<0,有两个共轭实根。
xb
(b24ac) i
2a
2a
第22页,共30页。
a=0
真
假
真 b2-4ac=0
假
输出 “ 非二 次方
第6页,共30页。
逻辑或的真值表
x
y
x||y
非0 非0
1
非0
0
1
0
非0
1
0
0
0
逻辑与运算:两个运算量中只要有一个运算量非0 ,结果就为1(逻辑真)。
第7页,共30页。
逻辑非的真值表
X !X
非0 0
0
1
逻辑非运算:使运算量的值变反 ,即非0值变0值。
第8页,共30页。
逻辑表达式运算的优先级
优先级(从高到低):
程”
输出 两个 相等 实根 :
机器人程序设计(C语言)(第2版)章节练习题及参考答案

第一章一种新的C语言学习方式1.一台能够工作的计算机包括?CPU (Central Processing Unit,中央处理单元,进行运算和控制,包括运算器和控制器等)、存储器(如RAM、ROM等)、输入设备、输出设备(包括串行/并行接口、USB等)。
其中,RAM (RandomAccess Memory,随机存储器)主要用于存储数据,ROM (RcadOnlyMemory, 只读存储器)主要用于存储程序。
2.单片机工作时需要什么?需要稳定的电源、晶振、外部存储器和编程调试接口,就像计算机工作时需要电源、晶振、硬盘或其他大容量外部存储器和操作系统一样。
微控制器是将单片机独立工作所需的电源适配器、晶振、外部存储器和串口转换电路等封装到一个模块上,这样就能直接与计算机连接并进行编程开发,不需任何其他芯片和电路。
3. AT89S52是一种什么样的单片机?是一种高性能、低功耗的8位单片机,内含8 KBISPdn-System Programmable系统在线编程)可反复擦写IOOO次的Flash只读程存器,采用ATMEL公司的高密度非易失性存储技术制造,兼容标准MCS51指令系统及其引脚结构。
在实际工程应用中,功能强大的AT89S52 已成为许多高性价比嵌入式控制应用系统的解决方案。
4. Progisp是一款什么样的软件?是一款免费下载的ISP软件,不需要专门的安装即可使用,非常方便。
使用该软件,读者可以将C语言程序生成的可执行文件下载到机器人单片机上。
使用时需要1根USBA转B 信号线。
5.简述串口调试工具的特点。
串口调试工具就是串行通信接口调试软件,集数据发送、数据接收、数据监控、数据分析等功能于一身,具有小巧精致、操作简捷、功能强大的特点,可以在串口通信监控、设备通信测试工作中有效提高效率。
6. pr i ntf ()函数称为?称为格式输出函数,其功能是按用户指定的格式,把指定的数据输出显示。
Print ()函数是C语言提供的标准输出函数,定义在C语言的标准函数库中,要使用它,必须包括定义标准函数库的头文件stdio. h o第二章最简单的C程序设计——机器人做算数1. C语言用什么整型变量?C语言用关键字imt定义整型变量。
c语言程序设计 第五章 程序控制流程——选择结构

1. 基本语法格式
if(表达式)
语句
说明:
(1) if语句的执行过程是先计算表达式的值,如果非0就执行包含在if中的语句;如果为0就不执行该语句。如下图所示:
(2) if语句中的表达式可以是任意的有值表达式,实际编程时往往使用关系表达式或将多个关系表达式用逻辑运算符连接起来的逻辑表达式。
main()
{
double a=.9*9,b=.1;
double c=0.1+0.2;
printf("c==0.3 %d\n",c==0.3);
printf("a==b %d\n",a==b);
}
【例5.4】比较两个浮点数是否相等的正确方法
#include <stdio.h>
#include <math.h>
#include <stdio.h>
main()
{
int a10,b=50,c=30;
if(a=b+c) printf("*******\n");
else printf("$$$$$$$\n");
}
【例5.14】输入两个实数,按代数值由小到大的次序输出这两个数。
#include <stdio.h>
main()
scanf("%d,%d,%d",&a,&b,&c);
max=a;/*先假定变量a的值最大*/
if(max<b) max=b;/*比较变量max值和变量b值的大小,如果b大,就将b赋给max*/
if(max<c) max=c;/*比较变量max值和变量c值的大小,如果c大,就将c赋给max*/
04_逻辑运算和判断选取控制

低
a > b && x > y a == b || x == y ! a || a > b b+!a+c c = a || b
(a > b) && (x > y) (a == b) || (x == y) (!a) || (a > b) b + (! a) + c c = (a || b)
8
§4.2 逻辑运算符和逻辑表达式
17
§4.3 if语句
二、使用if语句的注意事项
如果语句i为多个操作语句,则必须用{ }括起 来成为一个复合语句。 if ( r > 0) { circle = 2 * 3.1415926 * r; area = 3.1415926 *r *r; }
18
§4.3 if语句
[例2] 输入三个实数,按从小 [例1] 输入两个实数,按从小到 到大输出。 大输出。 #include <stdio.h> #include <stdio.h> main() main() { { float a,b,c,t; float a,b,t; scanf("%f,%f,%f", &a,&b,&c); scanf("%f, %f", &a, &b); if(a>b) {t=a;a=b;b=t;} if(a>b) if(a>c) {t=a;a=c;c=t;} printf("%f,%f\n",b,a); if(b>c) {t=b;b=c;c=t;} else printf("%f,%f\n",a,b); printf("%f,%f,%f",a,b,c); } } if(a>b) { t=a; a=b; b=t; } 19 printf("%f,%f\n",a,b);
C语言第五章

学习提示: (1)算法包括输入、处理和输出三个部分 ,其中处理部分为选择结构。
b=t
F
输出a,b 结束
5
信息科学与技术学院 软件工程系
选择结构算法设计
South West Jiaotong University
【例5. 1】输入a、b值,如果a>b,那么交换a和b,使得a≤b。 解决该问题的主要步骤为: 开始
17
信息科学与技术学院 软件工程系
关系运算符和关系表达式
【例】编写以下程序,查看结果。 #include <stdio.h> void main() { int a,b,c; int d,e,f; a=4,b=5,c=6; d=a>b; e=a<b<c; f=c>b>a; printf("%d %d %d \n",d,e,f); }
South West Jiaotong University
20
信息科学与技术学院 软件工程系
逻辑运算符- 优先级
• 各类运算符的优先级关系:
South West Jiaotong University
– !(非)高于 &&(与) 高于 ||(或)。 – &&(与)和||(或)低于关系运算符 – !(非)高于 算术运算符
1)任何数值(字符、整数、实数、指针)都可以表示 逻辑意义,只要数值不等于0,就表示“真”,而0 表示“假”;
2)关系与逻辑运算表达式的运算结果为“真”,表达 式的值为int型整数1,运算结果为“假”,则表达 式的值为int型整数0。
由2)可知,C语言的关系运算表达式和逻辑运算表 达式应该属于整型表达式范畴。
第五章 逻辑运算和选择结构

(2)在switch-case语句中,多个case可以共用一 条执行语句。 例: …… case‟A‟: case‟B‟: case‟C‟: printf(“>60”);break; ……
(3)若case后面的语句执行完后没有break语句,程序 将顺序执行下面的case分支,直到遇到break语句,跳 出switch-case语句或switch-case语句结束。 例: …… switch(a>b?1:2) /* a=3,b=6 */ { case 1: a=100; case 2: b=a+b; case 3: a=b+a; default: b--; } printf(“%d,&d\n”,a,b); 结果: 12,8
例:
a&&b 若a、b为真,则a&&b为真,值为 1
a||b
若a、b之一为真,则a||b为真,值为 1
!a
若a为真,则!a为假,值为 0
逻辑运算规则表
a b !a !b a&&b a||b
非0 非0 0 0 例:
非0 0 非0 0
0 0 1 1
0 1 0 1
1 0 0 0
1 1 1 0
设 x=9, y=3,
< <= > >= == !=
a<b
a小于b a小于或等于b a大于b a大于或等于b a等于b a不等于b
小于或等于 a<=b
a>b 大于或等于 a>=b
大于 等于 不等于
a==b a!=b
优先级相同 (低)
关于优先次序的说明如下: (1)关系、算术、赋值运算符的优先级关系如下:
逻辑运算和判断选取控制

逻辑运算和判断选取控制1C语言中,逻辑“真”等价于A 大于零的数B 大于零的整数C 非零的数D 非零的整数参考答案C2C语言的 switch 语句中,case 后A 只能为常量B 只能为常量或常量表达式C 可为常量及表达式或有确定值的变量及表达式D 可为任何量或表达式参考答案B3main(){ int a,b,d=241;a=d/100%9;b=(-1)&&(-1);printf(“%d,%d”,a,b);}A 6,1B 2,1C 6,0D 2,0参考答案B4若有int x=10,y=20,z=30;以下语句执行后x,y,z的值是()if (x>y)z=x;x=y;y=z;A x=10,y=20,z=30B x=20,y=30,z=30C x=20,y=30,z=10D x=20,y=30,z=20参考答案B5为了避免嵌套的if—else语句的二义性,C语言规定else总是与()组成配对关系。
A 缩排位置相同的ifB 在其之前未配对的ifC 在其之前未配对的最近的ifD 同一行上的if参考答案C6以下程序段的输出结果是。
int a=10,b=50,c=30;if(a>b)a=b;b=c;c=a;printf("a=%d b=%d c=%d\n",a,b,c);A a=10 b=50 c=10B a=10 b=30 c=10C a=50 b=30 c=10D a=50 b=30 c=50参考答案B7已知int i=10;表达式"20-0<=i<=9"的值是A 0B 1C 19D 20参考答案B8为判断字符变量c的值不是数字也不是字母时,应采用下述表达式A c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122B !(c<=48||c>=57&&c<=65||c>=90&&c<=97||c>=122)C c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122D !(c>=48&&c<=57||c>=65&&c<=90||c>=97&&c<=122)参考答案D9设有int i, j, k; 则表达式i=1,j=2,k=3, i&&j&&k 的值为A 1B 2C 3D 0参考答案A10逻辑运算符两侧运算对象的数据类型A 只能是0或1B 只能是0或非0正数C 只能是整型或字符型数据D 可以是任何类型的数据参考答案D11能正确表示“当x的取值在[1,10]和[200,210]范围内为真,否则为假”的表达式是()A (x>=1)&&(x<=10)&&(x>=200)&&(x<=210)B (x>=1)||(x<=10)||(x>=200)||(x<=210)C (x>=1)&&(x<=10)||(x>=200)&&(x<=210)D (x>=1)||(x<=10)&&(x>=200)||(x<=210)参考答案C12判断char型变量ch是否为大写字母的正确表达式是A ’a’<=ch<=’z’B (ch>=’a’)&(ch<=’z’)C (ch>=’a’)&&(ch<=’z’)D (‘a’<=ch)and(‘z’>=ch)参考答案C13已知x=43,ch=’a’,y=0;则表达式(x>=y&&ch<’b’&&!y)的值是()A 0B 1C 语法错误D 假参考答案B14执行下列语句后a的值为int a=5,b=6,w=1,x=2,y=3,z=4;(a=w>x)&&(b=y>z);A 5B 0C 2D 1参考答案B15以下程序的输出结果是()main(){ int a=5,b=0,c=0;if(a=b+c) printf(“***\n”);else printf(“$$$\n”);}A 有语法错误不能通过编译B 可以通过编译但不能通过连接C ***D $$$参考答案D16以下程序的输出结果是()main(){ int m=5;if(m++>5) printf(“%d\n”,m);else printf(“%d\n”,m--);}A 4B 5C 6D 7参考答案C17若运行时给变量x输入12,则以下程序的运行结果是()main(){ int x,y;scanf(“%d”,&x);y=x>12?x+10:x-12;printf(“%d\n”,y);}A 0B 22C 12D 10参考答案A18若w=1,x=2,y=3,z=4,则表达式w<x?w:y<z?y:z的值是A 4B 3C 2D 1参考答案D19设有int a=2,b;则执行b=a&&1;语句后,b的结果是A 0B 1C 2D 3参考答案B20设有int m=1,n=2;则++m==n的结果是A 0B 1C 2D 3参考答案B21设有int n=2;则++n+1==4的结果是A trueB falseC 1D 0参考答案C22设有int n=2;则++n+1==4,n的结果是A 1B 2C 3D 4参考答案C23以下使i的运算结果为4的表达式是A int i=0,j=0; (i=3,(j++)+i);B int i=1,j=0; j=i=((i=3)*2);C int i=0,j=1; (j==1)?(i=1):(i=3);D int i=1,j=1; i+=j+=2;参考答案D24当a=5,b=2时,表达式a= =b的值为A 2B 1C 0D 5参考答案C25若执行以下程序时从键盘上输入9,则输出结果是main(){ int n;scanf("%d",&n);if(n++<10) printf("%d\n",n);else printf("%d\n",n--);}A 11B 10C 9D 8参考答案B26对如下程序,若用户输入为A,则输出结果为()main(){char ch;scanf(“%c”,&ch);ch=(ch>=‘A’&&ch<=‘Z’)?(ch+32):ch;printf(“%c\n”,ch);}A AB 32C aD 空格参考答案C27下列表达式中能表示a在0到100之间的是A a>0&a<100B !(a<0||a>100)C 0<a<100D !(a>0&&a<100)参考答案B28在以下给出的表达式中,与while(E)中的(E)不等价的表达式是A (!E=0)B (E>0||E<0)C (E==0)D (E!=0)参考答案C29已知:int x,a,b;下列选项中错误的if语句是A if(a=b) x++;B if(a<=b) x++;C if(a-b) x++;D if(x) x++;参考答案B30当把以下四个表达式用作if语句的控制表达式时,有一个选项与其它三个选项含义不同,这个选项是()。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
• 4、条件表达式不能取代一般的if语句 • 5、三个表达式的类型问题
• §5.4 switch语句 • switch语句是个多分支选择语句。 • C语言中用于处理多支问题,可用嵌套if
语句,也可用带else if的语句来完成。 • 但switch语句以更简洁的形式实现多分支
选择。语句的一般形式为:
• 5.3.2 if语句的嵌套--解决多支问题 • 在一个if语句是又包含一个或多个if语句
的称为if语句的嵌套 • if(条件1) • if( 条件2)语句1 • else 语句2
• else • if(条件3)语句3 • else 语句4 • 应注意if与else的配对关系。从最内层开
始,else总是与它上面最近的 (未曾配 对
• §5.3 选择控制语句--if
• if语句可用于实现,根据条件从两组语句 中选择其一执行的结构。
• 5.3.1 if语句的三种形式
• 1、 if(表达式)语句
• if(x>y)printf(“%d\n”,x);
• 2、 if(表达式)语句1 else 语句2
• if(x>y)printf(“%d\n”,x);
第五章 逻辑运算和判断选取控制
• 系运算本质上是“比较运算”。通过比 较看比较的结果。如:9<3,结果为假。
• 5.1.1 关系运算符、优先级与结合性
• 分为两组:左结合性
• < <= > >= 如:a>b
• == !=
如:a>b!=c
• 5.1.2 关系表达式
• 例2、输入三个数,按小大顺序输出 • main() • {float a,b,c,t; • scanf(“%f,%f,%f”,&a,&b,&c); • if(a>b){t=a;a=b;b=t;} /*a<b*/ • if(a>c){t=a;a=c;c=t;} /*a<c*/ • if(b>c){t=c;c=b;b=t;} /*b<c*/ • printf(“%f,%f,%f”,a,b,c); •}
• 用关系运算符将两个表达式(算术、关 系、逻辑、赋值、逗号、字符表达式) 连接起来的式子,称为关系表达式,其 结果是一个逻辑值,即“真”或“假”。
• 如:a+b>b*c
•
(a=3)<(b=5)
•
(a>b)==c
•
f=a>b>c
• 计算当:a=3,b=2,c=1时各表达式的值
• 关于逻辑型值,一定要注意的是“C语言 中没有逻辑型数据”,在C中,“假”就 表示为0、“真”就是1(非0)。
•
else pintf(“%d\n”,y);
• 3、 if(表达式1)语句1 • else if(表达式2)语句2 • else if(表达式3)语句3
• …… • else if(表达式n)语句n • else 语句m • 解决多支函数的问题的实现 • 若干说明问题: • 1、表达式 2、语句中的分号 3、复合语句
• §5.2 逻辑运算符和逻辑表达式 • 概念:用逻辑运算符将关系表达式或逻
辑量连接起来,并能计算出一个逻辑值 的式子。如:(9<3) AND (x>y) • 5.2.1 逻辑运算符、优先级与结合性 • 提供了三种逻辑运算符:左结合性
• && 逻辑与AND、双目运算符 • || 逻辑或OR、双目运算符 • ! 逻辑非NOT、单目运算符 • 看表,体会逻辑运算的含义。 • 优先级不同。 • 5.2.2 逻辑表达式求值过程 • 设:a=3,b=4,c=5求值 • 1、a+b>c&&b==c • 2、!(a>b)&&!c||1
• max= ( a>b)? a:b;
• 其中( a>b)? a:b叫“条件表达式”。表 达式求值过程为:
• 条件运算符是? : 它是个三目运算符
• 条件表达式的一般形式为:
•
表达式1?表达式2:表达式3
• 说明:
• 1、条件表达式求值过程
• 2、条件运算符的优先级
• 3、条件运算符的结合方向:右结合性
• 的)if配对。不能期望通过在书写程序时 对齐if与else单词来实现配对。
• 例5.3,并观察流程图 • 5.3.3 条件运算符 • 若if语句中,当表达式为0或为1时,且都
执行一个赋值语句给同一变量赋值时, 可以用简单的条件运算符来处理。如:
• if( a>b)max=a;
• else max=b; • 可用条件运算符来处理:
• 3、n个常量表达式应各不相同
• 4、case出现的次序可以不同,不影响结 果
• 5、执行完一个case后面的语句后,流程 控制转移到下一个case继续执行。利用 break语句实现跳出switch语句。
• 6、多个case可以共用一组执行语句。
• §5.5 程序举例 • 例:习题5.5
• 重点内容 • 1、三类运算符与表达式 • 2、实现两支与多支选择控制结构 • 习题 • 5.4、5.5、5.6
• 例1、输入两个数,按由小到大次序输出 这两个数。
• #include “stdio.h” • main() • {int a1,a2,c; • scanf(“%d,%d”,&a1,&a2); • if(a1>a2){c=a1;a1=a2;a2=c;} • printf(“%d %d”,a1,a2); •}
• switch(表达式)
• { case 常量表达式1:语句1
• case 常量表达式2:语句2
• ……
• case 常量表达式n:语句n
• default
:语句n+1
•
}
• 举例说明其执行过程。
• 说明:
• 1、 switch后面表达式类型可是int与char
• 2、执行过程, default 的执行