文档库 最新最全的文档下载
当前位置:文档库 › 2008秋~2011年春VC++笔试试卷

2008秋~2011年春VC++笔试试卷

2008秋~2011年春VC++笔试试卷
2008秋~2011年春VC++笔试试卷

2008年秋~2010年春VC++笔试试卷

2008秋江苏计算机c++试题试卷

一、选择题(用答题卡答题,答案依次填在21-30答题号内)

21. 以下关于逻辑运算的描述中,正确的是_______。

A. 所有的逻辑运算都是双目运算,其优先级相同

B. 逻辑运算中存在双目运算和单目运算,其优先级相同

C. 所有的逻辑运算都是双目运算,其优先级各不相同

D. 逻辑运算中存在双目运算和单目运算,其优先级各不相同

22. 对于while和do…while循环语句,以下描述正确的是_______。

A. do…while语句中的循环体至少执行一次

B. 两个语句中的循环体可能都不执行

C. while语句中的循环体至少执行一次

D. 两个语句中的循环体至少执行一次

23. 以下说明语句中,不存在语法错误的是_______。

A. char sl[4]={"a","b","c"};

B. char s2[4]={'a','b'};

C. char s3[]={'I am a student'};

D. char s4[14]={"I am a student"};

24. 设变量a,b,c为整型变量,以下选项中存在语法错误的是。

A. c=a+++b;

B. c=a+b++;

C. c=b++=c++;

D. c=++a=b++;

25. 设有程序段:

x=-1;

if(a!=0){if(a>0)x=1;}

else x=0;

该程序段表示的数学函数关系是_______。

26. 以下关于两个同类型指针变量的叙述中,在一定条件下,运算结果没有实际意义的是_______。

A. 两个指针变量可以互相赋值

B. 两个指针变量进行比较运算

C. 两个指针变量进行减法运算

D. 两个指针变量进行加法运算

27. 下列有关构造函数的叙述中正确的是_______。

A. 类的构造函数不能重载

B. 任何一个类必定有构造函数

C. 可以定义没有构造函数的类

D. 任何一个类必定有一个缺省的构造函数

28. C++中运算符重载可以改变_______。

A. 运算符的优先级

B. 运算符的结合性

C. 运算符实现的功能

D. 运算符的操作数的个数

29. 以下关于基类指针和派生类指针的叙述中不正确的是_______。.

A. 基类指针可以指向它的公有派生类的对象

B. 基类指针可以指向它的多次派生后的派生类的对象

C. 派生类的指针不能指向基类的对象

D. 若基类指针指向派生类的对象,通过该基类指针可以访问派生类对象的所有成员

30. 以下关于友元函数的叙述中,正确的是_______。

A. 友元函数不能访问类的私有成员

B. 友元函数破坏了类的封装性和隐藏性

C. 友元函数的使用与类的成员函数相同

D. 友元函数的实现必须在类的说明中定义

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题(共5分)

1. 设有语句:

int a=5,b=6,c;c=!a&&b++;

执行以上语句后,变量b的值为___(1)____。

2. 在定义派生类时,如果没有指定基类的派生(继承)方式,则缺省(默认)的继承方式是___(2)____。

3. c++中编译预处理包括:文件包含、宏和___(3)____。

4. 要将一个函数定义为内联函数时,通常在定义函数时使用关键字___(4)____。

5. c++中表达式"I am a student"的值为该字符串的___(5)____。

●阅读程序题(共13分)

6. [程序](2分)

#include

void f(int a[])

{ int t=a[0];

a[0]=a[1];a[1]=t;

cout<

}

void main(void )

{ int b[2]={300,500};

f(b);cout<

}

程序输出的第一行是___(6)____,第二行是___(7)____。

7. [程序](2分)

#include

int fa(int a)

{ static int m=1;m=a*m;return m;}

void main(void )

{ for(int i=2;i<=4;i++)cout<

程序输出的第一行是___(8)____,第三行是___(9)____。

8. [程序](2分)

#include

int f1(int a[3][3])

{ int sum=0;

for(int i=0;i<3;i++)

for(int j=0;j<3;j++){

if(a[i][j]>0)continue;

sum+=a[i][j];

}

return sum;

}

int f2(int a[3][3])

{ int sum=0;

for(int i=0;i<3;i++)

for(int j=0;j<3;j++){

if(a[i][j]<0)break;

sum+=a[i][j];

}

return sum;

}

void main(void )

{ int b[3][3]={{1,2,3},{7,-12,-13},{-20,9,-5}};

int s1,s2;

s1=f1(b);s2=f2(b);

cout<

}

程序输出的第一行为___(10)____,第二行为___(11)____。

9. [程序](3分)

#include

int f(int x[],int n)

{ if(n==1)x[n]=3;

else x[n]=n+f(x,n-1);

cout<

return x[n];

}

void main(void )

{ int b[5]={3,4,5,6,0};

f(b,3);

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

cout<

}

程序输出的第一行是___(12)____,第二行是___(13)____,第三行是___(14)____。

10. [程序](2分)

#include

class A{

int x;

public:

A(int a){x=++a;}

~A(){cout<

int get(){return x;}

};

class B:publicA{

int y;

public:

B(int b):A(b){y=get()+b;}

B():A(5){y=6;}

~B(){cout<

};

void main(void )

{ B b(5);}

程序输出的第一行是___(15)____,第二行是___(16)____。

11. [程序](2分)

#include

class A{

int x;

public:

A(int x=0){this->x=x;}

virtual void f(){cout<

};

class B:publicA{

int y;

public:

B(int x,int y=1):A(x)

{this->y=y;}

void f(int a){cout<

};

void main(void )

{ A al(10),*pa;

B bl(20,30);

a1. f();

pa=&a1;pa->f();

pa=&b1;pa->f();

}

程序输出的第二行是___(17)____,输出的第三行是___(18)____。

●完善程序题(共12分)

12. 以下程序的功能是:将两个字符串分别输入到sl和s2中,并使s2中的字符按升序排列(用函数sort()实现排序)。然后,依次从sl中取一个字符插入到s2中,并使s2中的字符保持升序。函数insert(char *p,char c)的功能是将字符c插入到p所指向的字符串中,使p所指向的字符串保持升序。函数merge(char *pl,char *p2)依次从p2所指向的字符串中取出一个字符,并插入到p1所指向的字符串中。

[程序](4分)

#include

#include

char *sort(char s[])

{ int len=strlen(s);

for(int i=0;i

for(int j=i+1;j

if(___(19)____){

char c=s[i];

s[i]=s[j];s[j]=c;

}

return s;

}

void insert(char *p,char c)

{ char *p1=p;

int len=strlen(p);

while(*p1

char *p2=p+len;

while(p2>=p1){

___(20)____;

p2--;

}

___(21)____;

}

char *merge(char *p1,char *p2)

{ while(*p2){

___(22)____;

p2++;

}

return p1;

}

void main(void )

{ char sl[100],s2[200];

cout<<"输入第一行字符串:";cin. getline(s1,100);

cout<<"输入第二行字符串:";cin. getline(s2,100);

cout<

sort(s2);merge(s2,s1);

cout<

}

13. 以下程序中的功能是:通过重载运算符+,-和=,分别实现一维数组(向量)的加法(对应元素相加)、减法(对应元素相减)和向量对象之间的赋值,例如;设a,b,c是类Arr的对象,a的成员x[]={1,1,1,1,1,1},b的成员x[]={2,2,2,2,2,2},执行c=a+b后,c的成员x[]={3,3,3,3,3,3}

[程序](4分)

#include

class Art{

float x[20];

int size;

public:

Arr(float a[],int n)

{ for(int i=0;i

size=n;

}

Arr()

{ for(int i=0;i<20;i++)x[i]=0;

size=0;

}

Arr operator+(Arr);

Arr operator-(Arr);

Arr& operator=(Arr&);

int GetArr(float y[])

{ for(int i=0;i

return size;

}

void print ()

{ for(int i=0;i

cout<<'\n'<<"size="<

}

};

Arr Arr::operator+(Arr a)

{ Arr tem;

for(int i=0;i

tem. size=size;

return tem;

}

Arr Arr::operator-(Arra)

{ Arr tem;

for(int i=0;i

tem. size=size;

return tem;

}

Arr& Arr::operator=___(25)____

{ for(int i=0;i

x[i]=a. x[i];

size=a. size;

return ___(26)____;

}

void main(void )

{ float b1[6]={10,20,30,40,50,60};

float b2[6]={100,200,300,400,500,600},b3[6],b4[6];

Arr al(b1,6),a2(b2,6),a3,a4;

a3=al+a2;a4=a2-al;

a3. print ();a4. print ();

int n=a1. GetArr(b3);

for(int i=0;i

cout<<'\n'<

}

14. 下面程序的功能是:首先建立一条链表,顺序从链表中找到data为最大值的结点,从链表中删除该结点,并将其值返回,最终删除整个链表,同时得到按降序排序的数组x。其中,函数Insert(int a,node *head)的功能是:用参数a产生一个新结点,将其插入链首,并返回链首指针。DeleteMax(node ,*&head)的功能是:从head所指向的链表中找到data值为最大的结点,从链表中删除该结点并将其结点值返回。

算法提示:当链表为空时,返回-1。在查找的过程中,始终让pmax指向当前data 值为最大的结点,并让pmax1指向pmax的前一个结点。找到data值为最大的结点后,将其从链表中删除,并返回其data值。

[程序](4分)

#include

struct node {

int data;

node *next;

};

node *Insert(int x,node *head)

{ node *p=new node ;

p->data=x;___(27)____;head=p;

return head;

}

int DeleteMax(node :I:&head)

{ node *pl,*p2,*pmax,*pmax1;

int max;

p1=p2=head:

if(!head)return -1;

max=p1->data;pmax=p1;

while(p1){

if(maxdata){

max=p1->data;

pmax=pl;pmax1=p2;

}

p2=p1;

___(28)____;

}

if(pmax==head)head=head->next;

else___(29)____;

delete pmax;

return max;

}

void main(void )

{ int a;

int x[200],count=0;

node *head=0;

cin>>a;

while(a!=-1){

head=Insert(a,head);

cin>>a;

}

while(head){

x[count]= ___(30)____;

count++;

}

for(int i=0;i

cout<

}

2009年春江苏计算机c++试题试卷

一、选择题(用答题卡答题,答案依次填在21-30答题号内)

21. 下列关于"for(e1;e2;e3)s1;"的描述中不正确的是______。

A. 存在"for(;;)s1;"的情况

B. 表达式e1和e3可为空,但e2不能为空

C. 表达式e2的值可增可减

D. 循环体s1可以为空,但分号(;)必须有

22. 下列函数定义中存在语法错误的是______。

A. void f5();f6(){f5;cout<<200;}void f5(){cout<<100;}

B. void f3(){cout<<100;}void f4(){tout<<200;}

C. void f7(int a){if(a)f7(--a);cout<””;}

D. void f1(){cout<<100;void f2(){tout<<200;}}

23. 设有说明语句;

int a=7,b=12,e;

以下表达式选项中,e值为2的是_______。

A. e=b%=(a-a%5)

B. e=b%=(a%=5)

C. e=b%=b+1-a%5

D. e=(b%=a)-(a%=5)

24. 以下叙述中不正确的是_____。

A. 一个函数中可以有多个return 语句

B. 一个函数中可以没有return 语句

C. 一个return 语句可返回多个值

D. 一个return 语句可不返回值

25. 以下双目运算符中要求两个操作数均为整型的运算符是______。

A. ||

B. &&

C. /

D. %

26. 以下对break语句的描述中,不正确的是______。

A. break语句可用在循环语句中,其作用是结束本层循环的执行

B. break语句可用在switch语句中,其作用是结束该switch语句的执行

C. break语句可用在if语句中,其作用是结束该if语句的执行

D. break语句在同一循环体中可以多处使用

27. 以下对类的析构函数的叙述中,正确的是______。

A. 析构函数完成类的初始化

B. 析构函数完成对象的初始化

C. 析构函数完成撤销对象的相关处理

D. 析构函数和成员函数一样可以显式地调用

28. 以下有关多态性的叙述中不正确的是________。

A. C++语言的多态性分为编译时的多态性和运行时的多态性

B. 编译时的多态性通过重载函数来实现

C. 运行时的多态性通过虚函数来实现

D. 函数重载和虚函数均可实现编译时的多态性和运行时的多态性

29. 设已定义了一个类名为MyClass 的类:

MyClass sl,*s2,**s3,*s4E2];

当该语句执行后,调用该类的构造函数的次数是_______。

A. 1

B. 2

C. 3

D. 5

30. 在公有派生的情况下,派生类中定义的成员函数能访问其基类的_________。

A. 公有成员和保护成员

B. 公有成员和私有成员

C. 保护成员和私有成员

D. 公有成员、保护成员和私有成员

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题(共5分)

1. 以下循环语句的循环体的执行次数为__(1)__。

for(int s=0,j=1;j<=10;s+=j);j++;

2. void 类型的指针是其指向变量的数据类型是不固定的,对该类型指针进行操作时,通常应进行__(2)__。

3. C++变量的存储类型有自动类型、静态类型、__(3)__和__(4)__。

4. c++函数的参数传递方式有三种:__(5)__、指针传递和引用传递。

●阅读程序题(共13分)

5. [程序](2分)

#include

void fa(int &a,int &b)

{ int t=a; a=b; b=t; }

void fb(int a,int b)

{ int t=a; a=b; b=t;}

void main(void )

{ int c[2]={100,200},d[2]={300,400};

fa(c[0],c[1]);cout<< c[0]<<’\t’<

rb(d[0],d[1]);cout<

}

程序输出的第一行是__(6)__,第二行是__(7)__。

6. [程序](2分)

#include

void main(void )

{ int n=0,m=0;

for(int i=0;i<3;i++)

for(int j=0;j<3;j++)

if(j>=i)n++; m++;

cout<

}.

程序输出的第一行是__(8)__,第二行是__(9)__。

7. [程序](2分)

#include

int a=10;

void main(void )

{ int a=20,b=30;

{ int a=0,b=0;

for(int i=1;i<4;i++){

a=a+b;b=::a+b;

}

cout<

}

cout<

}

程序输出的第一行是__(10)__,第二行是__(11)__。

8. [程序](3分)

#include

void f2(int x[],int n);

void fl(int x[],int n)

{ cout<

x[n]++;

if(n<3){n=n+2;f2(x,n);}

}

void f2(int x[],int n)

{ cout<

x[n]++;

if(n<3){n=n+3;fl(x,n);}

}

void main(void )

{ int y[7]={3,4,5,6,7,8,9};

f1(y,0);

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

cout<<’\n’;

}

程序输出的第一行是__(12)__,第二行是__(13)__,第三行是__(14)__。

9. [程序](2分)

#include

class A{

int n;

public:

static int s;

A(int a){n=a;}

void add(){s+=n;}

void print (){cout<

int get(){return n;}

};

int A::s=0;

class B:public A{

int y;

public:

B(int b,int c):A(c){y=b;}

void p(){cout<

};

void main(void )

{ A a1(10),a2(20);

B b1(5,15),b2(10,15);

a1. add(); a2. add(); b1. add(); b2. add();

a1. print (); a2. print ();

b1. p(); b2. p();

}

程序输出的第一行是__(15)__,第三行是__(16)__。

10. [程序](2分)

#include

class A{

int x;

public:

A(int a){x=a;}

virtual void print (){cout<<"x="<

void fun(){print ();}

};

class B:public A{

int y;

public:

B(int a,int b):A(a){y=b;}

void print (){cout<<"y="<

void fun(){print ();}

};

class C:public B{

int z;

public:

C(int a,int b,int c):B(a,b){z=c;}

void print (){cout<<"z="<

void fun(){print ();}

};

void main(void )

{ A a1(5),*p1;

B b1(10,15);

C c1(20,30,40);

a1. fun(); b1. fun(); c1. fun();

p1=&b1; p1->fun(); p1=&c1; p1->fun();

}

程序输出的第四行是__(17)__,第五行是__(18)__。

●完善程序题(共12分)

11. 以下程序的功能是:采用插入排序的方法将数组s1中的元素升序排序,并删除重复的元素(值相同的元素只保存一个)。函数insert(int p[],int c,int x)将整数x插入到已排序的数组P中(并仍保持升序),参数c为数组p的元素个数。函数sort(int s[],int n)将数组s中的数据按升序排序。先将s[0]放到临时数组tem[0]中,然后,依次从s中取一个元素,若该元素不在数组tem中,则调用函数insert()将该元素插入到数组tem中。最后将数组tem拷贝到数组s中。

[程序](4分)

#include

void insert(int p[],int c,int x)

{ for(int i=0;i

if(p[i]>x)break;

if(i==c) __(19)__;

else{for(int j=c;j>i;j--)p[j]=p[j-1]; __(20)__;}

}

int sort(int s[],int n)

{ int tem[200];

int len,j,k;

tem[0]=s[0];

len=1;//len记录数组tern中的元素个数

for(j=1;j

for(k=0;k

if(s[j]==tem[k]) __(21)__;

if(k>=len){

insert(__(22)__);len=len+1;

}

}

for(j=0;j

return len;//返回数组的大小

}

void main(void )

{ int s1[200]={34,22,11,55,66,30,22,100,66};

int n;n=sort(s1,9);

for(int i=0;i

cout<<'\n';

}

12. 以下程序通过重载运算符+、*实现集合(用数组表示)的并集(∪),交集(∩)运算。集合中的元素不能相同。两个集合的并集包含了两个集合的所有元素。两个集合的交集仅包含集合中共同存在的元素。设sl={1,2,3,4,5,6},s2={3,5,7,9,11}。s1∪s2={1,4,5,6,7,9,11},s1∩s2={3,5}。

[程序](4分)

#include

class Set{

float x[20];

int size;

public:

int In(float e,int n)//元素e已在集合x中,则返回1,否则返回0

{ int flag=0;

for(int i=0;i

if(__(23)__){flag=1;break;}

return flag;

}

Set(float a[],int n)

{ x[0]=a[0];size=1;

for(int i=1;i

if(In(a[i],size)==0){

__(24)__;

size++;

}

}

Set(){size=0;}

Set operator+(Set);

Set operator*(Set);

Set &operator=(Set&);

int GetSet(float y[])

{ for(int i=0;i

y[i]=x[i];

return size;

}

void print ()

{ for(int i=0;i

cout<<'\n'<<"size=”<

}

};

Set Set::operator+(Set a)

{ Set tem;

for(int i=0;i

tem. size=size;

for(i=0;i

if(tem.In(a.x[i],tem.size)==0)tem.x[tem.size++]=a.x[i];

return tem;

}

Set Set::operator*(Set a)

{ Set tem;

tem. size=0;

for(int i=0;i

if(a.In(x[i],a.size)==1)

tem. x[tem. size++]=x[i];

return tem;

}

Set&Set::operator=(Set&a)

{ for(int i=0;i

__(26)__;

return *this;

}

void main(void )

{ float b1[6]={1,2,3,4,5,6};

float b2[6]={3,5,7,9,11},b3[6];

Set a1(b1,6),a2(b2,5),a3,a4,a5;

a3=a1+a2; a3. print ();

a5=a1*a2; a5. print ();

int n=a1. GetSet(b3);

for(int i=0;i

cout<<'\n'<<”size=”<

}

13. 以下程序的功能是:先产生一条带头结点(链表的第一个结点不存储数据,而是存储链表的表长,即结点个数)的无序链表,每一个结点包含一个整数。然后将该链表分成两条带头结点的链表:一条链表上的数据均为偶数,另一条链表上的数据均为奇数。函数Cleate()创建了一条带有头结点的单链表。函数Print ()输出链表上各结点的值。函数Split()把链表分割成两条链表,值为奇数的结点保留在原链表上,值为偶数的结点移到另一个链表中,并将指向偶数链表的头指针返回。[程序](4分)

#include

struct Node {

int data;

struct Node *next;

};

Node *Create(void )//创建一条带有头结点的单向链表

{ Node *p1,*head;

int a;//创建头结点,头结点的数据域储存链表的结点个数head=new Node ;

head->data=0;head->next=0;

cout<<"创建一条无序链表,请输人数据,以-l结束,\n";

cin>>a;

while(a!=-1){

p1=new Node ;

p1->data=a;p1->next=head->next;

__(27)__;

head->data++;

cin>>a;

}

__(28)__;

}

void Print (Node *h)

{ h=h->next;

while(h){cout<data<<"\t"; h=h->next;}

cout<<'\n';

}

Node *Split(Node *&link)//link是一个带头结点的单链表{ Node *p1=link,*p2=link->next,*head;

head=new Node ;

head->data=0;head->next=0;

while(p2){

if(p2->data%2==0){

p1->next=p2->next;link->data--;

p2->next=head->next;

__(29)__;

head->data++;p2=p1->next;

}

else{p1=p2; __(30)__;}

}

return (head);

}

void main(void )

{ Node *h1,*h2;

h1=Create(); c out<<"输入的链表为:"<<'\n';

Print (h1);

h2=Split(h1); cout<<"分割后的奇数链表为:"<<'\n';

Print (h1); cout<<"分割后的偶数链表为:"<<'\n';

Print (h2);

}

一、选择题

21. B 22. D 23. A 24. C 25. D 26. C 27. C 28. D 29. A 30. A (1)无数次(2) 强制类型转换(3)外部类型(4)寄存器类型(5)值传递(6)200 100 (7)300 400

(8)6 (9)1

(10)30 30 (11)20 30

(12)3 (13)5 (14)8

(15) 10 60 (16) 15 60 5

(17)y=15 (18)z=40

(19)p[c]=x或p[i]=x (20)p[j]=x或p[i]=x (21)break (22)tem,len,s[j] (23)x[i]==e (24)x[size]=a[i] (25)tem. x[i]=x[i] (26)size=a. size (27)head->next=p1 (28)return head (29)head->next=p2 (30)p2=p2->next

2009年秋江苏计算机c++试题试卷

一、选择题(用答题卡答题,答案依次填在21--30答题号内)

21. 以下关于C++函数的描述中,正确的是_______。

A. 内联函数就是定义在另一个函数体内部的函数

B. 函数体的最后一条语句必须是return 语句

C. c++要求在调用一个函数之前,该函数已定义或已有该函数的原型说明

D. 编译器会根据函数的返回值类型区分函数的不同重载形式

22. 以下关于c++运算符重载的描述中,正确的是_______。

A. 任何运算符均可重载

B. 运算符重载可以改变运算符的优先级

C. 运算符重载可创造新的运算符

D. 运算符重载可以改变运算符的功能

23. 以下说明语句中,不存在语法错误的是_______。

A. int 10long;

B. int _2int ;

C. float X3-Dmax;

D. char x. txt[20];

24. 以下关于C++函数重载的描述中,正确的是_______。

A. 重载函数必须具有不同类型的返回值

B. 重载函数的形参个数必须不同

C. 重载函数的形参个数不同或形参类型不同

D. 重载函数名可以不同

25. 以下if语句的表达不正确的是_______。

A. if(a

B. if(a==b)a=0,b++;

C. if(a

D. if(a!=b)a=b;

26. 以下关于指针变量的叙述中,不正确的是_______。

A. 指针变量可赋值为0

B. 指针变量中存放的是地址值

C. 指针可以进行加、减等算术运算

D. 指针变量不占用存储空间

27. 以下说明语句中,没有语法错误的是_______。

A. int a,*pa=&a,*pb=*pa;

B. int aa,&b=aa,*pc=&b;

C. int c[10],&pc=c;

D. int dd,&u=&dd,*v=u;

28. 以下关于类的友元函数的描述中,不正确的是_______。

A. 一个类的友元函数要用"friend"说明。

B. 友元函数在类体中说明时,不受类中访问权限的限制

C. 友元函数的作用域与类中成员函数的作用域相同

D. 友元函数体的定义通常放在类定义之外

29. 以下关于派生类的叙述中,不正确的是_______。

A. 公有派生时基类中的public成员在派生类中仍是public成员

B. 私有派生时基类中的protected成员在派生类中仍是protected成员

C. 私有派生时基类中的public成员在派生类中改变成private成员

D. 保护派生时基类中的public成员在派生类中改变成protected成员

30. 以下关于纯虚函数的叙述中,不正确的是_______。

A. 纯虚函数定义时要定义函数体

B. 纯虚函数的说明以"=0;"结束

C. 派生类中最终要定义纯虚函数的函数体

D. 含纯虚函数的类不能定义其对象

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题,共5分

1. 在定义一个类时,如果仅定义了数据成员,而没有定义成员函数,则由系统自动生成的缺省成员函数包括: __(1)__、__(2)__、重载赋值运算符和拷贝构造函数。

2. 如果使用数组名作为函数的实参,则形参与实参结合时,传递的是__(3)__。

3. C++中,编译时的多态性是通过程序设计中使用__(4)__来实现的。

4. 程序中使用new 运算符动态分配的内存空间,必须用__(5)__来释放。

●阅读程序题,共13分

5. [程序](3分)

#include

int x,y;

int f2(int a,int b)

{ x=a+b;y=a-b;

cout<<"x="<

return x+y;

}

void f1(int m,int n)

{ int x,y;

x=m+n;y=m-n;

m=f2(x,y);

n=n+m:

cout<<"m="<

}

void main(void )

{ int a=3,b=5;

f1(a,b);

cout<<"a="<

cout<<"x="<

}

运行程序后输出的第二行是__(6)__,第三行是__(7)__,第四行是__(8)__。

6. [程序](3分)

#include

int f(int &n,int &m)

{ staticint k=10;

n+=m;k+=n;m+=k;

cout<<"k="<

return (n+m);

}

void main(void )

{ int a=3,b=4,k;

k=f(a,b)+f(a,b);

cout<<"k="<

}’

运行程序后输出的第一行是__(9)__,第二行是__(10)__,第三行是__(11)__。

7. [程序](2分)

#include

void f(int x)

{ int t;

if(x<0){cout<<"-";x=-x;}

t=x%10;x=x/l0;

if(x!=0)f(x);

cout<

}

void main(void )

{ f(-234);

cout<<'\n';

f(123);

cout<<'\n';

}

运行程序后输出的第一行是__(12)__,第二行是__(13)__。

8. [程序](3分)

#include

void fun(int x[],int n)

{ int i,max,min,k,p,t;

for(k=p=0,max=min=x[0],i=1;i

if(max

if(min>x[i])min=x[i],p=i;

}

t=x[0];x[0]=x[p];x[p]=t;

if(k==0)k=p;

t=x[n-1];x[n-1]=x[k];x[k]=t;

}

void print (int *x,int n)

{ for(int k=0;k

void main(void )

{ int a[5]={12,16,19,15,11};

fun(a,5);

print (a,5);

}

运行程序后输出的第一行是__(14)__,第三行是__(15)__,第五行是(16)__。

9. [程序](2分)

#include

class B{

public:

void f1(){cout<<"B类中的函数f1\n";}

virtual void f2(){cout<<"B类中的函数f2\n";}

};

class D:publicB{

void f1(){cout<<"D类中的函数f1\n";}

void f2(){cout<<"D类中的函数f2\n";}

};

void main(void )

{ B a,*p;

D b1;

p=&a;p->f2();

p=&b1;

p->f1();p->f2();

}

运行程序后输出的第二行是__(17)__,第三行是__(18)__。

●完善程序题,共12分

10. 以下程序的功能是:首先初始化一个等比数列,该数列的首项为3,公比为2,直到某一项的数值大于720为止;然后基于此等比数列计算满足条件的n值和m值,使得从第n项到第m项的和为720(和值包含第n项及第m项)。试完善程序。

等比数列的定义:数列的第0项为一个初值,从数列的第1项起,每一项与它的前一项的比等于一个常数,这种数列称为等比数列。该常数称为等比数列的公比。等比数列表示为:

A0=a,A1=A0×q,…,A n=A n-1×q;其中a,q均为常数,且q≠0。

[程序](4分)

#include

#define N 20//只要检查数列的前20项,其后各项值均大于720

int sum(int num[],int &n,int &m)

{ int s,i,idx,flag=0;

for(i=0;i

s=0;n=i;

idx=i;

while(s<720&&idx

__(19)__;

if(s==720){//找到符合条件的项,记录位置

__(20)__;

flag=1;

break;

}

}

return flag;

}

void main(void )

{ int num[N],q,a;

int i,m,n;

a=3;q=2;

num[0]=a;

for(i=0;num[i]<720;i++){//初始化等比数列

__(21)__;

num[i+1]=a;

}

if(__(22)__){

cout<<"第"<

for(;n<=m;n++)cout<

cout<<"\n";

}

else cout<<"没有满足条件的项!\n";

}

11. 以下程序的功能是:按每一个学生的成绩总分(数学、物理和英语成绩之和)进行排序(降序排序),若总分相同时,再按数学成绩进行降序排序;若总分和数学成绩相同,再按英语成绩进行降序排序。程序中先输入学生的人数,再依次输入每一个学生的成绩,然后按降序排列后输出结果。试完善程序。

[程序](4分)

#include

#include

#define N 50

struct stu{

char name[10];//学生姓名

int math;//存放数学成绩

int phy,eng;//物理和英语成绩

int sum;

};

void input(stu s[],int n)

相关文档