找回密码
 注册

QQ登录

只需一步,快速开始

查看: 3881|回复: 4

重庆大学网院C++程序设计语言第123次参考答案

  [复制链接]
发表于 2017-2-16 23:33:37 | 显示全部楼层 |阅读模式
C++程序设计语言
第1次作业
一、单项选择题(本大题共60分,共 20 小题,每小题 3 分)
1. C++程序中,用于实现数据输出的是( )。
A.
输出流对象cin和提取运算符>>

B.
输出流对象cin和插入运算符<<

C.
输出流对象cout和提取运算符>>

D.
输出流对象cout和插入运算符<<

2. C++程序中,定义内联函数时需要函数的返回值类型前加上关键字( )。
A.
outline

B.
inline

C.
in

D.
inport

3. 下面所列选项中,合法的用户标识符是( )。
A.
if

B.
switch

C.
finename

D.
int

4. C++程序中,定义引用变量时,( )。
A.
使用的运算符是*

B.
使用的运算符是()

C.
使用的运算符是&

D.
使用的运算符是[]

5. C++程序中要使用标准输入/输出流对象,必要包含( )。
A.
string头文件

B.
cmath头文件

C.
iostream头文件

D.
cctype头文件

6. C++程序中,为了导入标准命名空间,使用的语句是( )。
A.
inporting namespace std;

B.
using namespace std;

C.
using namespace standard;

D.
inporting namespace standard;

7. 下列关于函数的说法中,不正确的是( )。
A. 在不同函数中可以使用相同的名字命名变量
B. 形式参数是局部变量
C. 在函数内部定义变量的作用域在本函数中
D. 在一个函数内的复合语句中定义变量的作用域也是整个函数
8. C++程序的函数调用中,使用数值参数传递时,( )。
A.
能够在被调函数中通过形参修改实参

B.
实参和对应的形参数据类型可以不一致

C.
形参不能够从实参获取数值

D.
不能在被调函数中通过形参修改实参

9. C++程序中,定义具有默认参数的函数时,默认参数( )。
A.
只能在所有形式参数的左边边部分

B.
可以在所有形式参数的任何部分

C.
只能在所有形式参数的右边部分

D.
只能在所有形式参数的中间部分

10. 在C++程序中,注释的书写方法除了/**/这种形式外,还可以使用的形式是( )。
A.
“<字符序列>”

B.
\0<字符序列>\0

C.
//<字符序列>

D.
\\<字符序列>

11. C++语言中,定义一个文件流对象的正确语句形式是( )。
A.
void *sp;

B.
fstream sp;

C.
FILE &sp;

D.
filestream *sp;

12. 对于字符常量'B',与其对应的转义字符书写形式是( )。
A.
'\101'

B.
'\x42'

C.
'\x41'

D.
'\A'

13. C++程序中,引用变量( )。
A.
表示另外一个同类型普通变量的地址

B.
表示对另外一个同类型普通变量的赋值操作

C.
表示另外一个不同类型普通变量的别名

D.
表示另外一个同类型普通变量的别名

14. 在C++程序中,实型常数10-5的指数书写形式是( )。
A.
10^-5

B.
10E-5

C.
1E-5

D.
E-5

15. C++程序可以使用具有默认参数的函数,函数调用时( )。
A.
实际参数的个数可以少于形式参数个数

B.
实际参数个数必须与形参个数相同

C.
实际参数的个数可以多于形式参数个数

D.
可以省略书写函数参数表的圆括号

16. 下列关于析构函数的说法正确的是( )。
A.
析构函数是没有参数,但可以有返回值的特殊成员函数

B.
析构函数是没有参数,没有返回值的特殊成员函数

C.
析构函数的名称必须与类名完全相同

D.
析构函数的名称可以是任意的合法标识符

17. C++程序中,定义内联函数时,函数体中不允许( )。
A.
定义局部变量

B.
使用单分支if语句

C.
使用条件表达式

D.
使用循环语句

18. 下列( )项不属于静态联编。
A.
非成员函数调用

B.
非虚函数调用

C.
虚函数调用

D.
函数重载调用

19. 在下面的函数声明中,存在着语法错误的是( )。
A. void BC(int a, int);
B. void BD(int, int);
C. void BE(int, int a);
D. int BF(int x; int y);
20. 设有函数原型为:double func(int a,double b);,下面的重载中,错误的是( )。
A.
double func(double a,int b);

B.
int func(double a,int b);

C.
double func(int a,double b,float c);

D.
int func(int a,double b);

