第3章练习 表达式和语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编程题:
1.输入一名学生的成绩,判断该成绩的等级。
如>=60的,显示“合格”,<60的显示“不合格”。
程序:
#include<iostream.h> //输入输出流对象的头文件
void main()
{ int score; //声明成绩变量,用来保存分数
cout<<”输入成绩:”; //提示用户的信息
cin>>score; //从键盘上输入分数传递给score
if( score>=60) //判断该条件是否真或假
cout<<”合格”<<endl; //当score>=60是真的时候,运行该语句
else
cout<<”不合格”<<endl; //当score>=60是假的时候,运行该语句
}
分析:
(1)首先该题目要求输入一个分数,则事先声明一个整型变量score。
(2)其次从键盘上输入该分数,应有输入语句cin,并由上面定义的变量来保存分数。
(3)然后根据分数来判断等级,有两种情况应该用if语句。
(4)输出的信息是根据不同条件显示字符串,用到cout输出流对象。
(5)用到标准输入输出流对象,所以在程序前加相应头文件。
2.编写一个能输出以下信息的程序。
How are you.
Fine,thank you.
程序:
#include<iostream.h>
V oid main()
{ Cout<<”How are you.”<<endl; //输出字符串并换行。
Cout<<”Fine,thank you.”<<endl;
}
3.编写一个求两个数78、45之差的程序。
程序:
#include <iostream.h>
void main()
{ int sum=0;
sum=78+45; //求和
cout<<"78+45= "<<sum<<endl;
}
4.编写一个求三个数14、25、16之和的程序。
#include <iostream.h>
void main()
{ int a,b,c,sum; //定义变量
cout<<"input three number:\n";
cin>>a>>b>>c; //从键盘输入三个数给变量a和b、c
sum=a+b+c; //求和
cout<<"sum is "<<sum;
}
5.上机运行,熟悉所用系统的上机方法与步骤。
选择分析题:
例题1:运算符+、=、*、>=中,优先级最高的运算符是()。
P35
A.+ B.= C.* D.>=
答案:C
分析:根据C++语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=、>=、+、*。
例题2:下面正确的为()。
A.4.1/2 B.3.2%3
C.3/2==1 结果为0 D.7/2 结果为3.5
答案:A
分析:%运算符要求式整型;关系运算值为1;两个整数相除,商为为相除后的整数部分。
例题3:已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?++d:a<b”值为()。
A.9 B.6 C.8 D.0
答案:D
分析:此题是考察“++”运算符、逗号运算符、条件运算符及它们运算优先级的综合题,根据这些运算符的运算规则,得出表达式的运算结果。
例题4:已知i=5,j=0,下列各式中运算结果为j=6的表达式是()。
A.j=i+(++j)B.j=j+i++ C.j=++i+j D.j=j+++i
答案:C
分析:自增++、自减运算符在变量的前面或后面,其运算结果是不同的。
若++或—在变量前,则先将变量的值加1(或减1)后,再将变量的值参与运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。
自增++、自减运算符优先级高于算术运算符。
例题5:已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&!y)的值是()。
A.0 B.语法错C.1 D.“假”
分析:根据C++语言中运算符优先级的高低,“!”运算符最高,关系运算符高于逻辑运算符。
则上面的表达式转换为:1&&1&&1,结果为1。
答案:C。
填空题
例题1:如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为____。
答案:1
分析:%运算符是求余运算,得到的结果是相除后的余数。
表达式转换为6%2+(6+1)%2=0+7%2=1。
例题2:如果定义int a=2,b=3;float x=5.5,y=3.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为_____。
答案:4.5
分析:不同类型的数据混合运算时,可以使用强制类型转换符,强制将一种数据类型转换为另一种数据类型后再进行运算。
对表达式,先求表达式的值,再转换值的类型,本题的运算结果为4.5。
例题3:设所有变量均为整型,则表达式(e=2,f=5,e++,f++,e+f)的值为____。
答案:9
分析:逗号运算符是是将两个或多个表达式组合成一个表达式的运算符。
求解时从左至右依次计算每个表达式的值,整个表达式的值就是最右边的表达式的值。
本题的答案为9。
例题4:已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-‘4’的值为____。
答案:e
分析:C++语言中,对字符数据进行算术运算,实际上就是对字符的ASCII码进行运算。
以字符形式输出时,再将ASCII码转换为相应的字符输出。
本题表达式为ch=97+8-4=101,101相应的ASCII为字符e。
选择题:
(1) 运算符+、<=、=、% 中,优先级最低的运算符是()。
A. +
B.<=
C.=
D.%
答案:C
(2) 设变量m,n,a,b,c,d均为0,执行(m = a==b)||(n=c==d)后,m,n的值是()。
A.0,0
B. 0,1
C. 1,0
D. 1,1
答案:C
(3)设有代码“int a = 5;”,则执行了语句“a + = a - = a*a;”后,变量a的值是()。
A.3
B. 0
C. -40
D. –12
答案:C
(4)设a为5,执行下列代码后,b的值不为2的是()。
A. b = a/2
B. b = 6-(--a)
C. b = a%2
D. b = a < 3 ? 3: 2
答案:C
(5)数学公式
y
x e
y
写成C表达式,下面的()是正确的。
A.sqrt (abs(pow(x, y) + exp(y)))
B.sqrt (abs(pow(y, x) + exp(y)))
C.sqrt (fabs(pow(x, y) + exp(y)))
D.sqrt (fabs(pow(y, x) + exp(y)))
答案:D
简答题:
1.x为int类型,y为double类型,指出下列各表达式值的类型。
(1)1/3 int (2) 48L long
(3) 5 % 3 int (4) x*3/y double
(5) ‘x’+20int (6) (int )y int
(7) y != 10 bool (8) x<1 || x>10 bool
(9) x>10 ? x : sqrt (x) int或float (10) x && y bool
(11) true bool (12) (char) (x+10) char
(13) 1.0 /3 float (14) sizeof (float) int
(15) x,y,x+y double
说明:(9)题,如果x>10成立,表达式值的类型为int,如果x>10不成立,表达式值的类型为float。
(15)题,为逗号表达式,x+y的值即为整个表达式的值,因而值的类型为double。
bool型在C++用int代替,true值为1,false值为0。
2. 写出下列算术表达式的值:
(1) x+a%3*(int)(x+y)%2/4 x=2.5,a=7,y=4.7
答:上述表达式=2.5+1*(int)7.2%2/4 = 2.5+1*7%2/4 = 2.5
(2) (float)(a+b)/2+(int)x%(int)y a=2,b=3,x=3.5,y=2.5
答:上述表达式=(float)5/2+3%2 = 2.5+1 = 3.5
3.设程序中有说明语句
int a=20; double x=4.7; char r= ’a’;
试求出下列每个表达式的值(假定各表达式互不影响)。
~
答案答案(1)a++ 20 (2) ++r ’b’
(3) 1+a/3%4 3 (4) 10*sizeof( int ) 40
(5) char (a+20) ’(’(6)a= =r || a= =floor(x) 0
(7) a/9.0 2.222222 (8)x=pow(3,5) 273.000000
(9) x=(a++,r++) 97.000000 (10) ceil(x-0.5) 5.000000
(11) a=abs(a)%8-10 -6 (12)x=fabs(-27.2)+6 33.200000
(13)floor(x+0.5) 5.000000 (14) ceil((x-=0.5)-0.5) 4.000000
(15)floor(x*1000+0.5)/1000 4.700000 (16)floor(x+0.5) 5.000000
(17)floor(x*1000)/1000 4.700000 (18)a+rand()%40 某一个随机整数
(19) a % =n % = 2),n=5 5
此题运行时要给n赋初值,n必须是整型奇数,n为整型偶数出错。
(20) a + = a - = a * = a 0
说明:函数ceil(x),返回大于等于x的最小整数;floor(x),返回小于等于x的最大整数;rand(),返回0~32767之间的整数。
4.设程序中有说明语句
int x=20; float y=4.7; char ch = ’k’;
试求出下列每个表达式的值(假定各表达式互不影响)
答案答案
(1) x==0 0 (2) x!=y 1
(3) x++ >21 0 (4) ‘a’ == ‘A’ 0
(5) ch != 0 1 (6) x>0 && y>0 1
(7) x>0 && 1 1 (8) y>0 && 0 0
(9) !(x||y)==!x&&!y 0 (10) x++ !=20 || y 1
(11) !! ch==ch 0 (12) !(x&&y)==!x||!y 1
说明:C++语言提供了三种逻辑运算符:!,&&,||,其中!逻辑非的优先级最高,&&逻辑与次之,||逻辑或最低。
!逻辑非是右结合性,&&逻辑与和||逻辑或是左结合性。
选择分析题:
例题1:如果有以下语句:int a,b;char m,n;cin>>a>>b>>m>>n;则下列输入数据的方式中正确的是()。
A.10,20,X,Y B.1020 XY
C.10 20 X Y D.10、20、X、Y
答案:C
分析:C++语言没有专门的输入/输出语句,其输入/输出是通过输入/输出流来实现的。
用cin 输入时,空格和回车键均可作为输入字符之间的分隔符,逗号不能作为分隔符。
字符型变量只能容纳一个字符。
例题2:以下不正确的语句是()。
A.if(x>y);
B.if(x=y)&&(x!=0)x+=y;
C.if(x!=y)cin>>x;else cin>>y;
D.if(x<y) {x++;y++;}
答案:B
分析:if语句后面的表达式必须放在括号内“()”,且不能使用赋之值运算符。
在if和else 后面用花括号“{}”括起来的多个语句成为了一个复合语句。
例题3:下面程序的输出结果是()。
#include<iostream.h>
void main()
{ int a=6,b=6;
if(a>5)
a-=1;
b+=1;
else
a+=1;
b-=1;
cout<<”a=”<<a<<endl;
cout<<”b=”<<b;
}
A.5 B.a=5 C.a=5 D.编译时出错
7 b=7 b=6
答案:D
分析:在if…else语句的中间应为单条语句或复合语句,不能为多条语句。
填空题:
例题1:下面的程序实现输出x,y,z三个数中的最大值,请填入正确的内容。
#include<iostream.h>
void main()
{ int x=5,y=8,z=9, u, v;
if((1) )u=x;
else u=y;
if((2) )v=u;
else v=z;
cout<<”v=”<<v<<endl;
}
答案:(1)x>y (2) u>z
分析:本程序首先找出x和y中较大的数放入变量u中,再将u 与z 做比较,其中较大者放入变量v中,为三个数中的最大值。
看程序写结果:
例题1:#include<iostream.h>
void main()
{ int a,b,c,d,x;
a=c=0; b=1;d=20;
if(a)d=d-10;
else if(! b)
if(! c) ;
else x=25;
cout<<”d=”<<d<<endl;
cout<<”x=”<<x<<endl;
}
运行结果:
d=20
x=25
分析:这是一个if语句的嵌套结构,判断三个if语句的条件表达式都“假”,则执行最后一个else后面的语句“x=25”。
例题2:#include<iostream.h>
void main()
{ int x=6,y=8;
if(x++<6)
cout<<++y<<endl;
if(x>6)
cout<<- -y<<endl;
else
cout<<y++<<endl;
}
运行结果:
7
分析:程序在判断第一个条件if(x++<6)时,由于此时x的值为6所以不成立,故不做语句cout<<++y<<endl;且变量y值不变化。
接着判断第二个条件if(x>6),因x值为7,条件成立,故执行语句cout<<- -y<<endl;此时y值为8,执行- -y,则输出7。
2.1 判断题
1.C++语言中除了包含C语言的所有运算符外,还规定自身的若干个运算符。
2.增1和减1运算符以及赋值运算符都具有副作用。
3.增1和减1运算符不仅可以作用在变量上,也可以作用在表达式上。
4.关系运算符可以用来比较两个字符的大小,也可以比较两个字符串的大小。
5.移位运算符在移位操作中,无论左移还是右移,对移出的空位一律补0。
6.变量的类型高低是指它被存放在内存的地址值大小。
7.在C++语言中,非保值转换应用强制类型转换。
8.表达式中各操作数计算顺序取决于运算符的优先级和结合性。
9.在C++程序中,变量值是可以改变的,变量的地址值是不能改变的。
答案:√√√×××√√√
2.2 单选题
1.下列关于变量数据类型的描述中,错误的是()。
A.定义变量时int型数据类型可以省略
B.变量的数据类型可以决定该变量占内存的字节数
C.变量的数据类型是可以被强制的
D.变量的数据类型是有高低之分的
2.下列运算符中,不能用于浮点数操作的是()。
A.++ B.+
C.*= D.&(双目)
3.下列运算符中,优先级最高的是()。
A.*(双目)B.||
C.>> D.%=
4.下列运算符中,优先级最低的是()。
A.== B.?:
C.| D.&&
5.已知:int a(3);下列表达式中,错误的是()。
A.a%2==0 B.a--+2
C.(a-2)++ D.a>>=2
6.已知:int b(5),下列表达式中,正确的是()。
A.b="a" B.++(b-1)
C.b%2.5 D.b=3,b+1,b+2
7.下列关于类型转换的描述中,错误的是()。
A.类型转换运算符是(<类型>)
B.类型转换运算符是单目运算符
C.类型转换运算符通常用于保值转换中
D.类型转换运算符作用于表达式左边
8.下列表达式中,其值为0的是()。
A.5/10 B.!0
C.2>4?0:1 D.2&&2||0
答案:ADAB CDCA
2.3 填空题
1.条件表达式是由三目运算符组成的,该表达式的类型是由冒号左边和右边两个操作数中类型高的操作数类型决定的。