- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3
5.2 逻辑表达式:
由逻辑运算符、圆括号把表达式连接起来的式子 ——表示条件
若所表示的条件成立、其值为1(非0)、否则其值为0 逻辑运算符:&& (与) 、|| (或)、!(非)
&&和||均为双目运算符,具有左结合性。!为单目 运算符,具有右结合性。 逻辑运算符和其它运算符优先级的关系可表示如下:
0
∥
要算
0
&& 不 算
非0 && 要 算
7
1、执行 int a,b,c; a=b=c=0;
a=1 停止不算
+ +a||+ +b&&+ +c;
后a、b、c值分别为1、0、0
2、执行 int a=5,b=6,x=1,y=2;
(a=x>y)&&(b= x>y);
后a、b值分别为0、6
值为 0 赋给a, 停止不算
第五章 分支结构程序设计
5.1 关系运算符和表达式 5.2 逻辑运算符和表达式 5.3 逻辑表达式的跳跃 5.4 if语句 5.5 switch语句
1
5.1 关系表达式
由关系运算符、圆括号把两个表达式连接起
来的式子。 ——表示条件
若所表示的条件成立、则其值为1(非0)、
否则其值为0。
非=
关系运算符:< 、<=、>、>=、==、!=
例:
97
8
表达式
a>=2 、3>9 、’a’ != ( a=8 ) 、 值为1
x+(y=3)==k*z 、(a!=3)>(k<l)
优先
成立为1
不成立为0 2
注意:数学中多个条件,例 a>b>c>d 应表示为 a>b && b>c && c>d
不能顺手也写为 a>b>c>d
关系运算符都是双目运算符,其结合性均 为左结合。关系运算符的优先级低于算术 运算符,高于赋值运算符。 在六个关系运算符中 ,<,<=,>,>=的 优先级相同,高于==和!=,==和!=的 优先级相同。
实现数的 互换
printf("%d %d %d\n",a,b,c);
}
输入:1 6 2↙
输出:6 2 1
13
例4:从键盘输入一个字符,判断它是否小写字母。
若是,将其转换成大写字母,否则不进行转换,作
后输出该字母。
#include<stdio.h>
main()
main()
{char c;
c=getchar();
5
例 : 设x=0,y=2,a=8,k=-1,q=1,z=1,则 1、x+y>3 && a==8
→2>3 &&1 → 0 &&1 → 0
2、x+y && ’a’
→ 2 &&97 → 1
3、x+(y=3)==k*z || !a
→0+3==-1 || !a → 0||0 →0
4、(x!=7) || ’a’
{int a,b,c,t;
照从大到小顺序输出
printf("\n input two numbers: ");
scanf("%d %d %d " ,&a,&b,&c);
if (a<b){ t=a;a=b;b=t;} if (a<c){ t=a;a=c;c=t;} if (b<c){ t=b;b=c;c=t;}
!(非)→&&(与)→||(或) “&&”和“||”低于关系运算符,“!”高于算术运算
符。
4
按照运算符的优先顺序可以得出: a>b && c>d 等价于
(a>b)&&(c>d)
!b==c||d<a 等价于 ((!b)==c)||(d<a)
a+b>c&&x+y<b 等价于 ((a+b)>c)&&((x+y)<b)
→0!=7||97 →1||97 →1
5、! ( x+y>3 && a==8 )
→!(2>3&&1) →!(0&&1) →!0 →1 6、! ( k*q ) → !(-1) →0 7、!!!x →!!(1) →!(0) → 1
6
5.3 逻辑表达式的跳跃
作第一个,知道结果,后面不作,如:
非0 ∥
不算
输入两个整数
if(a>b)
printf("max=%d\n",a);
else
输出其中大数
printf("max=%d\n",b);
}
输入:23 46
8
3、执行 int a,b,c;a=b=c= - 1;
+ +a && + +b || + +c;
1 a=0
3 c=0
2 不算,值为0
4 整体为0
后a、b、c值分别为0、-1、0
9
例1:
main()
{char c='k'; int i=1,j=2,k=3;
X为非0 0
float x=3e+5,y=0.85;
{ char c,a;
if(c<=‘z’&&c>=‘a’)c-=32;
c=getchar();
printf("%c\n",c);}
if(c<=‘a’ || c>=‘z’ )
a=c;
/*判断非小写字母情况*/
if(c<=‘z’&&c>=‘a’)
a=c-32; *判断是否是小写字母情况*/
printf("%c\nlse if(表达式) 语句1;
else 语句2;
语义:如果表达式的值 为真,则执行语句1,否则 执行语句2 。
后面不能 加;
15
void main() {int a, b;
例2的改写
printf("input two numbers: ");
scanf("%d %d",&a,&b);
为1,后面要算
printf("%d,%d\n",!x*!y,!!!x);
printf("%d,%d\n",x||i&&j-3,i<j&&x<y);
printf
("%d,%d\n",i==5&&c&&(j=8),x+y||i+j+k);
} 运行结果:0,0
为非0,后面不算
1,0 为0,后面不算 0,1
{int a,b,max;
printf("\n input two numbers: ");
scanf("%d %d",&a,&b);
max=a;
max=23
if (max<b) max=b;
max=46
printf("max=%d",max);
}
输入:23 46
输出:max=46
12
例3:void main() 功能:输入三个数,按
10
5.4 选择结构(if 语句)
5.4.1 if语句的三种形式 1、第一种形式为基本形式: if if(表达式) 语句
语义:如果表达式的值为真,则执行其后的语句, 否则不执行该语句。其过程可表示为下图。
表达式可 以是任意 合法表达 式,后面 不能加;
11
例2:void main()
此语句用于提示输入