二、多项选择题(本大题共20分,共 5 小题,每小题 4 分)
1.
在定义类模板时需要主要一下问题(    )。

A.
如果在全局域中声明了与模板参数同名的变量,则该变量被隐藏掉。

B.
模板参数名不能被当作类模板定义中类成员的名字。

C.
同一个模板参数名在模板参数表中只能出现一次。

D.
在类模板的前向声明和定义中,模板参数的名字可以不同。

2.
异常错误大概分为三类,分别是(    )。

A.
编译错误。

B.
运行时错误。

C.
逻辑错误。

D.
硬件错误。

3.
C++支持的多态特征包括(  )。

A.
重载多态

B.
强制多态

C.
包含多态

D.
参数多态

4.
类模板什么时候会被实例化(    )。

A.
当使用了类模板实例的名字,并且上下文环境要求存在类的定义时

B.
当使用了类模板实例的名字,并且上下文环境要求存在类的定义时

C.
一个指针或引用指向一个类模板实例,当检查这个指针或引用所指的对象时

D.
定义一个模板类的引用时

5.
STL的三个基本组成部分是(    )。

A.
容器

B.
模板

C.
算法

D.
迭代器

三、判断题(本大题共20分,共 10 小题,每小题 2 分)
1. C++语言中,文件是指具名存放在外部存储设备上的一组信息,它们以二进制代码形式存在。
2. C++语言中,文件的顺序读写方式不利于数据文件的修改操作。
3. C++程序中,语句:string s1,s2;定义了两个string类型的对象。
4. C++程序中,使用内联函数的目的是提高程序的执行效率。
5. C++语言中,定义多维数组时,每一维的长度都必须用单独的一个方括号(数组运算符)括起来。
6. C++程序中,可以使用表达式s1.empty()判断s1是否空串。
7. C++程序中,可以通过文件流对象的tellg函数获取文件写位置指针与文件头之间的距离(字节数)。
8. C++程序中,对一个文件的 操作完成后,要及时关闭文件。
9. C++程序中,使用文件流对象的eof函数来判断文件数据是否已经处理完成。
10. C++程序中,可以通过输出文件流对象和插入操作符(<<)配合将数据写入到数据文件中。


第2次作业
一、单项选择题(本大题共40分,共 20 小题,每小题 2 分)
1. 下列代码中,( )能够正确第将类A申明为类B的友元类。
A.
class B { friend class A;}

B.
class B { friend A;}

C.
class A { friend class B;}

D.
class A{ friend B;}

2. 类A使用虚基类的方式,从类B派生而来。下面( )准确定义了这种继承方式。
A.
virtual class B{}; virtual class A : public B {};

B.
virtual class B{}; class A : virtual public B {};

C.
class B{}; class A : virtual public B {};

D.
virtual class B{}; class A : public B {};

3. 下面代码执行结束后的输出是( ) #include using namespace std; class A{ private: int x; public: A(int a){x=a;} A(A &a){x=a.x;} void show(){cout << “x:” << x << “ “;} }; void main(){ A a1(5); a1.show(); A a2(a1); a2.show(); }
A.
x:5 x:5

B.
x:5

C.
编译有错

D.
以上答案都不对

4. 声明类模板时,形参具有类型或值的默认实参值,那么在实例化类模板时( )。
A.
必须使用默认实参值

B.
必须指定实参值

C.
可以使用默认参数和指定参数

D.
只能指定实参或者只能使用默认实参值

5. 如果类A是类B的基类,两个类中都有同名的成员函数fun,下列( )能够正确调用到A类的成员函数fun。
A.
B *b; b->fun();

B.
B b; B &br=b; br.fun();

C.
B b; b.A::fun();

D.
B b; b.fun();

6. 有类的定义如下: class A{ private: int x,y; public: A(int m,int n){x=m;y=n;} }; Class B{ private: int z; A a; public: B(int m); }; 下列( )是正确的B类构造函数实现代码。
A.
B::B(int m) : a(m), z(m){ }

B.
B::B(int m) : a(),z() { }

C.
B::B(int m) : a(m,m), z(m){ }

D.
B::B(int m) : a=(m,m), z=m { }

7. 使用类模板,就必须显式指定模板( )。
A.
变量

B.
实参

C.
形参

D.
类型

8. 下列( )能够正确地申明友元函数,让函数fun能够访问类A的私有成员。
A.
void fun() friend class A;

B.
Friend class A{private: int i; void fun();};

C.
class A{private: int i; friend fun();};

D.
class A{private: int i; friend void fun();};

9. 下列关于类的定义中正确的是( )。
A.
class C { int a,b;}

B.
class C { int a; int b;}

C.
class C {int a=10; int b;};

D.
class C {int a; int b;};

10. 下列代码中,( )能够通过一个对象数组元素访问成员函数。
A.
(arr[2])->show();

B.
(*arr[2]).show();

C.
(&arr[2]).show();

D.
(*(arr+2)).show();

11. 下列关于虚函数的说法中,( )项是错误的。
A.
构造函数不能申明为虚函数

B.
析构函数不能申明为虚函数

C.
如果要使用虚函数来实现多态,必须满足类型兼容原则

D.
通常将需要派生类重写的函数申明为虚函数

12. 下面( )项能够正确地申明重载“++”运算符的后缀形式为类A的成员函数。
A.
A operator ++(int);

B.
A operator ++();

C.
A operator ++(0);

D.
A operator ++(A,int);

13. 下列关于静态成员函数的说法中,错误的是( )。
A.
静态成员函数只能访问类的静态数据成员

B.
静态成员函数也可以通过形参的方式操作类的对象,但最好不要这样处理,因为静态成员函数只处理与类属性有关的操作更加容易理解。

C.
静态成员函数可以访问类的非静态成员函数

D.
虽然可以采用“对象.静态成员函数”的方式访问静态成员函数,但是仍然推荐使用“类名::静态成员函数”的方式。

14. 下面( )种多态形式是由动态联编来实现的。
A. 重载多态

B.
强制多态

C.
参数多态

D.
包含多态

15. 使用文件流对象从指定文件中读取数据时,表达式形式为( )。
A.
<输出流对象名> >> <变量名>

B.
<输入流对象名> << <变量名>

C.
<输出流对象名> << <变量名>

D.
<输入流对象名> >> <变量名>

16. 下列的代码运行时不会发生拷贝构造函数调用的是( )。
A.
Point p1(1,2); Point p2(p1)

B.
Point p1(1,2); Point p2; p2=p1;

C.
void printPoint(Point p){……}

D.
Point createPoint(){Point p; …… return p;}

17. 有类A的定义如下: class A{ public: A(int x,int y); private: int x; const int y; }; 下列关于类A的构造函数的代码中,( )能够正确地给成员变量x,y赋初值。
A.
A::A(int x,int y):y(y){x=x;};

B.
A::A(int x,int y):x(x){y=y;};

C.
A::A(int x,int y):y(y){this->x=x;};

D.
A::A(int x,int y):x(x){this->y=y;};

18. 下列语句中,能够正确定义一个对象引用的是( )。
A.
Point p(1,2); Point &r; r=p;

B.
Point p(1,2); Point &r=p;

C.
Point &r=p(1,2);

D.
Point &r; Point p(1,2); r=p;

19. 浅拷贝与深拷贝的区别在于( )。
A.
深拷贝在对非指针成员变量赋值的同时,也对指针成员变量赋值,从而达到所有的成员变量都被赋值的效果

B.
深拷贝会在为成员变量赋值时,将指针成员变量所指向的内存空间也复制一份,让现有对象的指针变量指向这个空间,并且会对对象成员进行上述递归赋值操作

C.
深拷贝会将已有对象的对象成员,逐一递归进行赋值

D.
深拷贝会使已有对象和现有对象的指针成员变量指向同一块内存空间

20. 下列语句中,能够正确初始化一个对象数据的是( )。
A.
Point arr[3]=(Pont(1,2),Point(3,4),Point(5,6));

B.
Point arr[3]={(1,2), (3,4), (5,6)};

C.
Point arr[]={Point(1,2),Point(3,4),Point(5,6)};

D.
Point arr[3]={Point(1,2);Point(3,4);Point(5,6)};

二、判断题(本大题共60分,共 20 小题,每小题 3 分)
1. 函数重载只会发生在相同作用域范围内,而基类的成员和派生类成员属于不同的作用域范围,所以派生类重写的同名函数不会重载基类的同名函数。
2. 无论采用何种方式来生成派生类,基类的私有成员都不能被访问。
3. C++语言支持多重继承,派生类将继承多个父类中共有的同名属性和方法。
4. STL算法中,可变序列算法是对容器内容进行数值计算。
5. 虚基类、直接派生类和间接派生类的析构函数调用顺序完全与它们的构造函数调用顺序相反。
6. 定义对象数组时,对于没有给定初始值的数组元素,系统将通过调用默认构造函数的方式进行初始化。
7. 当以非成员函数形式重载运算符时,有时需要访问参与运算的对象的私有成员,那么我们可以将这个成员函数设置为类的友元函数。
8. 使用私有继承来生成派生类时,基类的公有和保护成员可以被访问,但是私有成员不能被访问。
9. 类模板的参数的默认参数值声明时,如果有多个参数,第一个默认参数后的所有参数必须具有默认参数。
10. 封装是指将一个事物对外联系的属性和行为暴露出来,同时隐藏内部运行机制有关的属性和行为的方法。
11. 只有私有继承方式中,派生类的自定义成员函数才能访问基类的私有成员,其它任何一种派生方式都不允许派生类自定义成员函数访问基类的私有成员。
12. 基类的同名函数会被派生类的同名函数屏蔽,它不会出现在派生类中,当然也不可能使用派生类对象访问基类的同名函数。
13. C语言采用面向对象的思想来进行程序设计;而C++语言采用面向过程的思想来进行程序设计。
14. 无论运算符被重载为类的成员函数还是非成员函数,在函数中都可以访问参与运算的对象的私有成员。
15. 抽象类主要用来进行系统的设计,它的定义往往出现在某一簇类的定义之前,提前描述其它几个类的共同公有成员函数,它是这一簇类的基类。
16. 成员函数全部都是纯虚函数的类,被称为抽象类,不能够被实例化。如果具有非纯虚成员函数,那么这个类就是具体类,可以被实例化。
17. 运算符的重载从本质上来看仍然是函数重载,编译器会将使用运算符的表达式翻译成函数调用。
18. 抽象类是在类的基础上进一步抽象,它定义了某一簇类的共有方法,描述了这一簇类的公有接口。
19. this指针被隐含地传递到每一个成员函数中,包括静态成员函数。
20. 无论虚基类是否定义了默认构造函数,派生类都必须在自己的构造函数中,使用初始化列表去调用虚基类的构造函数。


答案回复可见:


第3次作业
一、填空题(本大题共20分,共 5 小题,每小题 4 分)
1. 假定一个二维数组为a[M][N],则a的地址值(以字节为单位)为 ______ .
2.
类型兼容原则指的是:任何在需要     对象的地方,都可以用       的对象去替代。

3.
重新抛出异常的表达式为:       。

4.
以下程序的执行结果是                  。
#include <iostream>
using namespace std;
class Base{
public:
        Base(){cout<<”1”;}
        ~Base(){cout<<”2”;}
};
class Derived : public Base{
public:
        Derived(){cout<<”3”;}
        ~Derived(){cout<<”4”;}
};
void main(){
        Derived d;
}

5.
以下程序的执行结果是                  。
#include <iostream>
using namespace std;
class A{
        int x;
public:
        A(int x){this->x=x;}
        A &operator--(){x--;return *this;}
        A operator--int){A a(x-=2);return a;}
        void show(){ cout<< x;}
};
void main(){
        A a(3),b(3);
        (a--).show();
        (--b).show();
}


二、程序阅读题(本大题共40分,共 5 小题,每小题 8 分)
1. 写出下面程序运行结果。
#include <iostream.h>
void rev(int a[],int n)
{
int t;
for(int i=0,j=n-1;i<j;i++,j--)
  t=a,a=a[j],a[j]=t;
}
int main()
{
int b[]={1,2,3,4,5,6,7,8,9};
rev(b,9);
for(int i=0;i<9;i++)
  cout<<b<<"  ";
cout<<endl;
return 0;
}
2.
#include <iostream>
using namespace std;
int main()
{       
        int i,j,m=3;
        for(i=0;i<m;i+=2)
            for(j=m-1;j>=0;j--)
                       cout<<i+j<<(char)(j?'H':'$');
        cout<<endl;

        return 0;
}

3.
#include <iostream>
#include <cstring>
using namespace std;
int count(char *s,char *t);
int main()
{
        char s1[200]="ab1234cdabcdabcABCDAGBCDdabcd";
        char s2[100]="bc";
        cout<<"count="<<count(s1,s2)<<endl;

        return 0;
}
int count(char *s,char *t)
{
        int i=0,c=0;
        while(*(s+i))
        {
                if(strncmp(s+i,t,strlen(t))==0)
                        c++;
                i++;
        }
        return c;
}

