内容正文:
专题2:运算符与表达式(讲义)
《编程语言基础—C语言》专题复习讲练测
[考纲要求]
1:掌握C语言中的各种运算符的功能及其使用要求。
2:掌握C语言各种运算符的优先级和结合律。
3:掌握C语言表达式的实际计算。
[课时安排]
2课时
[知识梳理]
1、算术运算符
(1)C语言程序由若干条语句组成,每条语句由变量、运算符、表达式、函数调用和控制语句等构成。
(2)C语句的运算符十分的丰富,所包含的内容广泛。表达式是由运算对象(包括常量、函数、变量)和运算符按照一定规则连接起来的有意义的式子。表达式中可以包括运算符、常量、变量、函数调用等。
(3)说明
①模除运算是两个整数相除后取余数;要求 % 两边必须是整型数据。
②若算术运算符的除号两边均为整数,则结果仍为整数。
例:7 / 3 = 2 1 / 2 = 0
③若参加运算的两个数中有一个数为实数,则结果为double型。
④每个运算符都有一个优先级。如乘除的优先级高于加减。
⑤( )可改变运算次序。
⑥若在一个运算符对象两侧的运算符的优先级相同,则按规定的“结合方向”处理。
2、赋值、逗号运算符
(1)赋值运算符
赋值运算符为“=”,右结合性。
(2)逗号运算符
①逗号运算符将两个表达式连接起来。其优先级15,最低,自左至右,顺序求值。
②格式:表达式1,表达式2,……,表达式n
③功能:先求解表达式1,再求解表达式2。整个逗号表达式的值为表达式n的值。
3、自增、自减运算符
(1)自增、自减运算符为“右结合性”,优先级为2。
(2)作用:自增(++)自减(- -)运算符的作用是使变量的值“加1”或“减1”。
(3)例如:int k=10;
执行语句“k=k+1;”后,变量k的值增1,即为11。也可用语句“k++;”代替,即“k++;”与“k=k+1;”等价。同样,“k- -;”与“k=k-1;”等价。
(4)注意
①“++i,--i” “在使用i之前,先使i的值加(减)1 ”
②“i++,i--” “在使用i之后,使i的值加(减)1”
例:“a=++k”与“a=k++ ”
(5)i+++j 如何理解?
C编译系统在处理时尽可能多的(自左而右)将若干个字符组成一个运算符(C在处理标识符和关键字时也按同一原则处理),如i+++j,将解释为(i++)+j。
(6)自增自减只能用于变量,而不能用于常量/表达式。
如:5++;(a+b)++ 均为非法!
4、位运算
(1)概述
位运算符是指对操作数以二进制位(bit)为单位进行的数据处理,每一个二进制位只能存放一位二进制数“0”或者“1”,因此位运算对象是一个二进制数位的集合
(2)按位与运算符(&)
参与运算的两个数据,按二进制位进行“与”运算。即:
(3)按位或运算符(|)
参与运算的两个数据,按二进制位进行“或”运算。即:
(4)按位异或运算符(^)
异或运算符的规则是,若参加运算的两个二进制位同号,则结果为0(假),异号则为1(真)。即:
(5)按位取反运算符(~)
取反运算符是一个单目(元)运算符,用来对一个二进制数按位取反。即:0变1,将1变0。
6)按位左移运算符(<<)
①作用:用来将一个数的各二进制位全部左移若干位。
②例如:a=a<<2(将a的二进制数左移2位,右补0。设a=15,即:0000 1111 ,左移2位得:0011 1100,得到十进制数:60)
(7)按位右移运算符(>>)
①a>>2表示将a的各二进制位右移2位,移到右端的低位被舍弃。对于无符号数,高位补0。
②例如:a=017,对应的二进制数为0000 1111
a>>2为0000 0011(11) 此2位舍弃
③正数右移:右移n位,低位去掉n个0,高位补个0。( Microsoft Visual C++编译器采用“逻辑右移”,所以高位补0)
④负数右移:采用该负数的补码进行右移,右移n位,低位去掉n位,高位补入n个1,但最后结果为负数的补码,应将其转换成原码(减一取反逆推),注意逆推时应保留其符号位不变。
5、关系与逻辑运算
(1)关系运算符
(2)关系表达式
①用关系运算符将两个表达式(可以是算数表达式、关系表达式、逻辑表达式、赋值表达式、字符表达式)连接起来的式子,称为关系表达式。
②当相同级别的关系运算符同时出现时,从左至右进行运算。
③关系表达式的值是一个逻辑值,即“真”和“假”,在C语言的逻辑运算中,以“1”代表“真”,以“0”代表“假”。
(3)逻辑运算符
“&&”和“||”是双目运算符,要有两个运算量(操作数),例:(a>b)||(x>y);“!”是单目运算符,只要求有一个运算量,如:!(a>b)
(3)逻辑运算符
a&&b 当a,b均为真,则“a&&b”值为真,否则为假。
a||b 当a,b均为假,则“a||b”值为假,否则为真。
!a 当a为真,则“!a”值为假,否则为真。
(4)逻辑表达式
用逻辑运算符连接的若干个表达式组成的式子称为逻辑表达式。
6、强制类型转换运算符
(1)强制类型转换的运算符为(类型),优先级为2。
(2)格式: (类型)表达式
(3)功能:将表达式的结果类型强制转换为指定类型。
(4)举例: (int)3.14 //结果为整型3
(float)1 //结果为浮点型1.0
(float)1/2 //结果为浮点型0.5
1 /2 //结果为0
[真题练讲]
1.(2008年湖南高考真题)程序分析题。
main()
{char a=55;
a=~a&055;
printf("%x,%o",a,a);
getch();}
运行结果是__________ 。
【答案】8,10
2.(2011年湖南高考真题)单项选择题。已知i=3,执行j=i++后,i和j的值分别为( )
A.i=4 -2
B.i=4 j=3
C.i=3 j=3
D.i=3 j=2
【答案】B
3.(2012年高考真题)阅读程序,写出运行结果:____________
#include <conio.h>
#include <stdio.h>
main()
{ int a=3,b=4;
a%=b+=a+=(a+b);
printf("%d,%d",a,b);
getch();
}
【答案】10,14
4.(2013年湖南高考真题)单项选择题。假设有:float a=5,b=a=5/2;则执行语句printf("%f",b)的输出结果为( )
A.7.500000
B.7
C.5.000000
D.7.000000
【答案】D
5.(2014年湖南高考真题)单项选择题。若变量a,i已正确定义,且i己正确赋值,合法的C语言语句是( )
A.a=int(i);
B. a==0
C. ++i;
D. a=a++=2;
【答案】C
6.(2015年高考真题)单项选择题。若有语句:
int x=12,y=8,z;z=0.8+x/y;执行语句后z的值为( )
A.1.8
B.1
C.2
D.2.4
【答案】B
7.(2018年湖南高考真题)单项选择题。若“int a=12;”,执行“a/=a+8;”后,a的值是( )
A.1
B.8
C.9
D.0
【答案】D
8.(2018年湖南高考真题)单项选择题。若“int a=5,b;”,执行“b=a>>2;”后,b的值是( )
A.10
B.20
C.1
D.2
【答案】C
[限时练习]
1.(2020年高考真题)单项选择题。
在C语言中,用( )表示逻辑值“真”。
A. T
B. F
C.非零整数
D. 0
【答案】C
2.(2020年湖南高考真题)单项选择题。
执行“inta=3;a+=a^2;”后,则a的值是( )
A.12
B.9
C.6
D.4
【答案】D
3.(2019年湖南高考真题)单项选择题。已知“int a=1,b=2,c=3,x;"与“x=(a^b)&c;",则x的值为( )
A.0
B.1
C.2
D.3
【答案】D
4.(2022年湖南高考真题)单项选择题。下列C语言表达式( )的值不等于1。
A.123/100
B.365%5
C.abs(-1)
D.0||1
【答案】B
5.(2021年湖南高考真题)单项选择题。若“int a=-7,b=-1;”执行“a%=b-1;”,a 的值是( )
A.-7
B.-1
C.-2
D.-3
【答案】B
6.(2024年湖南高考真题)单项选择题。执行程序段"int x=061,y=016;int z=x|y;"后,z的值是( )
A.63
B.77
C.45
D.14
【答案】C
7.(2024年湖南高考真题)单项选择题。执行程序段"int a=37;a+=a%=9;"后,a的值是( )
A.4
B.8
C.2
D.18
【答案】C
8.(2017年湖南高考真题)单项选择题。若“int a; float b=12.2;”,则执行“a=(int)b%3;”后,a的值是( )
A.1
B.0
C.2.2
D.1.22
【答案】B
9.(2025年湖南一轮联考题)执行程序段“int x=073,y=066;int z=x|y;”后,z的值是( )
A. 61
B. 62
C. 64
D. 63
【答案】D
10.(2025年湖南一轮联考题)执行程序段“intx=6;x+=x%=x;”后,x的值是( )
A.36
B.1
C.0
D.12
【答案】C
[内容小结]
一、算术运算符
• 用于实现加、减、乘、除、取余等基本算术运算,是数值计算的基础工具。
二、赋值、逗号运算符
• 赋值运算符:以=为核心,实现数据的赋值操作,还可结合算术运算形成复合赋值(如+=、-=等)。
• 逗号运算符:用,连接表达式,按从左到右顺序执行,最终结果为最右侧表达式的值。
三、自增、自减运算符
• 自增运算符(++):使变量值加1,分前缀(如++a,先加后用)和后缀(如a++,先用后加)形式。
• 自减运算符(--):使变量值减1,同样有前缀(--a)和后缀(a--)形式。
四、位运算
• 对数据的二进制位进行操作,包括按位与、或、异或、取反、左移、右移等运算,常用于底层硬件操作或性能优化场景。
五、关系与逻辑运算
• 关系运算符:包括>、<、>=、<=、==、!=,用于比较两个值的关系,结果为布尔值(真或假)。
• 逻辑运算符:包括&&(逻辑与)、||(逻辑或)、!(逻辑非),用于组合或取反布尔值,实现复杂逻辑判断。
六、强制类型转换运算符
• 通过(类型)的形式,将一个数据类型强制转换为另一种数据类型,例如(int)3.14可将浮点型转换为整型。
学科网(北京)股份有限公司
$