C++试题及答案 下载本文

内容发布更新时间 : 2024/12/23 4:52:34星期一 下面是文章的全部内容请认真阅读。

X(X&t) {x=t.x;

cout<

void fun(X); };

void fun(X t)

{cout<

答案:cout<x=x<x=x表达式的值要加括号。 [修改]cout<<(this->x=x)< #include class Bas {public:

Bas(char *s=\\0\void show(); protected:

char name[20]; }; Bas b;

void show()

{cout<<\void main()

{Bas d2(\show(); }

答案:void show();是普通函数不是成员函数,但是要访问类成员,需要定义为友元函数。 [修改]friend void show();

四、完成程序题(本大题共5小题,每小题4分,共20分)

1. 在下面程序横线处填上适当字句,以使该程序执行结果为: 50 4 34 21 10

0 7.1 8.1 9.1 10.1 11.1 #include template void f (__________) {__________;

for (int i=0;i

t=a[i], a[i]=a[n-1-i], a[n-1-i]=t; }

void main ()

{int a[5]={10,21,34,4,50};

double d[6]={11.1,10.1,9.1,8.1,7.1}; f(a,5);f(d,6);

for (int i=0;i<5;i++) cout <

for (i=0;i<6;i++) cout << d[i] << \cout << endl; }

答案:T a[],int n,T t=0;

[解析]不同的数据类型的调用,使用了模板。f函数增加t变量,因为实参类型不同,所以t的 类型应该是T类型的。

2. 在下面程序的底画线处填上适当的字句,使该程序执行结果为40。 #include class Test { public: ______;

Test (int i=0) {x=i+x;} int Getnum()

{return Test::x+7;} };

_______; void main()

{Test test;

cout<

答案:static int x;,int Test::x=30;

[解析]从成员函数访问方式类名::成员可知是静态成员所以static int x;从结果要对初始 化为30,且在类外进行初始化, int Test::x=30;。

3. 在下列程序的空格处填上适当的字句,使输出为:0,2,10。 #include #include class Magic {double x; public:

Magic(double d=0.00):x(fabs(d)) {}

Magic operator+(______) {

return Magic(sqrt(x*x+c.x*c.x)); }

_______operator<<(ostream & stream,Magic & c) { stream<

void main() {Magic ma;

cout<

答案:operator+(Magic&c),friend ostream&operator

[解析]对加法进行重载,operator+(Magic & c),是对插入符进行重载,要访问成员所以定义 为友元函数,friend ostream & operator。

4. 下面是一个输入半径,输出其面积和周长的C++程序,在下划线处填上正确的语句。 #include _________; _________; void main() {double rad; cout<<\cin>>rad;

double l=2.0*pi*rad; double s=pi*rad*rad;

cout<<\\n The long is:\cout<<\:\

答案:using namespace std,#define pi 3.14159

[解析]进行输入或输出要引入iostream, 所以using namespace std;从标点看没有分号,所以 使用宏定义,#define pi 3.14159。 5. 程序实现大写字母转换成小写字母。 #include void main() {char a; _______; cin>>a;

if(_______) a=a+i;

cout<

答案:int i=32;,a>=A && a<=Z

[解析]大写字母变小写字母相差32,需要对i声明并初始化。大写字母变小写字母。要判断字 符是大写字母。

五、程序分析题(本大题共4小题,每小题5分,共20分) 1. 给出下面程序输出结果。 #include class a {public:

virtual void print()

{cout<< \};

class b:public a {};

class c:public b {public:

void print(){cout<<\};

void show(a *p) {(*p).print(); }

void main() {a a; b b; c c;

show(&a); show(&b); show(&c); }

答案:a prog... a prog... c prog...

[解析]考查多态性的。a类对象调用本身的虚函数,b类因为没有覆写print,所以仍然调用基 类的虚函数。而c类重新定义print虚函数,所以调用c类的print。 2. 给出下面程序输出结果。 #include #include #include bool fun(long n); void main()

{long a=10,b=30,l=0; if(a%2==0) a++;

for(long m=a;m<=b;m+=2) if(fun(m)) {if(l++==0) cout <

cout <

bool fun(long n)

{int sqrtm=(int)sqrt(n); for(int i=2;i<=sqrtm;i++) if(n%i==0) return false; return true; }

答案:11 13 17 19 23 29

[解析]循环体用来判断n是否是质数的函数,在main函数判断10~30之间质数。 3. 给出下面程序输出结果。 #include class Test {int x,y; public:

Test(int i,int j=0) {x=i;y=j;}

int get(int i,int j) {return i+j;} };

void main()

{Test t1(2),t2(4,6);

int (Test::*p)(int,int=10); p=Test::get;

cout<<(t1.*p)(5)<

cout<<(p1->*p)(7,20)<

答案:15 27

[解析]指向类成员函数的指针的使用,*p指向Test类中有两个参数的函数的一个指针。 P=Test::get.这样p就和get发生了联系。(t1.*p)(5)等价于调用一个参数的get函数。

4. #include #include #include class student {char name[8]; int deg;

char level[7];

friend class process; // 说明友元类 public:

student(char na[],int d) { strcpy(name,na); deg=d; } };

class process { public:

void trans(student &s) {int i=s.deg/10; switch(i) {case 9:

strcpy(s.level, \优\case 8:

strcpy(s.level,\良\case 7:

strcpy(s.level,\中\case 6:

strcpy(s.level,\及格\default:

strcpy(s.level,\不及格\} }

void show(student &s)

{cout<

void main()

{ student st[]={student(\张三\李四\王五 \孙六\process p;

cout<<\结 果:\姓名\成绩\等级\for(int i=0;i<4;i++) { p.trans(st[i]); p.show(st[i]);} }

答案:结果:姓名成绩等级 张三78中 李四92优 王五62及格 孙六88良

C++程序设计模拟试卷(二)

一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中 只有一个是符合题目要求的,请将其代码填写在题后的括号内。错选、多选或未选均无 分。

1. 静态成员函数没有() A. 返回值 B. this指针 C. 指针参数 D. 返回类型 答案:B

解析:静态成员函数是普通的函数前加入static,它具有函数的所有的特征:返回类型、

形参,所以使用(P107)静态成员函数,指针可以作为形参,也具有返回值。静态成员是类具有的 属性,不是对象的特征,而this表示的是隐藏的对象的指针,因此静态成员函数没有this 指针 。静态成员函数当在类外定义时,要注意不能使用static关键字作为前缀。由于静态成员函数在 类中只有一个拷贝(副本),因此它访问对象的成员时要受到一些限制:静态成员函数可以直接 访问类中说明的静态成员,但不能直接访问类中说明的非静态成员;若要访问非静态成员时,必 须通过参数传递的方式得到相应的对象,再通过对象来访问。

2. 假定AB为一个类,则执行“AB a(2), b[3],*p[4];”语句时调用该类构造函数的次数 为() A. 3 B. 4 C. 5 D. 9 答案:B

解析:a(2)调用1次带参数的构造函数,b[3]调用3次无参数的构造函数,指针没有给它 分配空间,没有调用构造函数。所以共调用构造函数的次数为4。 3. 有关多态性说法不正确的是()

A. C++语言的多态性分为编译时的多态性和运行时的多态性 B. 编译时的多态性可通过函数重载实现

C. 运行时的多态性可通过模板和虚函数实现 D. 实现运行时多态性的机制称为动态多态性 答案:C

解析:多态性分为静态的和动态的。静态通过函数的重载来实现,动态是通过基类指针或 基类引用和虚函数来实现的。所以错误的是C项。

4. 假定一个类的构造函数为“A(int i=4, int j=0) {a=i;b=j;}”, 则执行“A x (1);”语 句后,x.a和x.b的值分别为() A. 1和0 B. 1和4 C. 4和0 D. 4和1 答案:A

解析:带默认的构造函数,对应实参没有值时就采用形参值。调用构造函数时,i=1,不采 用默认值,而只有一个参数,j采用默认值0即j=0,因此a=1,b=0,选择A项。 5. 类MyA的拷贝初始化构造函数是 () A. MyA() B. MyA(MyA*) C. MyA(MyA&) D. MyA(MyA) 答案:C

解析:复制即拷贝构造函数使用对象的引用作形参,防止临时产生一个对象,A无参构造函 数,B是指针作为形参,D项是对象,所以选择C项。 6. 在C++中,函数原型不能标识() A. 函数的返回类型 B. 函数参数的个数 C. 函数参数类型 D. 函数的功能 答案:D

解析:函数的声明,说明函数的参数、返回类型以及函数名,函数体即实现部分决定功能。所以 函数的原型不能决定函数的功能。 7. 友元关系不能() A. 提高程序的运行效率