4.
#include <iostream>
using namespace std;
int avere(int x,int y,int z);
double aver(double x,double y,double z);
int main()
{
        int ai=1,bi=2,ci=3;
        double ad=1.5,bd=5.5,cd=7.5;
        cout<<"ai+bi+ci="<<aver(ai,bi,ci)<<endl;
        cout<<"ad+bd+cd="<<aver(ad,bd,cd)<<endl;

        return 0;
}
int aver(int x,int y,int z)
{
        return x+y+z;
}
double aver(double x,double y,double z)
{
        return x+y+z;
}

5.
#include <iostream>
using namespace std;
int a,b,c,d;
int main( )
{       
        void p(int a,int b);
        cout<<a<<","<<b<<","<<c<<","<<d<<endl;
        p(a,b);
        cout<<a<<","<<b<<","<<c<<","<<d<<endl;
        return 0;
}
void p(int a,int b)
{       
        static int c;
        a++,b++;
        c-=1,d+=1;
        if(a<3)
        {
                p(a,b);
                cout<<a<<","<<b<<","<<c<<","<<d<<endl;
        }
}


三、程序设计题(本大题共40分,共 8 小题,每小题 5 分)
1.
一个正整数与3的和是5的倍数,与3的差是6的倍数,编程序求出符合此条件的最小正整数。

2.
编制程序实现功能:将从键盘输入的若干字符依次存入到磁盘文件data.txt中,直到输入字符#时为止。

3.
设计并实现一个抽象类Polygon表示多边形,及其子类Triangle,表示三角形。要求:
(1)Polygon不具有任何的数据成员,只具有如下纯虚函数表示多边形应该具备的外部接口:
void show();   打印多边形每个顶点的位置
double getPerimeter();   得到多边形的边长
double getArea();  得到多边形的面积
(2)设计并实现Point类来表示多边形的顶点,其具有x,y两个数据成员和得到它们的值的外部接口getX()和getY()。
(3)子类Triangle除了实现父类的纯虚函数之外,可根据需要设计成员变量、构造函数等。
(4)在main函数中申明Triangle的对象,并打印每个对象的顶点位置、边长和面积。

4.
定义两个类Point和Triangle代表点和三角形。Point类有两个double成员,分别代表了x,y坐标。Triangle类中有三个Point成员,分别代表三个顶点。在main函数中定义一个Triangle对象,并求得Triangle对象的面积。要求除了main函数之外,所有的函数都只能定义为成员函数。
提示:Point中可以定义成员函数求两个点之间的距离。实现时使用sqrt(double)求平方根。Triangle类中定义成员函数求面积,使用海伦公式s=sqrt(s*(s-a)*(s-b)*(s-c)),s是周长的一半。Point有(但不仅限于)构造函数Point(double,double),Triangle有构造函数Triangle(Point,Point,Point)

5.
“爬动的蠕虫”问题: 一条蠕虫长度为1厘米,在一口深度为n厘米的井底。已知蠕虫每分钟可以向上爬u厘米,但必须休息1分钟后才能接着往上爬。在休息的过程中,蠕虫又下滑了d厘米。这样反复进行上爬和下滑过程,请设计一个函数返回蠕虫爬出井所需的时间,若不能爬出返回-1。
假定:
1)初始时蠕虫趴在井底(高度为0)
2)上爬过程中,蠕虫头部到达井的顶部就算出井
3)计算时间时,不足一分钟按一分钟计算

6.
已知二进制文件data.txt中10个整型数据,请编制程序求出这些整数的平均值。要求读取文件数据部分用独立的函数实现。

7.
设计枚举类型MONTH代表一年的12个月的英文名称。
设计结构体Date代表日期,包括年、月、日,其中的月成员为MONTH类型;Date还包括一个show成员函数来输出形如"2015-10-1"的日期格式。
设计类Holiday来代表假期,其中有两个数据成员:n表示假期天数,ptr表示放假的日期。其中ptr是指向动态生成的Date数组的首地址。构造函数和析构函数负责开辟和释放内存空间。Holiday类还有show成员函数来输出假期中每一天的日期。
在main函数中生成一个具有多天的假期,并输出其中每一天的日期。

8.
编写程序实现功能:将指定文件中的小写字母修改为对应的大写字母。


答案附件回复可见:

游客,如果您要查看本帖隐藏内容请回复
发表于 2017-3-26 15:50:47 | 显示全部楼层
发表于 2017-12-3 14:17:01 来自手机 | 显示全部楼层
发表于 2018-12-2 13:04:58 | 显示全部楼层
厉害啊,多多益善嘛

QQ|手机版|小黑屋|网站地图|无忧答案网 ( 冀ICP备18010495号-1 )

GMT+8, 2024-5-4 15:26

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表