2.2常用的运算符和表达式

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

1、关系运算符
(1)C语言提供6种关系运算符:
<, <=, >, >=,
==, !=
小于,小于等于,大于,大于等于,等于,不等于
(2)优先级(运算次序) 系统规定:<,<=,>,>=优先级为6;
==,!=优先级为7。 2、关系表达式 关系表达式:用关系运算符将两个表达式连接起来, 进行关系运算的表达式。 注:关系表达式的值显然应该是逻辑值(“真”或 “假”),整数“1”为“真”,“0”为“假”。
说明: 1、在强制类型转换时,只得到一个所需类型的 中间变量,原来变量的类型没有发生变化; 2、(int)(x+y)和(int)x+y不同:前者是将 x和y相加后,把结果转换为整型,而(int)x+y 是把x转换成整型后再与y相加。
6、各类数值型数据之间的混合运算 在C程序中,常常会出现不同类型变量混合运
Fra Baidu bibliotek算的情况,需将不同类型的数据转换成相同类型 的数据,再进行运算。
类型的转换有两种情况: 自动转换和强制转换。 转换规则如图所示:
自动转换发生在不同数据类型的数据混合运算时, 由编译系统自动完成。规则如下: (1)若参与运算量的类型不同,则先转换成同一类 型,然后再进行运算; (2)转换按数据长度增加的方向进行,以保证精度 不降低; (3)所有的浮点运算都是以双精度进行的,即使仅 含float单精度量运算的表达式,也要先转换成 double型,再计算; (4)char型和short型参与运算时,先转换成int型。
例1:设x1=1,x2=2,x3=3则: (1)求x1>x2的值 main() {
int x1=1,x2=2,x3=3; printf("%d\n",x1>x2); getch( ); }
分析:因为x1=1,x2=2,所以x1>x2不成立,它的 值为0。
(2)求(x1>x2)!=x3的值 main( ) {
如果初值i=1,表达式+ +i的值为2,此时i的值也为2;
如果初值i=1,表达式i+ +的值为1,此时i的值为2; 说明: + +i,- -i:i自加(减)1后,再参与其它运算;
i+ +,i- -:先参与其它运算,后i值自加(减)1。
例2: main( ) {
int i=1,a,b=2; a=+ +i*b; /*+ +在变量的前面,i先加1等于2, 再参与表达式计算,与b相乘。*/ printf(“%d\n”,a); printf(“%d\n”,i); getch( ); } 运行结果:4
float a=12.3456; a=(int)(a*100+0.5)/100.0; printf(“a=%f”,a); getch( ); } 程序运行结果为: a=12.350000
案例分析: 1、由于(int)的作用, (int)(a*100+0.5)运算的 结果为整型1235; 2、除100.0运算时自动转换为实型12.350000;
x*=(y-17) (2)将“=”左边的全部移到“=”右边表达 式的左边:
=x*(y-17) (3)在“=”左边补上x
x=x*(y-17)
复合赋值符的优先级和赋值运算符相同(14级)
结合性也相同。
例1: main( ) {
int x=3,y=5; x*=x+y; printf(“x=%d\n”,x); } 运行结果: x=24
如:+、-、*、/、%中*、/、%的优先级高于+、 -;*、/、%优先级为3;+、-优先级为4。
3、自加、自减运算符 运算符:+ +,- 功能:使变量的值自加1或自减1。 例如:+ +i与i+ +的作用都相当于i=i+1.
- -i与i- -的作用都相当于i=i-1。
注: ①自加1,自减1运算符均为一元运算,都具有右结合 性,其优先级为2。 ② + +i与i+ +的区别:
(3)优先级 ! 优先级为2; && 优先级为11; || 优先级为12。
常用运算符的优先级由高到低顺序为: !→算术运算→关系运算→&& →|| →赋值运算
2、逻辑表达式 定义:C语言中指将若干个表达式连接起来,进 行研究逻辑运算的式子,称为逻辑表达式。 例如:需要说明“x>=1”同时又有“x<2”;可 以用如下的逻辑表达式: (x>=1)&&(x<2)
案例分析:
第一行结果:b=2,所以!b的值为0,导致a*!b=0;a=2,所 以!a=0,!!a=1 第二行结果: ||是或运算,-1.5不为0,所以x||-1.5的值为 1 a=2,b=2,所以a>b不成立,导致a>b的值为0 第三行结果:a=2,所以a==5不成立,即a==5值为0,又因为 &&是“与”运算,所以a==5&&(b=2)的值为0,因为x=2是 赋值运算,x的值为2,非0,所以x=2的值为1,a=2,b=2所以 a==b成立,所以(x=2)&&a==b的值为1
(2)“/”除法运算,当参与运算的量均为整型时, 结果也为整形,舍去小数;如果运算量中有一个是 实型,则结果为双精度实型。
(3)“%”求余运算,要求参与运算的量均为整型。 如,a%b,其值等于两数相除后的余数,符号与a相同。
例1、 main( ) {
int a,b,c,d; float x,y,z; a=1/3; /*两个整数相除,结果为整数,a=0*/ b=-10/(-3); c=1%3; /*c的值是1,即1除以3得余数1*/ d=-10%(-3); x=1.0/3; y=-10/3.0; printf(“\n%d,%d\n”,a,b); printf(“\n%d,%d\n”,c,d); printf(“%f,%f\n”,x,y); getch( ); }
5、复合的赋值运算符 在赋值符“=”之前加上其它二元运算符可构成
复合赋值符。如:+=,-=,*=,/=,%= 例如:
a-=15 等价于a=a-15 (1)将“=”左边的全部移到“=”右边表达式的 左边: =a-15 (2)在“=”左边补上a
a=a-15
x*=y-17 等价于x=x*(y-17) (1)将“=”右边的表达式加上括号。
2
例3: main( ) {
int i=1,a,b=2; a=i++*b; /*++在变量的后面,i先参与表达式 计算,即与b相乘,所以a=1*2=2.*/ printf(“%d\n”,a); printf(“%d\n”,i); getch( ); } 运行结果:2
2
记忆方法: (1)运算符+ +、- -在变量的前面,表示变量先加1 或减1,然后再参加表达式的运算;
3、赋值表达式的值 赋值表达式的值就是被赋值变量的值。 由于C语言将“=”定义为赋值运算符,因
此其值过程应按运算符的规定进行。 例如:假如int a=12,b=5,c=3; 则x=a/b*c 的计算结果为x=6; 赋值表达式a=b=c=13的值为13。 a=b=c=13可理解为a=(b=(c=13)); x=(a=10)+(b=20)的值为30。 其含义是把10赋给a,20赋给b,再把a,b相加的 和赋给x,故x应等于30。
(2)运算符+ +、- -在变量的后面,表示变量 先参加表达式的运算,然后再加1或减1。 (3)+ +、- -只影响它所在表达式的值; (4)无论+ +、- -在变量前或在变量后,它所 在的表达式计算结束后,它的值已经加上或减 去1了。
二、关系运算符和关系表达式
关系运算符:把两个量进行比较的运算符。
四、赋值运算符 1、赋值运算符:
= 作用:将一个数据赋给一个变量。 如:“x=12”的作用是把常量12赋给变量x。 注:①也可以将一个表达式的值赋给一个变量。 ②赋值运算符具有右结合性; ③赋值运算符的优先级为14。
2、赋值表达式 一般形式为:变量=表达式 说明:表达式是指由C的合法运算符连接常量、 变量、函数而成的合法式子。
上述表达式在此为算术表达式,而不是关系表达
式,其值为4。
三、逻辑运算符 1、逻辑运算符 (1)C语言提供三种逻辑运算符: && 读作:逻辑与 || 读作:逻辑或 ! 读作:逻辑非 例如:(x>=1)&&(x<2), !(x<1), x||y
(2)运算规则 (1)&&:二元运算,当且仅当两个运算量的值都为 “真”时,运算结果为“真”,否则为“假”。 等价于“同时”; (2)||:二元运算,当且仅当两个运算量的值都为 “假”时,运算结果为“假”,否则为“真”。等价 于“或者”。 (3)!:一元运算,当运算量的值为“真”时,运 算结果为“假”;当运算量的值为“假”时,运算结 果为“真”。即“否定”。
2、算术表达式和运算符的优先级和结合性 (1)算术表达式:算术表达式是由算术运算符连接常 量、变量、函数而成的式子。 注:单个常量、变量也是表达式。如: a 3 A+3 sin(x) (x+y)*x-(a+b)/d
(2)运算符的优先级:C语言中,运算符的运 算优先级共分为15级,1级最高,15级最低,优 先级较高的先于优先级较低的进行运算,优先级 相同时,则按运算符的结合性规定的结合方向处 理。(运算符的优先级见附录3)
int x1=1,x2=2,x3=3; printf("%d\n",(x1>x2)!=x3); getch( ); }
分析:x1>x2不成立,因此(x1>x2)的值为0, 所以0!=x3成立,它的值为1。
(3)x1<x2<x3的值 main( ) {
int x1=1,x2=2,x3=3; printf("%d\n",x1<x2<x3); getch( ); }
例:求逻辑表达式的值 main() {
int a=2,b=2; float x=0,y=2.3; printf("%d,%d\n",a*!b,!!a); printf("%d,%d\n",x||-1.5,a>b); printf("%d,%d\n",a==5&&(b=2),(x=2)&& a==b); getch(); }
4、类型转换 如果赋值运算符两边的数据类型不同,系统
将自动进行类型转换,即把赋值号右边的类型换 成左边的类型: (1)实型赋予整型,舍去小数部分。如: int x; x=3.14159; 结果x=3.
(2)整型赋给单、双精度变量时,数值不变, 但将以浮点数形式存储。 如: float x; x=98; 结果x=98.000000
分析:x1<x2成立,所以x1<x2的值为1,导致 1<x3成立,所以它的值为1。
例2:设x1=1,x2=2,x3=3,表达式(x1<x2)+x3是 关系表达式吗?它的值是多少呢? main() {
int x1=1,x2=2,x3=3; printf("%d\n",((x1<x2)+x3)); getch( ); }
7、强制类型转换 (类型说明符)表达式
功能:把表达式的运算结果强制转换成类型说明 符所表示的类型。
说明:这里的小括号:( ),称为强制类型转换 运算符。
例如: (float)x 把x转换为实型。 (int)(a-b) 把a-b的结果转换为整型。
例2:实现保留小数点后2位有效数字。 main( ) {
例如:设x=5,则: (1)( x>=1)&&(x<2)的值为? (2)!(x<1)的值为? (3)x||(!x)的值为? main() {
int x=5; printf("%d\n",(x>=1)&&(x<2)); printf("%d\n",!(x<1)); printf("%d\n",x||(!x)); getch( ); } 运行结果:0 1 1
说明: (1)数学式子:“1<=x<2”,在C语言中是不 合法的; (2)逻辑表达式的值是一个逻辑值(“真”或 “假”),用整数“1”表示“真”、“0”表示 “假”;
(3)因为C语言逻辑表达式的概念与通常意义上 的不完全一致,所以对非逻辑量也可以进行逻辑运 算。判断一个数据的“真”或“假”时,都以0和 非0为依据;如果为0,判定为“假”,如果为非0, 判定为“真”。 例如:假设x=-10,则:!x的值为“假”,x被视为 “真”。
常用的运算符和表达式
案例目标: 1、掌握运算符、函数和表达式的使用方法; 2、掌握赋值语句的使用方法。
一、算术运算符
1、算术运算符:+、-、*、/、%
读为:加法、减法、乘法、除法、求余(或取模运 算)。
说明:
(1)“-”减法运算,既是二元运算又是一元运算,例 如:一元运算,求负运算 -5,-x等;二元运算a-b=c。
相关文档
最新文档