C++练习题.docx
《C++练习题.docx》由会员分享,可在线阅读,更多相关《C++练习题.docx(227页珍藏版)》请在冰豆网上搜索。
C++练习题
1绪论
例题2:
输入一名学生的成绩,判断该成绩的等级。
如>=60的,显示“合格”,<60的显示“不合格”。
程序:
#include//输入输出流对象的头文件
voidmain()
{intscore;//声明成绩变量,用来保存分数
cout<<”输入成绩:
”;//提示用户的信息
cin>>score;//从键盘上输入分数传递给score
if(score>=60)//判断该条件是否真或假
cout<<”合格”<=60是真的时候,运行该语句
else
cout<<”不合格”<=60是假的时候,运行该语句
}
分析:
(1)
(1) 首先该题目要求输入一个分数,则事先声明一个整型变量score。
(2)
(2) 其次从键盘上输入该分数,应有输入语句cin,并由上面定义的变量来保存分数。
(3)(3) 然后根据分数来判断等级,有两种情况应该用if语句。
(4)(4) 输出的信息是根据不同条件显示字符串,用到cout输出流对象。
(5)(5) 用到标准输入输出流对象,所以在程序前加相应头文件。
例题3:
面向对象的()是一种信息隐蔽技术,目的在于将对象的使用者与设计者分开。
不允许使用者直接存取对象的属性,只能通过有限的接口与对象发生联系。
A.多态性B.封装性C.继承性D.重用性
答案B
分析:
封装性是指把对象属性和操作结合在一起,构成独立的单元,其内部信息对外界是隐蔽的,不允许外界直接存取对象的属性,只能通过有限的接口与对象发生联系。
若不清楚多态性的定义,误选答案A。
多态性是指当一个对象接收到一个请求进行某项服务的消息时,将根据对象所属的类,动态地选用该类中定义的操作。
若不清楚继承性的定义,误选答案C。
继承是指派生类可以自动拥有基类的全部属性和服务。
若不清楚重用性的定义,误选答案D。
重用性是多态性的一种表现形式。
例题4:
C++源文件的扩展名为()。
A.cppB.cC.txtD.exe
答案A
分析:
C++源程序的扩展名为cpp。
C程序的扩展名为c。
文本文件的扩展名为txt。
源程序编译后可执行文件的扩展名为exe。
若不清楚C++源程序扩展名和C源程序扩展名的区别,误选答案B。
C++兼容C,当文件名保存为c时,调用C编译器;当文件名保存为cpp时调用C++编译器。
若不清楚C++源程序扩展名和文本文件扩展名的区别,误选答案C。
C++源程序可以在文本编辑器里编辑,但一定注意将其扩展名保存cpp,不能为txt。
若不清楚C++源程序和C++可执行文件的扩展名的区别,误选答案D。
C++源程序经过编译、连接后得到可执行文件的扩展名为exe。
例题5:
C++的合法注释是()。
A./*ThisisaCprogram/* B.//ThisisaCprogram
C.“ThisisaCprogram”D.//ThisisaCprogram//
答案:
B
分析:
单行注释常采用“//”,多行注释采用“/*”和“*/”。
单行注释也可采用“/*”和“*/”,但答案A书写格式错误,不能选答案A。
注释和字符串的区别,双引号内的字符为字符串。
不能选答案C。
单行注释不需要结束符“//”,如果有,只能作为注释的一部分存在。
也不能选答案D。
例题6:
下面标识符中正确的是()。
A._abcB.3abC.intD.+ab
答案:
A
分析:
C++的标识符由字母、下划线和数字组成,而且第一个字符不能为数字。
答案B第一个字符为数字不能选B。
标识符不能为关键字,不能选答案C。
答案D第一个字符不是字母或下划线,也不能选。
例题7:
分析下列该程序的错误。
输入数据格式为:
2,5(回车)。
main()
{intsum=0;
inta,b;
cout<<"inputa,b:
";
cin>>a>>b;
sum=a+b;
cout<}
本程序把输入的两个数据进行累加并输出结果。
答案:
输入数据格式为:
25。
#include//编译预处理命令,以“#”开头。
把系统已经定义好的输入
//输出功能包含到本程序中。
voidmain()//程序的主函数
{//主函数开始
intsum=0;//定义一个变量sum存放累加结果,并且赋初值为0
inta,b;//定义两个变量,保存输入值
cout<<"inputa,b:
";//提示输入
cin>>a>>b;//使用基本输入设备cin输入两个变量值
sum=a+b;//进行累加,结果保存到sum变量
cout<}
分析:
(1)没有使用编译预处理命令:
#include。
iostream.h是系统定义的一个头文件(h-head),设置了C++的I/O环境。
cin、cout为基本输入、输出设备,定义在iostream.h头文件中。
(2)没有main()函数的返回类型,系统提示警告。
main()函数的返回类型常标注为void。
(3)输入数据时没有使用空格分隔。
输入运算符“>>”要求输入的多个数据用空格分隔。
1.11.3 教材习题分析与解答
1.参照例题,编写一个能输出以下信息的程序。
Howareyou.
Fine,thankyou.
程序:
#include
Voidmain()
{Cout<<”Howareyou.”<Cout<<”Fine,thankyou.”<}
2.参照例题,编写一个求两个数78、45之差的程序。
程序:
#include
voidmain()
{intsum=0;
sum=78+45;//求和
cout<<"78+45="<}
3.参照例题,编写一个求三个数14、25、16之和的程序。
#include
voidmain()
{inta,b,c,sum;//定义变量
cout<<"inputthreenumber:
\n";
cin>>a>>b>>c;//从键盘输入三个数给变量a和b、c
sum=a+b+c;//求和
cout<<"sumis"<}
1.21.4 补充习题
1.下面的()不是C++所包含的要素。
A.重载B.对象C.类D.继承
2.下列标识符中,()是合法的。
A.gotoB.StudentC.123D.k-ld
3.在C++语言中,()的陈述是正确的。
A.能使用关键字并区分大小写B.能使用关键字并不区分大小写
C.不能使用关键字并区分大小写D.不能使用关键字并不区分大小写
4.C++语言中语句的结束符是()。
A.,B.;C.。
D.、
5.下面对于类的描述,()是错误的。
A.类是抽象数据类型的实现B.类是具有共同行为的若干对象的统一描述体
C.类是创建对象的模板D.类就是C语言中的结构类型
6.写一个程序输出Hello,C++!
。
7.编译下列程序,改正错误信息,分析输出结果。
#include
voidmain()
{intx,y;
cout<<"inputx:
"<cin>>x;
y=x*x;
cout<<"y=<}
改正:
cout<<"y="<8.下列程序有何错误?
#include
voidmain()
{cout>>"Hello">>endl;}
改正:
#include
voidmain()
{cout<<"Hello"<9.关于C++和C语言的描述中,()是错误的?
A.C是C++的一个子集B.C程序在C++环境可以运行
C.C++程序在C环境可以运行D.C++是面向对象的而C是面向过程的
10.给出下列程序的运行结果。
#include
voidmain()
{
inta
(2),b(3),c(4);
cout<<"c1="<c=a+b;
cout<<"c2="<}
2 简单程序设计
2.1知识要点
计算机的基本功能是进行数据处理。
在C++语言中,数据处理的基本对象是常量和变量。
运算是对各种形式的数据进行处理。
数据在内存中存放的情况由数据类型所决定。
数据的操作要通过运算符实现,而数据和运算符共同组成了表达式。
本章是对C++语言中的数据类型、运算符、表达式等内容的全面介绍,要正确理解其特点,并灵活运用,主要掌握以下的知识要点:
1.掌握常量和变量的概念。
2.掌握整型数据和实型数据、字符型数据和字符串型数据的概念和区别。
3.掌握各种类型的变量说明及其初始化。
4.掌握算术运算、关系运算、逻辑运算、赋值运算、逗号运算、条件运算等概念。
5.掌握运算符的优先级、左结合和右结合规则。
6.掌握表达式求值时的自动转换和强制类型转换。
7.掌握自加、自减运算的规则。
8.掌握常用数学函数的功能。
2.2典型例题分析与解答
1.1. 选择题
例题1:
运算符+、=、*、>=中,优先级最高的运算符是()。
A.+B.=C.*D.>=
答案:
C
分析:
根据C++语言对运算符优先级的规则,以上运算符优先级从低到高的次序为=、>=、+、*。
例题2:
下列说法正确的是()。
A.cout<<”\n”是一个语句,它能在屏幕上显示”\n”
B.\68代表的是字符D。
C.1E+5的写法正确,它表示余割整型常量。
D.0x10相当于020。
答案:
D
分析:
分号是语句的已部分,且\n是转义字符;\68代表了八进制的6、8,而八进制中没有数字8;1E+5是实型常量;十六进制的10相当于十进制的16,相当于八进制的20。
例题3:
下列不合法的变量名为()。
A.intB.int1C.name_1D.name0
答案:
A
分析:
根据变量名命名要求,变量名只能由大小写字母、数字、下划线组成,且系统关键字不能作为变量名。
例题4:
下面正确的为()。
A.4.1/2B.3.2%3
C.3/2==1结果为1D.7/2结果为3.5
答案:
A
分析:
%运算符要求式整型;关系运算值为0;两个整数相除,商为为相除后的整数部分。
例题5:
已知a=4,b=6,c=8,d=9,则“(a++,b>a++&&c>d)?
++d:
a
A.9B.6C.8D.0
答案:
D
分析:
此题是考察“++”运算符、逗号运算符、条件运算符及它们运算优先级的综合题,根据这些运算符的运算规则,得出表达式的运算结果。
例题6:
已知i=5,j=0,下列各式中运算结果为j=6的表达式是()。
A.j=i+(++j)B.j=j+i++C.j=++i+jD.j=j+++i
答案:
C(A、D也对)j+++i相当于(j++)+i
分析:
自增++、自减运算符在变量的前面或后面,其运算结果是不同的。
若++或—在变量前,则先将变量的值加1(或减1)后,再将变量的值参与运算;反之则先将变量的值参加运算,再将变量的值加1(或减1)。
自增++、自减运算符优先级高于算术运算符。
例题7:
已知x=43,ch=‘A’,y=0;则表达式(x>=y&&ch<’B’&&!
y)的值是()。
A.0B.语法错C.1D.“假”
分析:
根据C++语言中运算符优先级的高低,“!
”运算符最高,关系运算符高于逻辑运算符。
则上面的表达式转换为:
1&&1&&1,结果为1。
答案:
C。
2.2. 填空题
例题8:
如果s是int型变量,且s=6,则下面s%2+(s+1)%2表达式的值为____。
答案:
1
分析:
%运算符是求余运算,得到的结果是相除后的余数。
表达式转换为6%2+(6+1)%2=0+7%2=1。
例题9:
如果定义inta=2,b=3;floatx=5.5,y=3.5;则表达式(float)(a+b)/2+(int)x%(int)y的值为_____。
答案:
4.5
分析:
不同类型的数据混合运算时,可以使用强制类型转换符,强制将一种数据类型转换为另一种数据类型后再进行运算。
对表达式,先求表达式的值,再转换值的类型,本题的运算结果为4.5。
例题10:
设所有变量均为整型,则表达式(e=2,f=5,e++,f++,e+f)的值为____。
答案:
9
分析:
逗号运算符是是将两个或多个表达式组合成一个表达式的运算符。
求解时从左至右依次计算每个表达式的值,整个表达式的值就是最右边的表达式的值。
本题的答案为9。
例题11:
已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式ch=’a’+’8’-‘4’的值为____。
答案:
e
分析:
C++语言中,对字符数据进行算术运算,实际上就是对字符的ASCII码进行运算。
以字符形式输出时,再将ASCII码转换为相应的字符输出。
本题表达式为ch=97+8-4=101,101相应的ASCII为字符e。
3.3. 编程题
例题12:
编写一个程序,从键盘输入半径和高,输出圆柱体的底面积和体积。
解:
程序如下:
#include
voidmain()
{
doubler,h,area,volume;
cout<<”请输入半径:
”;
cin>>r;
cout<<”请输入高:
”;
cin>>h;
area=3.14*r*r;
volume=area*h;
cout<<”底面积是:
”<
cout<<”体积是:
”<}
2.3教材习题分析与解答
1.1. C++语言中有哪些数据类型?
分别说明它们的类型关键字、取值范围、类型长度。
答:
C++语言中的数据类型有:
整型(短整型,整型,长整型);字符型;逻辑型;枚举型;实型(单精度,双精度,长双精度);引用型(指针,引用);复合型(结构,联合);空类型。
2.2. 字符常量与字符串常量的区别是什么?
答:
字符常量与字符串常量的主要区别在于:
(1)定界符不同。
字符常量使用单引号,而字符串常量使用双引号。
(2)长度不同。
字符常量的长度固定为1,而字符串常量的长度,可以是0,也可以是某个整数。
(3)存储要求不同。
字符常量存储的是字符的ASCII码值,而字符串常量除了要存储有效的字符外,还要存储一个结束标志’\0’。
3.说明下面的每个数据各属于哪一种(数值常量、字符常量、字符串、标识符、保留字、运算符、标点、非法数据)?
2518-3.6712.8“4”‘4’
x1“x2”“1949.10”cinK_name
3ab“floatx,y“;if+
“\n”?
;“sy1.cpp”‘\32’\’
答:
数值常量有:
25,18,-3.67,12.8
字符常量有:
‘4’,\’,‘\32’
字符串有:
“4”,“x2”,“1949.10”,“sy1.cpp”,“\n”
保留字:
cin,int,endl,if
运算符:
+
标点:
?
非法数据:
“floatx,y“;,3ab
变量:
x1,K_name
4.选择题
(1)下列数据类型不是C++语言基本数据类型的是()。
A.字符型B.整型C.实型D.数组
答案:
D
(2)在C++语言中,080是()。
A.八进制数B.十进制数C.十六进制数D.非法数
答案:
B
(3)下列字符列中,可作为C++语言程序自定义标识符是()。
A.switchB.fileC.breakD.do
答案:
B
(4)运算符+、<=、=、%中,优先级最低的运算符是()。
A.+B.<=C.=D.%
答案:
C
(5)下列字符列中,可以作为“字符串常量”的是()。
A.ABCB.″xyz″C.′uvw′D.′a′
答案:
B
(6)设变量m,n,a,b,c,d均为0,执行(m=a==b)||(n=c==d)后,m,n的值是()。
A.0,0B.0,1C.1,0D.1,1
答案:
C
(7)字符串”vm\x43\\\np\102q”的长度是()。
A.8B.10C.17D.16
答案:
A
(8)在C++语言中,自定义的标识符()。
A.能使用关键字并且不区分大小写B.不能使用关键字并且不区分大小写
C.能使用关键字并且区分大小写D.不能使用关键字并且区分大小写
答案:
D
(9)设有代码“inta=5;”,则执行了语句“a+=a-=a*a;”后,变量a的值是()。
A.3B.0C.-40D.–12
答案:
C
(10)设a为5,执行下列代码后,b的值不为2的是()。
A.b=a/2B.b=6-(--a)
C.b=a%2D.b=a<3?
3:
2
答案:
C
(11)下面的()均是C语言的整型常量。
A.0xffff和611B.01b和0xa1C.986.012和0667D.2e4和0x
答案:
A
(12)数学公式
写成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
5.x为int类型,y为double类型,指出下列各表达式值的类型。
(1)1/3int
(2)48Llong
(3)5%3int(4)x*3/ydouble
(5)‘x’+20int(6)(int)yint
(7)y!
=10bool(8)x<1||x>10bool
(9)x>10?
x:
sqrt(x)int或float(10)x&&ybool
(11)truebool(12)(char)(x+10)char
(13)1.0/3float(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。
6.写出下列算术表达式的值:
(1)x+a%3*(int)(x+y)%2/4x=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)ya=2,b=3,x=3.5,y=2.5
答:
上述表达式=(float)5/2+3%2=2.5+1=3.5
7.设程序中有说明语句
inta=20;doublex=4.7;charr=’a’;
试求出下列每个表达式的值(假定各表达式互不影响)。
~
答案答案
(1)a++20
(2)++r98
(3)1+a/3%43(4)10*sizeof(int)40
(5)char(a+20)((6)a==r||a==floor(x)0
(7)a/9.02.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)+633.200000
(13)floor(x+0.5)5.000000(14)ceil((x-=0.5)-0.5)4.000000
(15)floor(x*1000+0.5)/10004.700000(16)floor(x+0.5)5.000000
(17)floor(x*1000)/10004.700000(18)a+rand()%40某一个随机整数
(19)a%=n%=2),n=55
此题运行时要给n赋初值,n必须是整型奇数,n为整型偶数出错。
(20)a+=a-=a*=a0
说明:
函数ceil(x),返回大于等于x的最小整数;floor(x),返回小于等于x的最大整数;rand(),返回0~32767之间的整数。
8.设程序中有说明语句
intx=20;floaty=4.7;charch=’k’;
试求出下列每个表达式的值(假定各表达式互不影响)
答案答案
(1)x==00
(2)x!
=y1
(3)x++>210(4)‘a’==‘A’0
(5)ch!
=01(6)x>0&&y>01
(7)x>0&&11(8)y>0&&00
(9)!
(x||y)==!
x&&!
y0(10)x++!
=20||y1
(11)!
!
ch==ch0(12)!
(x&&y)==!
x||!
y1
说明:
C++语言提供了三种逻辑运算符:
!
,&&,||,其中!
逻辑非的优先级最高,&&逻辑与次之,||逻辑或最低。
!
逻辑非是右结合性,&&逻辑与和||逻辑或是左结合性。
3控制结构
3.1知识要点
流程控制是控制程序中语句执行的顺序。
任何程序设计语言都具备流程控制的功能,而C++语言提供了比其它高级语言更丰富的流程控制语言。
本章节主要介绍了程序设计中最基本三种结构:
顺序、分支和循环,要求掌握以下的知识要点:
1.掌握顺序结构的编程方法。
2.掌握使用cin、cout实现数据的输入/输出。
3.学会应用字符输入/输出函数。
4.掌握scanf()函数和printf()函数的使用。
5.掌握条件语句的形式和使用。
6.掌握条件语句的嵌套。
7.掌握switch语句的形式和使用。
8.掌握for,while,do-while三种循环语句的应用。
9.掌握循环语句的嵌套。
10.掌握break、continue、goto语句。
3.2典型例题分析与解答
1.1. 选择题
例题1: