浙江工业大学期终考试命题稿
    2009 /2010  学年第 学期   
课程名称
C++程序设计Ⅱ
使用班级
信息学院09
教师份数
学生份数
500
命题人
张健
审核人
命题总页数
        8
每份试卷需用白纸
    3  大张
命题注意事项:
一、命题稿请用A4纸电脑打印,或用教务处印刷的命题纸,并用黑墨水书写,保持字迹清晰,页码完整。
二、两份试题必须同等要求,卷面上不要注明AB字样,由教务处抽定AB卷。
三、命题稿必须经学院审核,并在考试前两周交教务处。
浙江工业大学2009/2010学年
第二学期期中试卷
课程 C++程序设计                 姓名___________________________
班级____________________________    授课教师                      
题序
总评
计分
试题一、选择题(每题1分,共10分)
1.下面是关于构造函数的说法,不正确的是(  C )。
A. C++规定,每一个类必须有一个构造函数,没有构造函数就不能创建对象
B. 如果没有提供一个类的构造函数(一个都未提供),则C++提供一个默认的构造函数,该默认构造函数
是个无参构造函数,它仅仅负责创建对象
C. 虽然一个类定义了一个构造函数(不一定是无参构造函数),C++仍然提供默认的构造函数
D. 与变量定义类似,在用默认构造函数创建对象时,如果创建的是全局对象或静态对象,则对象的位模式全为0,否则,对象值是随机的
2.声明类test的复制构造函数的正确形式是(   D  )。
A. int test  B. void test  C. test(void)    D. test(test&)
3.一个const对象(  B   )。   
A. 能访问所有成员函数          B. 只能访问const成员函数
C. 也能访问普通的成员函数      D. 能访问const和普通的成员函数
4.下面关于类的对象性质的描述,正确的是( D  )。
A. 对象之间不可以相互赋值          B. 不可以说明指向对象的指针
C. 对象不能用作数组元素            D. 一个对象能用作另一个对象的成员
5.下列有关内联函数的叙述中,正确的是( C  )。
A. 内联函数在调用时发生控制转移
B. 内联函数必须通过关键字inline 来定义
C. 内联函数是通过编译器来实现的
D 内联函数体的最后一条语句必须是rennin 语句
6.下列情况中,不会调用拷贝构造函数的是()。
A. 用一个对象去初始化同一类的另一个新对象时
B. 将类的一个对象赋予该类的另一个对象时
C. 函数的形参是类的对象,调用函数进行形参和实参结合时
D. 函数的返回值是类的对象,函数执行返回调用时
7. C++源程序文件的扩展名为( A 
A. .CPP    B. C    C. .DLL  D. .EXE
8. 编译程序的功能是( 
A. 将汇编语言程序转换为目标程序
B. 将汇编语言程序转换为高级语言程序
C. 将高级语言程序转换为目标程序
D. 将高级语言程序转换为汇编语言程序
9.下面的函数声明中, 哪一个是” void BC(int a, int b);”的重载函数? (  B  )
A. int  BC(int a, int b)            B. void BC(int a, char b)
C. float BC(int a, int b, int c = 0)    D. void BC(int a, int b=0)
10. 对于int *pa[5]的描述,( D   )是正确的。
A. pa是一个指向数组的指针,所指向的数组是5int型元素
B. pa是一个指向某数组中的第5个元素的指针,该元素是int型变量
C. pa[5]表示某个数组的第5个元素的值
D. pa是一个具有5个元素的指针数组,每个元素是一个int型指针
试题二、填空题(每空1 分,共20 分)
1. C语言中,编程的单位是           ;C++语言中,编程的单位是          
2. 类是对具有共同属性和行为的一类事物的抽象描述,共同属性被描述为类中的
            ,共同行为被描述为类中的          
3. 类的具体表现是通过定义_______来操作的。
4. 对类中的成员函数和属性的访问是通过                           3
  个关键字来控制的。
5. 一般情况下,按照面向对象的要求,把类中的数据成员(属性)定义为             
  限,而把成员函数(方法)定义为                权限。   
6. 在类定义中,数据和成员函数默认权限是_________
7. 类中构造函数有            个,析构函数有            个。
8. 类中的构造函数是一个特殊的成员函数,它由类的对象            调用,它的作用
           
9. 在定义类的对象时,C++程序将自动调用该对象的_____ _函数初始化对象自身。
10. 在撤销类的对象时,C++程序将自动调用该对象的___ ___函数。
11.            运算符对指定类型对象动态分配内存并返回              
12.  ________运算符删除(11)题中的运算符所动态分配的内存空间。
13. 假定用户没有给一个名为MyClass的类定义构造函数,则系统为其定义的默认构造
  函数形式为______
14. 假定用户没有给一个名为MyClass的类定义析构函数,则系统为其定义的默认析构
  函数形式为______
15. 在类中定义和实现的函数称为________
16. 非成员函数应声明为类的________才能访问这个类的private成员。
17. 若要把类FriendClass定义为类MyClass的友元类,则应在类MyClass的定义中加入
    语句________
18. 若要把函数void FriendFunction()定义为类MyClass的友元函数,则应在类MyClass   
  的定义中加入语句_______
19. 下面的类中定义了一个关于星期的枚举类型,请完成下面的程序。
class MyClass
{
public:
enum Week {Sun,Mon,Tue,Wed,Thur,Fri,Sat };
    Week week;
  }
void fun(MyClass &my)
{
                  =            ; //将对象myweek赋值为所定义的枚举类型
        //值为3的枚举量
  }
20. 在下面程序的横线处填上适当的语句,使该程序执行结果为10
#include <iostream.h>
class MyClass
{
public:
                                //x置值
                                //x
private:
      int x;
};
void main()
{
      MyClass my(10);
cout << my.GetNum() << endl;
}
1 函数 
2 数据成员 成员函数
3 成员函数
4 private public protect
5  private public
6  private
7  1个或者N个,1
生成时,初始化
9 构造函数
10 析构函数
11  newtrue或者false
12  delete
13  MyClass(){};
14  ~MyClass(){};
15  内联函数
16  friend
17  friend class Myclass ;
18  friend FriendFunction()
19  my.Week=Wed;
20  MyClass(int x){this.x=x;}; // 设置x10  ,int GetNum(){return x;};//返回X
试题三、程序填空题(每空1 分,共10 分)
【程序说明】下列程序的输出结果是42,请将画线处缺失的部分补充完整买。
#include<iostream>
using namespace std;
class Foo{
int value;
public:
Foo(){}
void setValue(int Value)
{                     }          value =Value
                                void print()
{cout<<value<<endl;}
};
int main()
{
                Foo f;
f.setValue(42);
f.print();
return 0;
}
2.【程序说明】完成下面的类定义。
Class MyClass
{
Public:
  MyClass(){x=0;}
            Int GetNum(                   my); friend    MyClass
Private:
  Int x;
};   
Int GetNum(       my)            MyClass
{
  Return my.x;
}
3.【程序说明】下面程序在构造函数和析构函数中申请和释放类的私有成员,请完成该类的实现。
#include <iostream>
using namespace std;
class MyClass
{
public:
    MyClass(int a);
    ~MyClass();
private:
    int *X;
};
MyClass::MyClass(int a)
{
                          //X=new int(a);
}
MyClass::~MyClass()
{
                          // delete X;
}
void main()
{
    MyClass myclass(2);
}
4. 【程序说明】下列程序通过把类Distance定义为类Point的友元类来实现计算两点之间距离的功能,请完成该程序。
  #include <iostream>
#include <cmath>
using namespace std;
class Point
{
public:
                                    friend class Distance;
    Point(                    )      float a=0,float b=0
    {
      X=a;
      Y=b;
    }
    void Print()
    {
        cout<<"X="<<X<<endl;
        cout<<"Y="<<Y<<endl;
    }
private:
    float X,Y;
};
class Distance
{
public:
    float  Dis(Point &p,Point &q);
};   
float Distance::Dis(Point &p,Point &q)
    {
        float result;
                                          result=sqrt((p.X-q.X)*(p.X-q.X)+(p.Y-q.Y)*(p.Y-q.Y));
        cout<<result<<endl;
        return result;
    }
void main()
{
    Point p(10,10),q(20,20);
    Distance d;
    d.Dis(p,q);
}
试题四、程序阅读题(每题5分,共20分)
程序1
#include<iostream.h>
void swap (int x,int &y);
void main()
{
int a(10),b;
b=a/2;
cout<<"a="<<a<<","<<"b="<<b<<endl;
swap(a,b);
cout<<"a="<<a<<","<<"b="<<b<<endl;
enum函数}
void swap (int x,int &y)
{
int temp=x;
x=y;
y=temp;
}
2. 程序2
#include<iostream>
using namespace std;
class Counter
{
  int v;
public:
Counter(){ v=0; }
  Counter& preAddOne();
  Counter  postAddOne();
  void print(){ cout<<v<<”\n”; }
};
Counter& Counter::preAddOne(){
  v++;
  return *this;
}
Counter Counter::postAddOne(){
  Counter temp;
temp.v = v++;
  return temp; }
int main()
{
  Counter c;
  for(int i=0; i<8; i++)
    c.postAddOne().postAddOne();
  c.print();
for(int j=0; j<8; j++)
    c.preAddOne().preAddOne();
  c.print();
}
3. 程序3
#include<iostream.h>
class Obj{
int val;
public:
Obj()
{  val=0;
    cout<<val<<'\t'<<"调用Obj缺省的构造函数!\n";
}
Obj(int i)
{  val=i;
    cout<<val<<'\t'<<"调用Obj的构造函数!\n";
}
~Obj()
{cout<<"调用Obj的析构函数!\n";}
};
class Con{
Obj  one,two;
  int data;
public:
  Con()
  {  data=0;
    cout<<data<<'\t'<<"调用Con缺省的构造函数!\n";
  }
  Con(int i,int j,int k):two(i+j),one(k)   
  {  data=i;
    cout<<data<<'\t'<<"调用Con 的构造函数!\n";
  }
  ~Con()
  {  cout<<"调用Con的析构函数!\n";
  }
};
void main(void)
{Con c(100,200,400);}
4. 程序4
#include<iostream>
using namespace std;
class Point
{
public:
    Point(int xx=0,int yy=0){X=xx;Y=yy;}
    int GetX(){return X;}
    int GetY(){return Y;}
private:
    int X,Y;
};
class Rectangle
{
public:
Rectangle(Point xp1,Point xp2);
float Getarea(){return area;}
private:
Point p1,p2;
float area;
};
Rectangle::Rectangle(Point xp1,Point xp2):p1(xp1),p2(xp2)
{
    float x=float(p1.GetX()-p2.GetX());
    float y=float(p1.GetY()-p2.GetY());
    area=x*y;
}
void main()
{
Point myp1(1,1),myp2(2,2);
Rectangle rectangle(myp1,myp2);
cout<<rectangle.Getarea()<<endl;
}
试题五、程序设计题(每题10分,共40分)
1. 定义一个Point类来处理三维点points(x,y,z).该类有一默认的constructor,一copy constructor, 一negate()成员函数将point的x,y和z值各乘-1, 一norm()成员函数返回该点到原点(0,0,0)的距离,一个print()成员函数显示x,y,和z的值。
2. 定义一个Person类,它的每个对象表示一个人。数据成员必须包含姓名、出生年份、死亡年份,一个默认的构造函数,一析构函数,读取数据的成员函数,一个print()成员函数显示所有数据。
3. 定义和实现类 Array。该类的成员函数GetData返回对一个数组元素的引用,成员函数Print调用成员函数GetData实现对该数组的打印。
4. 一个班有5名学生,每个学生修了5门课。完成:⑴求每个学生的平均成绩,并输出每个学生的学号、每门课程的成绩及平均值。⑵求某门课程的平均分。要求:⑴分别编写两个函数实现以上两个要求。⑵第一个函数用数组名作参数,第二个函数用指针做参数,并在函数体内用指针对数组操作。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。