C++期末练习题带答案.docx
《C++期末练习题带答案.docx》由会员分享,可在线阅读,更多相关《C++期末练习题带答案.docx(22页珍藏版)》请在冰豆网上搜索。
C++期末练习题带答案
(一)读程序题
1.类中包括其他类的对象成员,构造函数中要列出成员对象名带实参,生成该类对象时,要先调用成员对象的构造函数。
如果是成员对象的缺省构造函数可以不列,但生成该类对象时,仍要先调用成员对象的缺省构造函数。
1.如下程序运行时的输出结果是1135。
<>
{
c;
:
()(0){<<1;}
(n)(n){<<3;}
};
{
1;
2;
:
(m)2(m){<<5;}
};
()
{
t
(2);
}
二.派生类构造函数中要列出基类名带实参,生成派生类对象时,要先调用基类的构造函数,再调用派生类的构造函数。
冲突规则与支配规则。
2.如下程序运行时的输出结果是。
<>
A{
:
x;
A(){10;}
A(i){;}
(){<<""<};
B{
:
y;
B(){30;}
B(i){i;}
(){<<""<};
C:
B{
:
y;
C(c)(a)(30){c;}
(){<<""<};
(){
Cc1(20,30,40);
c110;
c1();c1();c1();
}
三.派生类中包含对象成员,构造函数中要列出基类名带实参,再列出成员对象名带实参,生成派生类对象时,要先调用基类的构造函数,再调用成员对象的构造函数,最后调用派生类的构造函数。
如果是调用基类或成员对象的缺省构造函数可以不列,但生成派生类对象时,仍要先调用基类的缺省构造函数,再调用成员对象的缺省构造函数。
构造函数与析构函数调用顺序相反。
3.如下程序运行时的输出结果是。
<>
A{
:
A(){<<"A()\n";
}
(){<<"()\n";
}
};
B{
:
B(){<<"B()\n";}
(){<<"()\n";}
};
C:
A{
Aa;
:
C(){<<"C()\n";}
(){<<"()\n";}
};
(){
Cc1;
}
4.如下程序运行时的输出结果是。
<>
A{
:
A(){
<<'A'<<;
}
};
T{
Aa;
:
T(){
<<'T'<<;
}
};
A{
Tt;
:
X(){
<<'X'<<;
}
};
()
{
X;
}
三.虚基类
5.下列程序运行后的输出结果是。
<>
A{
:
A(){<<"A\n";}
(){<<"\n";}
};
A{
:
B()(){<<"B\n";}
(){<<"\n";}
};
A{
:
C()(){<<"C\n";}
(){<<"\n";}
};
B{
:
D()(),C(),A(){<<"D\n";}
(){<<"\n";}
};
()
{Dd1;}
6.下列程序的输出结果是。
<>
A{
:
A(){<<"A\n";}
(){<<"\n";}
};
B:
A{
:
B()(){<<"B\n";}
(){<<"\n";}
};
A{
:
C()(){<<"C\n";}
(){<<"\n";}
};
B{
:
D()(),C(){<<"D\n";}
(){<<"\n";}
};
()
{Dd1;}
7.下列程序的输出结果是。
<>
<>
B{
[20];
:
B(*""){();<<<<;}
};
1B{
1[20];
:
1(*s1,*s2):
B(s1){(12)<<1<<;}
};
2:
B{
2[20];
:
2(*s1,*s2):
B(s1){(22)<};
3:
1,2{
3[20];
:
3(*s1,*s2,*s3,*s4):
1(s12)2(s13)
{(34);<<3<<;}
};
()
{
3h3("","","","");
}
四.运行时多态
8.下列程序的输出结果是。
<>
A{
:
f1(){<<"类A中的f1\n";}
f2(){<<"类A中的f2\n";}
f3(){<<"类A中的f3\n";}
};
A{
:
f1(){<<"类B中的f1\n";}
f2(){<<"类B中的f2\n";}
f3(){<<"类B中的f3\n";}
};
(){
Aa1,*p;
Bb1;
1;
>f1();>f2();>f3();
}
9.如下程序运行时的输出结果是。
<>
A{
:
f(){<<1;}
g(){<<2;}
};
B:
A{
:
f(){<<3;}
g(){<<4;}
};
(A){();();}
(A*p){>f();>g();}
(){
Bb;
(b);
();}
10.如下程序运行时的输出结果是。
<>
<>
P{
:
P(*s){
[(s)+1];
();
}
(){
<<"I"<<<<"\n";
}
(){
[];
}
:
*;
};
P{
:
S(*g)(s){
;
}
(k){
<<<<""<<*k<<;
}
:
;
};
P{
:
F(*n)(s){
;
}
(){
<<<<""<<<<".\n";
}
:
;
};
()
{
25;
P*p;
P("");
S("",3.6);
F("",4);
;
>();
;
>();
;
>();
(a);
}
11.如下程序运行时的输出结果是。
<>
A{
x,n;
;
:
A(a,b){
;
;
10;
}
(){
1;
(1<;)
*;
;
}
(){
<}
};
B:
A{
y,m;
p;
:
B(i,j,k,h)(){
;
;
10;
}
(){
1;
(1;i<)
p*;
p;
}
(){
();
<}
};
(A*f){
<<>()<<'\n';
}
()
{
Aa(4,3),*p;
Bb(2,4,3,3);
;
(p);
;
(p);
();
}
12.如下程序运行时的输出结果是。
<>
{
:
*(){“”;}
*(){“”;}
};
:
{
:
*(){“”;}
*(){“”;}
};
(){<<();}
(a){<<();}
(){
d;(d);
<<””;
(d);<<;
}
五.友元函数
13<>
{
(s);
:
(a)
{;}
:
x;
};
(s){
(<2)1;
*(
(1));
}
()
{
0;
(0<5)((i));
<<;
}
六.运算符重载
14.写出运算符重载函数调用形式。
A{m,n;
:
A(0,0){;;}
A(){;;*;}
A(){A*;(*);t;}
A--(A){;;t;}
A--(A,){A;
;;;}
(){Aa1(1,2),a2(3,4)3,a4;
a31;
a42;
a31;
a42;
15.写出运算符重载函数调用形式。
{
,;
:
(000){
;;;}
();
};
(){
;
(*100.0*10.0)/100;
;}
(){
d1(10,20,30);s1;
s11;}
16.如下程序运行时的输出结果是。
定义一个数组类,通过成员函数重载“”运算符,通过友元函数重载“-=”运算符,实现数组的加等、减等运算。
具体要求如下:
(1)私有数据成员
l*;表示一维数组
ln;数组的大小
(2)公有成员函数
l(*x):
构造函数,以形参初始化数据成员;
l():
实现数组对象的加等运算;
l(12):
实现数组对象的减等运算;
l():
以每行5个元素的格式输出数组;
l~():
析构函数,释放动态内存。
(3)对所定义的类进行测试。
<>
{
*;
n;
:
(*x){
;
[n];
(0<)[i][i];
}
(){(0<)[i][i];}
(12){
(0}
(){
(0<){
<<[i]<<'\t';
(
(1)%50)<<'\n';
}
}
(){[];}
};
(){
a[10]={1,2,3,4,5,6,7,8,9,10}[10]={0,1,2,3,4,5,6,7,8,9};
a1(a,10)2(b,10);
a12;
a1();
a12;
a1();
}
一、函数编程
1.求素数问题:
定义函数判断一个整数是否为素数,求300以内的素数,每行3个数形式输出。
2.最大公约数和最小公倍数问题:
求两分数之和并输出结果,要求:
将求最小公倍数和最大公约数设计成独立的函数。
(提醒:
分子、分母可分别用两个整型变量表示。
之和的分母就是两分数分母的最小公倍数;输出示例:
<<3<<”/”<<7;就完成了分数3/7的输出显示。
)
3.一维数组排序与元素移动综合题:
(1)定义整型数组a[10],从键盘输入10个数为数组赋值,并分别定义两个独立函数,(b[])实现将一维数组元素输出(b[]n)实现将一维数组的元素按从小到大排序(用两种方法实现)。
最后在主函数中分别调用两个函数。
4.二维数组与元素移动:
(1)定义一个二维数组b[2][3],从键盘输入为二维数组赋值,将二维数组中按列循环前移或后移一位,并以矩阵形式输出二维数组元素。
(2)定义一个二维数组,a[4][4],求其外围元素之和与对角线之和,并以矩阵形式输出二维数组元素。
(求和用两种方法实现)
5.字符串处理:
设计一个通用函数实现在字符串s1中从第m个字符开始插入字符串s2,在主程序中对该函数进行测试。
初始状态:
s1:
s2:
1234
输入插入字符串的位置:
3
目标状态1:
1234
s2:
1234
6.拼数与合数问题:
(1)在主函数中定义一个一维数组a[4]用来存放4个整型数3,12,0,1,并依次输出一维数组中的元素。
(2)依次取出数组中的元素,利用合数算法将这些元素合成一个数,要求合数的过程写成独立函数的形式,编写(b[]n)函数,其中b为一维数组,n为b数组中包含的元素个数。
该函数用来实现合数过程,并在主函数中调用该函数,并在主函数中输出合成之后的数。
7.数字字符与整数转换算法:
将字符串78c1523d*中整型数据提取出来,合成一个整型数781523并输出来。
再将781523整数的各个数位数字拆开存放到一维数组b[10]中,并将一维数组中的元素转换为数字字符存放到字符数组s[100]中,并输出该数字字符串"325187".
8.字符数组:
(1)定义一个字符数组s[100]={"123"};定义两个函数分别实现将字符串逆序排序和按照字符的码从小到大排序,输出并操作后的字符串。
(2)定义两个字符数组s1[100]=""2[100]={""};将两个字符数组拼接成一个字符串(不用拼接函数),并输出拼接前和拼接后的两个字符串。
9.请从键盘输入一个正整数,求这个数是几位数,并求出该正整数的各个位上的数字之和。
如输入1234,该正整数是4位数,各个数位上的数字之和为10.
10、循环结构:
请从键盘输入一个正整数,求这个数是几位数,并求出该正整数的各个位上的数字之和。
如输入1234,该正整数是4位数,各个数位上的数字之和为10.
11、从键盘上输入一个整数n的值,按下式求出y的值,并输出n和y的值。
123┄!
12、求1-1/2+1/3-1/4+……+1/99-1/100的和。
13、求1+1/1!
+1/2……+1/10!
的和
14、从键盘输入一个整数n,将该整数的每一位上的数字拆开,存放到一维数组a[10]中,该过程用独立函数形式实现。
并将一维数组中的元素取出合成一个数,并输出合成的数和一维数组元素。
如n:
1234,存放到一维数组中的顺序为4321,合成一个数为4321。
二、类的编程:
用类解决实际问题的方法分三个步骤,如下:
1、定义类的框架
2、公有成员函数的实现
3、在主函数中测试类(用类定义对象,并用对象调用成员函数)
(一)数据成员为一维数组时
问题描述如下:
(1)定义一个类,它的数据成员和成员函数如下:
私有数据:
b[10],m;
公有成员函数:
(t[])功能为一维数组b初始化
()求一维数组b的最大值为m
()功能为实现对一维数组从大到小排序
()功能为将一维数组元素循环后移一位
()功能为输出一维数组元素
(2)用类定义对象,并用对象调用成员函数,实现对一维数组元素排序和数组元素循环后移一位,并输出每次操作的结果。
(二)数据成员为二维数组时
1、问题描述如下:
(1)定义一个类,它的数据成员和成员函数如下:
私有数据:
a[4][5];s;
公有成员函数:
(t[][5])功能为二维数组b初始化
()功能为求二维数组b外围元素之和为s
()对二维数组b按列前移
()功能为以矩阵形式输出二维数组元素
(2)用类定义对象,并用对象调用成员函数求出二维数组外围元素之和,按列前移,再求二维数组外围元素之和,输出二维数组元素。
2、问题描述如下:
(1)定义一个类,它的数据成员和成员函数如下:
私有数据:
b[4][4];s;
公有成员函数:
(t[][4])功能为二维数组b初始化
()功能为求二维数组b对角线元素之和为s
()将二维数组b最小元素所在的列与第0列对调
()功能为以矩阵形式输出二维数组元素
(2)用类定义对象,并用对象调用成员函数求出二维数组对角线元素之和,对调最小元素所在的列与第0列,输出二维数组元素。