C语言课件(运算符和表达式)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
运算符和表达式
相关概念
运算符
在C语言中用来表示某种计算的符号。
操作数
运算符操作的对象,可以为变量(已赋值)、常量或其他 有切确值的表达式。
表达式
运算符和合适的操作数组成的具有切确值的式子称为表达 式。
运算符和表达式
运算符分类
单目运算符(一元运算符)
只有1个操作数。
双目运算符(二元运算符)
具有2个操作数。(主要类型)
if (y>5) if (y<10) …;
例2:x<-10或者x>0
if (x<-10) …; if (x>0) …;
运算符和表达式
逻辑运算
逻辑运算
通过逻辑运算符把简单的条件组合起来,能够形成更加复 杂的条件。 例1:10>y>5 的逻辑表达式
(y>5)&&(y<10)
例2:x<-10或者x>0 的逻辑表达式
运算符和表达式 运算符和表达式
自增和自减运算符
自增和自减运算符
自增运算符:++
将操作数的值增一。
自减运算符:- 将操作数的值减一。
操作数必须是整型和字符型变量。 单目运算符。 优先级:2。 结合性:从右往左。
运算符和表达式
算术运来自百度文库符(特殊问题)
除号运算符的使用问题
当除号前后操作数全为整型数(包括char、int、long)时, 除号为整除运算。 当有任一操作数为实型数时则为普通除法运算。
三目运算符(三元运算符)
需要3个操作数。(唯一:条件运算符 ? :)
运算符和表达式
运算符的优先级和结合性
运算符的优先级
某些运算符先于其他运算符被执行。
例如,x + y * 4,先乘除后加减。
必要时可以用圆括号()改变计算顺序。
例如,求三个数的平均值。 错误的写法:a + b + c / 3 正确的写法:(a + b + c ) / 3
4321
c1 c2 c3 c4
= = = =
number%10 + '0'; number/10%10 + '0'; number/100%10 + '0'; number/1000 + '0';
//得到个位数字 //得到十位数字 //得到百位数字 //得到千位数字
printf("\n%c%c%c%c\n", c1, c2, c3, c4); }
如果a=8,结果为“真”,即条件满足 如果a=1,结果为“假”,即条件不满足
运算符和表达式
关系运算符
关系运算符
运算符
<
<= > >= == !=
含 义
小于
小于或等于 大于 大于或等于 等于 不等于
优先级
6
结合性
左结合
7
运算符和表达式
关系表达式
关系表达式
<表达式1> <关系运算符> <表达式2> 表达式1和表达式2可以是任何表达式。 举例
+ * / %
- b
f + 7 p – c bm x / y r mod s
- b
f + 7 p – c b * m x / y r % s
整数、字符、浮点数
整数、字符、浮点数 整数、字符、浮点数 整数、字符、浮点数 整数、字符、浮点数 整数、字符
说明
取模运算(%),结果是两个整数相除的余数。 例如,7%5 = 2,-2%3 = -2。
运算符与表达式
运算符和表达式
第二讲 运算符和表达式
引例 概念及分类 优先级和结合性 算术运算 关系运算 逻辑运算 位运算 赋值运算符 逗号运算符 条件运算符
运算符和表达式
引例
引例
问题
输入一个四位的正整数,反序输出该四位数的四个数字字符。
设计
用一个无符号整型变量number保存输入的四位正整数。 依次分解出个位数字、十位数字、百位数字和千位数字,并分别放 到字符变量c1、c2、c3和c4中。 怎么分解?
运算符和表达式
位运算
位左移<<,位右移>>,位与&,位或|,位异或^ 位运算按二进制数运算法则进行计算 将另立专题讲解运算规则
运算符和表达式 运算符和表达式
赋值运算
赋值运算符
简单赋值运算符:= 复合赋值运算符:+=,-=,*=,/=,%= 优先级:14 结合性:从右往左
赋值表达式
<变量> <赋值运算符> <表达式> d = 23 作用:将表达式的值赋给变量。 赋值表达式的值就是被赋值的变量的值。
运算符和表达式 运算符和表达式
简单赋值运算
简单赋值运算符:= 举例
c=a+b a=b=c=d=10 a=(a+b)
a=(b=(c=(d=10)))
a=5, b=8, x=a+b
x=(a=5)+(b=8)
类型转换
如果赋值运算符右边表达式的类型与左边变量的类型不一 致,则把右边表达式值的类型按左边变量的类型进行转换, 然后再赋值。 例如,int n = 3.6; n的值为3。
逻辑表达式的值
1:真 0:假
整数
运算符和表达式
逻辑运算
逻辑运算真值表
a !a
1
0
0
1
a 1 1 0 0
b 1 0 1 0
a&&b 1 0 0 0 a 1 1 0 0 b 1 0 1 0 a||b 1 1 1 0
!
&&
||
运算符和表达式
逻辑表达式的使用
将下面的条件用C语言的逻辑表达式表示
例1:1≤x≤10且x≠7
x>=1&&x<=10&&x!=7
例2:y能被4整除,但不能被100整除
(y%4==0)&&(y%100!=0)
逻辑与和逻辑或具有短路能力
例1:gender==‘F’&&age>=65
如果gender不等于’F’,整个表达式的值就是假,求值过程结束。
例2:average>=90||finalExam>=90
运算符的结合性
当出现并列的运算优先级别相同的运算符时,由运算符的 结合性决定计算的次序。
例如,x * y / z
运算符和表达式 运算符和表达式
算术运算符
常用的算术运算及运算符
运算符名称 正号 算术运算符 + 代数表达式 + a C语言表达式 + a 适用的数据类型 整数、字符、浮点数
负号
加 减 乘 除 取模
a>b m+n<=20 c!=„y‟ (x>z)==(y>z)
运算符和表达式
关系表达式
关系表达式的值是一个逻辑值:“真”或“假”
C语言没有逻辑类型,因此
用整数 1 表示“真” 用整数 0 表示“假”
即关系表达式的值是整数 1 或 0 。 举例
若a=1,b=2,c=3
a>b a+b<=c (a>c)==(b>c) „Y‟!=„y‟
0 1 1 1
运算符和表达式
关系表达式的使用
举例:写出下面各条件的关系表达式
x为不小于 -5 的整数 x为非零的数 x的平方大于m与n的和
x>=-5 x!=0 x*x>(m+n)
运算符和表达式
关系运算的不足
关系表达式只能表达一些简单的条件
grade>=60 total>1000
每个判断只是对一个条件进行测试。 如果要对多个条件进行测试就要在独立的语句或嵌套的if或 if-else结构中进行测试。 例1:10>y>5
(x<-10)||(x>0)
逻辑运算符
!(逻辑非) &&(逻辑与) ||(逻辑或)
运算符和表达式
逻辑表达式
逻辑表达式
[<表达式1>] <逻辑运算符> <表达式2> 表达式1和表达式2可以是任何表达式。 举例
(x>5)||(x<-5) !(a<b)&&(m!=n) (a+b>c)&&(a+c>b)&&(b+c>a)
运算符和表达式
小结
运算符的相关概念 运算符的分类
按操作数个数分 按操作类型分
各类运算符及表达式知识 优先级和结合性总结
– 利用除法、取模等运算。
顺序输出变量c1、c2、c3和c4中的字符。
运算符和表达式
引例
引例
源程序(cw04-01.c)
#include <stdio.h>
请输入一个四位的正整数: 1234
void main() { unsigned number; char c1, c2, c3, c4; printf("请输入一个四位的正整数:"); scanf("%u", &number);
取模运算符的使用问题
操作数只能整型数据(char、int、long)。
自加/自减运算符的使用问题
++(--)在前:先加(减)后用; ++(--)在后:先用后加(减)。
运算符和表达式
自增和自减运算
举例(cw0404.c)
#include <stdio.h>
void main() { int i=6, a, b; printf("%d\n", ++i); printf("%d\n", i++); a=--i; printf("%d\n", a); b=i--; printf("%d\n", b);
printf("%d\n", -i++); printf("i=%d\n", i);
}
7 7 7 7 -6
i = ?
运算符和表达式
关系运算
关系运算(比较运算)
比较两个值,结果为“真”或“假”。 举例:a>3
如果a=8,则结果为“真” 如果a=1,则结果为“假”
用关系运算进行条件判断
关系表达式表示一个条件,根据其结果判断条件是否满足。 举例:a>3
运算符和表达式
条件运算符
条件运算符:? :
三目运算符 右结合 条件表达式 <表达式1>?<表达式2>:<表达式3> 举例
c=a>b?a:b;
printf(“%s”,(grade>=60)? “Passed”:“Failed”);
(grade>=60)?printf(“Passed”):printf(“Failed”);
如果average大于等于90,整个表达式的值就是真,求值过程结束。
运算符和表达式
程序设计举例
举例(cw0602.c)
问题:任意输入一个字符,判断它是字母还是数字。
#include <stdio.h> void main() { char c;
c=getchar();
if ((c>=„A‟&&c<=„Z‟)||(c>=„a‟&&c<=„z‟)) printf(“%c is a letter.”, c); else if (c>=„0‟&&c<=„9‟) printf(“%c is a digit.”, c); else printf(“%c is neither a letter nor a digit.”, c); }
运算符和表达式 运算符和表达式
复合赋值运算
复合赋值运算符:+=, -=, *=, /=, %=
简化了赋值表达式
<variable> <operator>= <expression> 由下面的表达式简化而来 <variable> = <variable> <operator> <expression>
举例
a+=5 x*=y+7 x+=x-=x*=x a=a+5
≡
x=x*(y+7) x=x+(x=x-(x=x*x))
运算符和表达式
逗号运算符
逗号运算符:,
优先级:15。 结合性:从左往右。
逗号表达式
<表达式1>, <表达式2>, …, <表达式n> x=1, (a=b+1), i++ 求解过程:先求表达式1的值,再求表达式2的值,· · · ,直 至求出表达式n的值。 表达式的值为表达式n的值。