运算符与表达式
【学习要点】
1.掌握运算符的目数、优先级、结合性等概念。
2.掌握算术运算及其应用。
3.掌握自增、自减运算及其应用。
4.掌握关系、逻辑运算及其应用。
5.掌握位运算及其应用。
6.掌握赋值、复合赋值运算及其应用,掌握赋值兼容时的类型转换。
7.掌握表达式求值时类型的自动转换和强制转换。
8.掌握表达式的组成,掌握逻辑表达式的优化及其副作用。
9.掌握逗号运算符、sizeof运算符、条件运算符及其应用。
------------------------------------------------------------------------------------------------------------------------------------------------- 【例题分析】
1.若int x,y,z;下列表达式中运算结果与x=y=24相同的是______。
A.x=(y=z=8,4*6)
B.x=y=(z=8,4*6)
C.x=y=z=8,4*6
D.x=(y=z=8),4*6
【答案】B
【解析】
①C++语言的赋值运算有别于其它高级语言,逗号运算又是其它高级语言所没有的。
②在赋值表达式中,可以有多个赋值运算符,计算顺序自右向左,运算优先级低,仅高于逗号运算符。
③逗号既是分隔符,又是运算符,可以用一个逗号运算符或多个逗号运算符将多个表达式连接成逗号表达式,计算顺序自左向右,并将最后一个表达式的值作为整个逗号表达式的值,逗号运算优先级最低。
2.若int i=6,k=0;下列表达式中运算结果使k=7的是______。
A.k=i+++k
B.k=k+i++
C.k=++i+k
D.k=k+++i
【答案】C
【解析】
①自增++、自减--运算符是C++语言特有的。
②运算符++、--出现在变量的前面或后面,其运算结果是不同的。若++、--出现在变量前,则先将变量的值加1(或减1)后,再将变量的值参加运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。
③自增、自减运算符的优先级高于算术运算符,因此对于k=i+++k:解释为i++,再加k;对于k=k+++i:解释为k++,再加i。
3.表达式‘A’+’B’+20的值是______。
【答案】151
【解析】不同类型的数据混合运算时,系统可以自动进行类型转换,将表示范围小的数据类型转换成另一操作数的相同类型后再参与运算,则转换为65+66+20=151。
4.若int e=8;double f=6.4,g=8.9;则f+int(e/3*int(f+g)/2)%4的值是______。
【答案】9.4
【解析】
①不同类型的数据混合运算时,可以使用强制类型转换符,将一种数据类型强制转换成另一种数据类型后再参与运算。
②表达式中:e/3的值是整型数2,int(f+g)的值是整型数15,int(e/3*int(f+g)/2)的值是整型数15,15%4的值是整型数3,最后加上实型数f,得到最终值是实型数9.4。
1
5.若int i=65535 ,j=0x000a ,k ;k=i&j ;则i、j、k的值是______。
【答案】65535 、10 、10
【解析】将十进制数65535和16进制数000aH在计算机内的二进制数,进行按位与运算,结果为k=10。6.编写程序:求出三个实数中的最大数。
【答案】编写程序如下:
#include
void main()
{ float a , b , c ;
cout << “请输入三个实数:” ;
cin >> a >> b >> c ;
cout << “最大数:” ;
cout << ( a >= ( b >= c ? b : c ) ? a : ( b >= c ? b : c ) ) << endl ; }
------------------------------------------------------------------------------------------------------------------------------------------------- 【思考题】
㈠选择题
1.若int a=2;cout<<( a=3*5,a*4,a+5 );则cout的输出值、a的值分别是______。
A.7、7
B.15、15
C.20、15
D.7、65
【答案】???
2.若int a,c=5;a=2+(c+=c++,c+8,++c);则a、c的值分别是______。
A.13、11
B.14、12
C.15、13
D.16、14
【答案】???
3.从语法的角度来看,语句if(a<=b<=c)x++; 是______。
A.正确的
B.语法正确,但在编译时会有警告信息
C.语法上是错误的
D.编译系统不会进行相关检查
【答案】???
4.若int x;则表达式( (x=4*5,x*5), x+25 ) 的值是______。
A.20
B.45
C.100
D.125
【答案】???
5.若int x=1,y=1,z=1,k;k=x++||++y&&++z;则y的值是______。
A.1
B.2
C.3
D.4
【答案】???
6.若int x=5;则表达式( (x==4*5,x*5), x+25 ) 的值是______。
A.20
2
C.5
D.30
【答案】???
7.若int a=1,b=2;a++&&++b;则a、b的值分别是______。
A.1、2
B.2、2
C.1、3
D.2、3
【答案】???
8.数学式:a≠b且c≤d,在C++中的表达式为______。
A.a≠b&&c<=d
B.a!=b&c<=d
C.a=!b&&c<=d
D.a!=b&&c<=d
【答案】???
9.数学式:a≤b≤c,在C++中的表达式为______。
A.a<=b<=c
B.! (a>b>c)
C.a<=b||b<=c
D.a<=b&&b<=c
【答案】???
10.若int x=100,y=1,z;z = y>0 ? ++x : --x ;则x、z的值是______。
A.100、100
B.100、101
C.101、100
D.101、101
【答案】???
11.若i nt x=5,y=7,z=8;z = x++ || y++ || ++z;则x、y、z 的值是______。
A.6、7、8
B.6、8、9
C.6、7、1
D.6、8、1
【答案】???
12.若int a=15,b=17,c;c = a || ( b+=a );则a、b、c 的值是______。
A.15、17、0
B.15、32、32
C.15、32、1
D.15、17、1
【答案】???
13.若int a=5,b=5,c=5;b= --a>b && ++c>b;则a、b、c的值是______。
A.4、5、5
B.4、5、6
C.4、0、6
D.4、0、5
【答案】???
14.若int a=3,b=5,c=7,d=9;d= b>a || (c=a+b);则c、d的值是______。
3
B.8、1
C.7、0
D.8、0
【答案】???
15.若int a=1,b;float c=3.5;c = (a+=4.8)+(b=5.9);则a、b、c的值是______。
A.1、5、10.7
B.5、5、9
C.5、5、10
D.非法运算
【答案】???
16.若int a=3,b=5,c=7;c = a++>b*c-31>=a%2;则a、b、c的值是______。
A.3、5、1
B.4、5、1
C.4、5、0
D.3、5、0
【答案】???
17.若int a=3;a += a -= a * a;则a 的值是______。
A.3
B.6
C.-3
D.-12
【答案】???
18.若float a;int b,c=2;a = (b=9)/(c==2);则a、b、c 的值是______。
A.9、9、2
B.9、9、1
C.4、9、2
D.4.5、9、2
【答案】???
------------------------------------------------------------------------------------------------------------------------------------------------- ㈡填空题
1.若int x;float y;y = x = 3 / 5;则x、y 的值分别是______。
【答案】???
2.若x为整型,a、b为实型,则(6x)÷(7ab)表示成______。
【答案】???
3.若int a=10,b=3,c=5;c = !c + -a++ % ~b;则a、b、c 的值是______。
【答案】???
4.若int a=1,b=2,c=3;b *= c+ = a <= b <= c;则a、b、c 的值是______。
【答案】???
5.若int a=3,b=6,c=2;c == ! a + ~b * a - ! b;则a、b、c 的值是______。
【答案】???
6.若int a=5,b=6,c=1;c=(a=c>b)&&(b=a>8);则a、b、c 的值是______。
【答案】???
7.若int w=1,x=2,y=3,z=4;则表达式( w>x ? w : z > y ? z : x )的值是______。
【答案】???
8.若char a=251;short b;b = a ;则a、b 的值是______。
【答案】???
4
9.若unsigned char a=251;short b;b = a ;则a、b 的值是______。
【答案】???
10.若int a=13,b=3;float c;c = a / b;则a、b、c 的值是______。
【答案】???
11.若int a=13,b=3;float c;c = a / float(b);则a、b、c 的值是______。
【答案】???
12.若int a=13,b=3;float c;c = (float)a / b;则a、b、c 的值是______。
【答案】???
13.若int a=13,b=3;float c;c = float(a / b);则a、b、c 的值是______。
【答案】???
14.若int a=2,b=3,c;cout << ( c=a+b,a++,a==b ) ;则输出值是______。
【答案】???
15.若int a=2,b=4,c=6;cout << ( a+=a,a*=b,a+c ) ;则输出值是______。
【答案】???
16.若int a=3;a=4*a , 7*a ;则a的值是______。
【答案】???
17.若char a=‘5’;cout << sizeof ( a+2 ) ;则输出值是______。
【答案】???
18.若char a=‘5’;cout << sizeof ( a ) ;则输出值是______。
【答案】???
19.若int a=5.5;cout << sizeof ( a+2. ) ;则输出值是______。
【答案】???
20.若int a=5.5;cout << sizeof ( a+2 );则输出值是______。
【答案】???
------------------------------------------------------------------------------------------------------------------------------------------------- ㈢写出下列程序的输出结果
1.下面程序的运行结果是______。
#include
void main ( )
{ int a=2 , b=5 ;cout << “a = ” << a << “\tb = ” << b << endl ;
a++ , b-- ;
cout << “a = ” << a << “\tb = ” << b << endl ;
cout << “( a+++ b-- ) = ” << ( a++ + b-- ) << endl ;
cout << “a = ” << a << “\tb = ” << b << endl ;
cout << “(++a+ b-- ) = ” << (++ a + b-- ) << endl ;
cout << “a = ” << a << “\tb = ” << b << endl ;
}
【答案】第1行输出:???
第2行输出:???
第3行输出:???
第4行输出:???
第5行输出:???
第6行输出:???
2.下面程序的运行结果是______。
#include
void main ( )
{ int a = 3 , b = 6 , c = 6 ;
5
cout << “( a<=b<=c ) = ” << ( a <= b <= c ) << endl ;
cout << “( a<=b && b<=c ) = ” << ( a<=b && b<=c ) << endl ;
cout << “( !(a>b>c) ) = ” << ( !(a>b>c) ) << endl ;
cout << “( a!=b || b==c ) = ” << ( a != b || b == c ) << endl ;
float d = 5.5 ;
cout << “d = ” << d << “\t!d = ” << !d << endl ;
cout << “( a+b cout << “( !a cout << “( !a<=!b ) = ” << ( ! a <= ! b ) << endl ; cout << “( !(a<=b) ) = ” << ( ! ( a <= b ) ) << endl ; } 【答案】第1行输出:??? 第2行输出:??? 第3行输出:??? 第4行输出:??? 第5行输出:??? 第6行输出:??? 第7行输出:??? 第8行输出:??? 第9行输出:??? 3.下面程序的运行结果是______。 #include void main ( ) { short a = 5 ; bool b = 6 ; char c = …B? ; co ut << “a = ” << a << “\t~a = ” << ~a << “\t~~a = ” << ~~a << endl ; cout << “b = ” << b << “\t~b = ” << ~b << “\t~b字节数= ” << sizeof(~b) << endl ; cout << “c = ” << c << “\t~c = ” << ~c << “\t~c字节数= ” << sizeof(~c) << endl ; } 【答案】第1行输出:??? 第2行输出:??? 第3行输出:??? 4.下面程序的运行结果是______。 #include void main ( ) {cout << “( 6 & 3 ) = ” << ( 6 & 3 ) << “\t” ; cout << “( 6 | 3 ) = ” << ( 6 | 3 ) << endl ; short a = 0xe0 ; cout << “a = ” << a << endl ; a = a & 0x7f ; cout << “a = ” << a << endl ; a = a | 0x80 ; cout << “a = ” << a << endl ; a = 0xabcd ; cout << “a = ” << a << endl ; a = a & 0xff00 ; cout << “a = ” << a << endl ; char c = …M? ; cout << “c = ” << c << “\t\t” ; c = c | 0x20; cout << “c = ” << c << endl ; } 【答案】第1行输出:??? 第2行输出:??? 第3行输出:??? 6 第4行输出:??? 第5行输出:??? 第6行输出:??? 第7行输出:??? 5.下面程序的运行结果是______。 #include void main ( ) { cout << “( 6<<3 ) = ” << ( 6 << 3 ) << endl ; c out << “( 6>>3 ) = ” << ( 6 >> 3 ) << endl ; short a1 = -12345 ; unsigned short b1 = a1 << 5 ; cout << “a1 = ” << a1 << endl ; cout << “( b1 = a1<<5 ) = ” << b1 << endl ; short a2 = 12345 ; short b2 = a2 >> 5 ; cout << “a2 = ” << a2 << endl ; cout << “( b2 = a2>>5 ) = ” << b2 << endl ; } 【答案】第1行输出:??? 第2行输出:??? 第3行输出:??? 第4行输出:??? 第5行输出:??? 第6行输出:??? ------------------------------------------------------------------------------------------------------------------------------------------------- ㈣编程题 1.编写程序:求出两个实数中的最大数。 编写程序如下: 【答案】??? 2.编写程序:求出三个整数中的最大数。 编写程序如下: 【答案】??? ------------------------------------------------------------------------------------------------------------------------------------------------- 7