资源描述
姓名: 学号: 系别: 计算机学院 年级专业: 09软件工程
( 密 封 线 内 不 答 题 )
……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………
_____________ ________
…
东莞理工学院( 本科) 试卷( A卷)
-- 年第 2 学期
《面向对象程序设计基础》试卷
开课单位: 计算机学院 , 考试形式: 闭、 开卷, 允许带 入场
题序
一
二
三
四
五
六
七
八
总 分
得分
评卷人
Ⅰ 选择题(全部为单选, 请把结果写在本大题后面的答题纸内相应的横线上, 写在其它地方无效, 每小题2分, 共50分)
1 以下叙述中不正确的是: ( )
A 函数名属于用户标识符, 其起名规则与变量相同
B 形参只能是变量
C 为保证程序的正确运行, 函数中定义的变量不能与其它函数中定义的变量同名
D 函数中定义的变量能够与其它函数中定义的变量同名
2 有定义语句: int a[]={1,2,3,4,5,6,7},*p=A *q=&a[5]; ( )
则下列表示式中值不等于5的是
A *q-- B *--q C --*q D q-p
3 以下叙述中错误的是: ( )
A 局部变量的定义能够在函数体内部
B 全局变量的定义能够在函数以外的任何位置
C 同一程序中, 全局变量和局部变量不能同名
D 函数的形参属于局部变量
4 以下叙述中错误的是: ( )
A 变量的作用域取决于变量定义语句出现的位置
B 同一程序中, 全局变量的作用域一定比局部变量的作用域大
C 局部变量的作用域是在定义它的函数体内
D 全局变量的作用域是从定义位置开始至源文件结束
5 关于VC6建立的工程的说法, 正确的是: ( )
A 工程只能包含.cpp和.h类型的文件
B 工作区文件的后缀是.dsp
C 用鼠标双击工作区文件能够打开整个工程
D 在VC的FileView中能够看到工程中所有的文件, 包括工作区文件, 项目文件等
6 下面关于在VC6环境下调试运行的说法错误的是 ( )
A 设置合适的断点(F9), 按Ctrl+F5开始调试运行
B 设置合适的断点, 按F5开始运行
C 调试时, 能够随时观察断点处的变量值
D 在调试运行过程中, 可随时按下Stop Debugging(Shift+F5)结束调试运行
7 下列情况中, 哪一种情况不会调用拷贝构造函数 ( )
A 用派生类的对象去初始化基类对象时
B 将类的一个对象赋值给该类的另一个对象时
C 函数的形参是类的对象, 调用函数进行形参和实参结合时
D 函数的返回值是类的对象, 函数执行返回调用者时
8 以下哪一关键字可用于重载函数的区分( )
A extern B static C const D virtual
9 下列有关内联函数的叙述中, 正确的是 ( )
A 内联函数在调用时发生控制转移 B 使用内联函数有利于代码重用
C 必须经过关键字inline来定义 D 是否最后内联由编译器决定
10 实现运行时多态的机制是( )
A 虚函数 B 重载函数 C 静态函数 D 模版函数
11 以下哪个符号( 或组合) 是作用域限定符( )
A -> B . C :: D []
12 下列关于this指针的说法正确的是( )
A this指针存在于每个函数之中
B 在类的非静态函数中this指针指向调用该函数的对象
C this指针是指向虚函数表的指针
D this指针是指向类的函数成员的指针
13 若有以下类定义
class MyClass {
public:
MyClass() { cout << 1; }
};
则执行语句MyClass a,b[2],*p[2];后, 程序的输出结果是( )
A 11 B 111 C 1111 D 11111
14 下面程序的输出结果是( )
#include <iostream>
using namespace std;
int i = 0;
int fun(int n)
{
static int a = 2;
a++;
return a+n;
}
void main()
{
int k = 5;
姓名: 学号: 系别: 计算机学院 年级专业: 09软件工程
( 密 封 线 内 不 答 题 )
……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………
{
int i = 2;
k += fun(i);
}
k += fun(i);
cout << k;
}
A 13 B 14 C 15 D 16
15 下面程序的输出结果是( )
#include <iostream>
using namespace std;
class A
{
public:
A (int i) { x = i; }
void dispa () { cout << x << ”,”; }
private :
int x ;
};
class B : public A
{
public:
B(int i) : A(i+10) { x = i; }
void dispb() { dispa(); cout << x << endl; }
private :
int x ;
};
void main()
{
B b(2);
b.dispb();
}
A 10,2 B 12,10 C 12,2 D 2,2
16 下面程序的输出结果是( )
#include <iostream>
using namespace std;
class Base
{
public:
Base(int i) { cout << i; }
~Base () { }
};
class Base1: virtual public Base
{
public:
Base1(int i, int j=0) : Base(j) { cout << i; }
~Base1() {}
};
class Base2: virtual public Base
{
public:
Base2(int i, int j=0) : Base(j) { cout << i; }
~Base2() {}
};
class Derived : public Base2, public Base1
{
public:
Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),
Base2(d), Base(a)
{ cout << b; }
private:
Base2 mem2;
Base1 mem1;
};
void main() { Derived objD (1, 2, 3, 4); }
A 134122 B 123412 C 1430 D 143212
17 下面程序的输出结果是( )
#include <iostream>
using namespace std;
int countp=0;
class Point
{
int X,Y;
public:
Point(int x=0,int y=0) { X=x; Y=y;}
Point(Point &p){X=p.X;Y=p.Y;countp++;}
friend Point myfun(Point p1 ,Point p2 ,const Point &p3);
};
Point myfun(Point p1,Point p2,const Point &p3)
{
Point tmp(p1.X+p2.X+p3.X,p1.Y+p2.Y+p3.Y);
return tmp;
}
void main()
{
Point pp0,pp1(1,2),pp2(1);
myfun(pp0,pp1,pp2);
std::cout<<countp<<endl;
姓名: 学号: 系别: 计算机学院 年级专业: 09软件工程
( 密 封 线 内 不 答 题 )
……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………
}
A 0 B 4 C 3 D 6
18 下面程序的输出结果是( )
#include <iostream >
using namespace std;
void swap1( int &v1, int &v2)
{
int tmp = v2;v2 = v1;v1 = tmp;
}
void swap1( int *v1, int *v2)
{
int tmp= *v2;*v2 = *v1;*v1 = tmp;
}
void main()
{
int i = 10, j = 20; swap1(i,j); swap1(&i,&j);
cout<<i<<”,”<<j<<endl;
}
A 10,20 B 20,10 C 10,10 D 20,20
19 下面的程序段的运行结果为( )
char str[] = "job", *p = str;
cout << *(p+2) << endl;
A 98 B 无输出结果 C 字符’b’的地址 D 字符’b’
20 double型数据所占字节数是( )
A 2 B 4 C 6 D 8
21 若变量都已经正确定义, 以下表示式中非法的是( )
A a/=b+c B a % 4.0 C a=1/2*(x=y=10 , x*3) D a=b=c
22 以下选项中不是字符常量的是( )
A ‘\v’ B ‘\x6d’ C ‘w’ D ”0”
23 以下非法的字符串常量为( )
A ”\\ \\” B ”It’s” C ”m=\abc” D ”$12.8”
24 对于类的常成员函数的描述正确的是( )
A 常成员函数不修改类的数据成员
B 常成员函数能够对类的数据成员进行修改
C 常成员函数只能由常对象调用
D 常成员函数不能访问类的数据成员
25 使用如setw()的操作符对数据进行格式输出时, 应包含的头文件是( )
A iostream B fstream C stdio D iomanip
选择题答题纸:
1 21
2 22
3 23
4 24
5 25
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
姓名: 学号: 系别: 计算机学院 年级专业: 09软件工程
( 密 封 线 内 不 答 题 )
……………………………………………………密………………………………………………封………………………………………线……………………………………线………………………………………
Ⅱ 上机编码试题, 共5小题, 共50分, 请按要求答在给定的项目文件中提交。
(本页不得撕掉! 答本大题前请先交卷! )
! 请于考试结束前关闭你的项目, 删去你的文件夹下的Debug文件夹, 然后把你的整个项目文件夹打包成一个”.rar”文件提交到下面服务器中相应的地方。
! 服务器 ftp://219.222.170.198
提交考试结果的用户名及密码username/password: cs w/ cs w
! 你的程序不能有编译错误, 否则以0分记! 以” 41404101 陈晓雪”为例, 提交的文件名应为” 41404101陈晓雪_面向对象A.rar”, 解压后的文件夹也应为” 41404101陈晓雪_面向对象A”。(注: 中间没有空格! )
1 创立一个VC6.0项目。要求: 以你的学号+姓名+”_面向对象A”为项目名创立一个带”Hello World”的win32控制台应用程序。以” 41404101 陈晓雪”为例, 所创立项目的名称为” 41404101陈晓雪_面向对象A”(10分)
2 声明一个Point类, 该类描述了直角坐标系中的一个点。成员变量为私有的double x,y; 成员函数包括不带参数的构造函数; 带两个参数(double x, double y)的构造函数, 拷贝构造函数, 分别取得x和y值的函数getX和getY。(10分)
3 从第2题的Point类派生出一个新类(名为Circle), 该新类是描述圆的一个类, 成员变量为私有的表示圆的半径double r。并请写出一个成员函数getMaxY, 返回该圆在y轴最高点的坐标。(10分)
4 运算符重载。假设obj是第3题的Circle类的对象, obj++是指把当前圆的半径加1, 请实现这个++运算符的重载。(10分)
5 刚学会加减法的小学生都知道1+1 = 2, 2- 1 = 1。可是她还暂时还算不出来1 – 2 = -1, 而会认为1 – 2是减不动的, 因此得不出正确的结果。现要求你写一个小学生的减法函数int sum(int x, int y),当出现减不动的情况时抛出一个异常消息为”减不动”的异常; 并请在main函数中截获并显示该异常消息。(10分)
(请先撕掉本页, 交卷, 然后再答本大题!)
! 请于考试结束前关闭你的项目, 删去你的文件夹下的Debug文件夹, 然后把你的整个项目文件夹打包成一个”.rar”文件提交到下面服务器中相应的地方。
! 服务器 ftp://219.222.170.198
提交考试结果的用户名及密码username/password: cs w/ cs w
! 你的程序不能有编译错误, 否则以0分记! 以” 41404101 陈晓雪”为例, 提交的文件名应为” 41404101陈晓雪_面向对象A.rar”, 解压后的文件夹也应为” 41404101陈晓雪_面向对象A”。(注: 中间没有空格! )
1 创立一个VC6.0项目。要求: 以你的学号+姓名+”_面向对象A”为项目名创立一个带”Hello World”的win32控制台应用程序。以” 41404101 陈晓雪”为例, 所创立项目的名称为” 41404101陈晓雪_面向对象A”(10分)
2 声明一个Point类, 该类描述了直角坐标系中的一个点。成员变量为私有的double x,y; 成员函数包括不带参数的构造函数; 带两个参数(double x, double y)的构造函数, 拷贝构造函数, 分别取得x和y值的函数getX和getY。(10分)
3 从第2题的Point类派生出一个新类(名为Circle), 该新类是描述圆的一个类, 成员变量为私有的表示圆的半径double r。并请写出一个成员函数getMaxY, 返回该圆在y轴最高点的坐标。(10分)
4 运算符重载。假设obj是第3题的Circle类的对象, obj++是指把当前圆的半径加1, 请实现这个++运算符的重载。(10分)
5 刚学会加减法的小学生都知道1+1 = 2, 2- 1 = 1。可是她还暂时还算不出来1 – 2 = -1, 而会认为1 – 2是减不动的, 因此得不出正确的结果。现要求你写一个小学生的减法函数int sum(int x, int y),当出现减不动的情况时抛出一个异常消息为”减不动”的异常; 并请在main函数中截获并显示该异常消息。(10分)
展开阅读全文