2002年C++程序设计试题

更新时间:2024-04-19 08:19:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

一、选择题(共40分,每个选择题2分)

1.下面四个选项中,均是不合法的用户标识符的选项是 。

A)_LargeRoom, P_0, do B)float, ok, _new, _asm C)-0123, temp, INT D)足_球,VC-L, goto, int 2.假定有以下变量定义: int k=8,x=21;

则能使x的值为5的表达式是 。

A) x%=(k%=5) B)x%=(k-k%5) C)(x%=k)-(k%=5) D)x%=k-k%5 3.以下程序的输出结果是 。 #include void main() { int a=12,b=12;

cout<

A)10 10 B)12 12 C)11 10 D)11 13

4.已知函数的原型说明为int f( int &, char *); 另有变量说明如下:char str[100]; int k; 如要调用以上函数,那么正确的函数调用形式为 。 A) f(str,&k); B) f(str[100], k); C) f(k,str); D) f(str,&k);

5.设整型变量a表示天不下雨,整型变量b表示无任何会议通知,语句c表示我去图书官;则“如果天不下雨并且无任何会议通知我去图书官”正确表示的C++语句为 。 A)if (a|b) {c;} B) if (a &&b) {c;} C) if (a||b) {c;} D) if (a

6.为了避免嵌套的块语句的二义性,C++语言规定“}”与 配对。 A) 编辑时在同一列上的“{ ” B) 其之前最近的还没有配对过的“}” C) 其之后最近的“{”

D) 其之前最近的还没有配对过的“{” 7.设有:int a=1, b=2, c=3, d=4,m=2, n=3;

执行(m=ad) 后n 的值为 。 A) 1 B) 2 C) 3 D) 4

8.在循环语句的循环体中使用 break 和 continue语句的作用分别是: 。 A)二语句都结束循环 B)结束本次循环和结束循环 C)二语句都结束本次循环 D)结束循环和结束本次循环

9.对于 for (int Count=1; Count<5; ){;} 语句 ,其循环体的执行情况是: 。 A) 死循环 B) 至少执行一次 C) 至少执行二次 D) 不执行 10.下列叙述中,正确的是 。

A)类的构造函数不可以重载 B)类的析构函数不可以重载

1

C) 一个类不一定有构造函数 D) 一个类不一定有析构函数 11.对于C++的函数,不正确的叙述是: 。

A) 函数的定义不能嵌套,但函数的调用可以嵌套

B) 函数体内不可以再定义一个函数,但函数体内可以调用另一个函数。 C) 函数体内不可以再定义一个函数,但函数体内可以函数自身。 D) 函数的定义和调用均可以嵌套 12.下面的说法不正确的是 。

A) 函数在重载时其函数名应相同 B) C++中所有运算符都可以重载

C) 基类中定义了虚函数ab(int,int),若在派生类中重新定义为ab(int),则在派生类中,ab为函数重载

D) 对于基类中定义的运算符重载函数,在派生类中不一定可继承。 13.若有说明 char * (*f) (int ); 则以下 是正确的。

A) f是一个返回值为字符型指针的函数 B) f是指向一个函数指针,该函数返回值为字符

C) f是指向一个函数指针,该函数返回值为字符型指针 D) 语法错

14.以下正确的说明语句是 。 A) int *b[ ]={1,3,5,7,9}

B) int a[5][5], *num[5]={&a[0], &a[1], &a[2], &a[3], &a[4]};

C) int a[5][5]={1,3,5,7,9}; int *num[5]= {a[0], a[1], a[2], a[3], a[4]}; D)int a[3][4], (*num)[4]; num[1]=&a[1][3]; 15.下面程序的运行结果是 。 #include struct stu{

int i,j;

float Eng,Math,CPP; };

void main(void)

{ char a[]={'a','b','c','d'};

cout<< \A. i=4 B. i=20 C. i=24 D. i=35 16.下面程序的运行结果是 。 #include static int c; void main(void) {

#if c*3

2

int i=10.88;

cout<<\ #else

int j=10000.99;

cout<<\ #endif }

A. j=10000 B. j=10.88 C. j=10000.99 D. j=10 17.下列叙述,正确的是 。

A) 派生类对象不可以赋给基类对象

B) 派生类对象的地址不可以赋给基类的指针变量 C) 基类对象不可以赋给派生类对象

D)通过指向基类的指针变量不可访问基类对象中的成员 18. 下面的说法正确的是 。 A)能由抽象类产生该抽象类的对象

B)在定义纯虚函数时,能定义函数的实现部分

C)若一个类没有定义析构函数,则系统不会自动为其产生一个缺省的析构函数 D)不可以把构造函数定义为虚函数

19.下面程序的输出是 。注:sin(3.1415/2)=1; sin(10)=-0.544021; #include #include int sin(int x) { return x;} void main( void ) { int x=10;

float y=3.1415/2; cout<

A)10 1 B)-0.544021 1 C) -0.544021 1.57075 D)10 1.57075

20.执行以下程序时,调用构造函数(以下简称为构造)和完成拷贝的构造函数(以下简称为拷贝)的次数分别为是 。

A)1次构造,1次拷贝 B) 1次构造,2次拷贝 C) 2次构造,1次拷贝 D)2次构造,2次拷贝 #include class Test{

int x,y;

3

public:

Test(int a,int b)

{ x=a;y=b; cout<<\调用了构造函数!\\n\Test(Test &t)

{ x=t.x; y=t.y; cout<<\调用了完成拷贝的构造函数!\\n\void Show()

{ cout << \ } };

void main(void) {

Test t1(1,1), t2(2,2); t2=t1; Test t3(t1); }

二、填空(35分)

1.(3分)若x=0,y=1,z=2,则执行语句: z= (++x) &&(y++);

执行完以上语句后,三个变量的值分别为: x= y= z= 。 2.(2分)以下程序的输出结果是 , #include float p(float &x,int &i) {x=x+1.5; i=i-x;return x; } void main(){ int i=10; float x=2.6,y; y=p(x,i)-1;

cout<<\

3.(2分)以下程序的输出结果是 。 #include void main(void) {

int x=12; do{

cout<<(x -=2)<<'\\t'; }while(!(--x)); }

4.(4分)运行以下程序的输出结果是 {注:(cr)—表示回车键} 。 #include void main(void)

4

{ char *s=\ char c;

while (c=*s++) switch (c-'2') {

case 0:

case 1: cout<<(char) (c+4);

case 2: cout<<(char) (c+4)<<’\\n’; break; case 3: cout<<(char) (c+3);

default: cout<<(char) (c+2) <<’\\n’; break; }

cout<

5.(3分)运行以下程序的输出结果是 。

#include

void swap(int &p1,int &p2) { int p;

p=p1;p1=p2;p2=p; } void main(void ) {

int x=5, y=10;

cout<<\ swap(x,y);

cout<<\6.(3分)以下程序的运行结果是 。 #include

void sub(int x, int y, int &z) { z=y-x;}

void main(void ) {

int a, b, c; sub(10,5,a); sub(7,a,b); sub(a,b,c);

cout<< a<<','<

7.(4分)下面程序的输出是 。

5

#include class A{ public:int x;

void Show(){cout <<\类就是A类\\n\};

class B{ public:int y;

void Show(){cout<<\类就是B类\\n\class C: public A,public B {public:int y;}; void main(void)

{C c1; c1.B::Show();c1.A::Show(); } 8.(4分)下面程序的输出是 #include class A{ protected: int x;

public: A(){x =1000;}

virtual void p(){cout <<\ virtual void p2(){cout<<\

};

class C:public A{

int z;

public: C(){z=3000;}

void p(){cout <<\

virtual void p2(){cout<<\

};

void main(void ){ C c;

A a,*pa=&a; pa->p();

pa=&c;pa->p();}

9.(3分)以下程序的运行结果是 #include void p1(char s[ ],int i) { if(s[i]!=0) { p1(s,i+1); cout<

6

void p2(char s[ ],int i) { cout<

if(s[i]!=0)p2(s,i+1); }

void main(void)

{ char str[]=\ cout << str << \ p1(str,0);cout <<'\\n'; p2(str,0);cout <<'\\n'; }

10.(3分)以下程序的运行结果是 #include class R{

private: int Left; public:

R(int L) {Left =L; cout<<\ R() {Left =0; cout<<\

void Print(void){cout<

~R(){if (Left!=0)cout<<\void main(void ){

R r1(10),r2; r1.Print; r2.Print();}

11.(4分)在当前目录中有文本文件file1.txt,文件内容为某班前10名的C++成绩,第一个10表示文件中后面有10个数,如下: 10 96 95 94 93 92 88 87 86 86 85

执行下面的程序后,文件file2中的内容是 文件file2中的内容表示 。

#include void main(void)

{ float x,number,sum=0; ifstream f1(\ofstream f2(\f1>>number;

while(f1>>x) sum+=x;

if(number!=0) f2<

7

三、完善程序(答题请注明序号)

1.(6分)用for语句实现如下程序段相同的功能:

A. (2分)

int count=0; loop:{;;;};count++;

if (count<100) goto loop

B. (2分)

int count=-100;

while (count<0){ count++;};

C. (2分)

count=-10; do

{ count++;

}while(count<10);

2. (4分)下面的函数的功能是从数组a中找出最大值和最小值,将找出的最大值用return语句返回,而将求出的最小值通过参数min带回。完善函数体。 float FindMaxMin( float a[ ], int n, float *min) {

float max; //定义存放最大值的变量 max=*min=a[0]; //对最大值最小值初始化

for(int i=1; i

}

return max; //利用函数值返回最大值 }

main() { int n;

float a[200];

float max, *min=&a[0];

cout<<\请输入的 n 数值,n小于200\cin>>n;

// 输入n 个数,输出最大值及最小值

8

// 插入相应的程序 2分

}

3(4分)若一链表结点结构如下: struct Node{ int data;

Node *next;};

完善如下DeleteNode()函数;函数的功能为:若从链表的首指针 h所指向的链表中找到一个结点的数据为x时,则从该链表中删除该结点。指针 h的值为0(NULL)时,表示链表为空。允许x不在链表中。

Node * DeleteNode(Node *h, int x) { Node *p,*q;

if(h == 0) return h; if(h->data==x)

{ if(h->data==x) { } //插入相应的程序 3分 } else

{ }

//插入相应的程序 3分 }

return h; }

四、(10分)根据题目要求写出程序 1.(4分)用两种不同的方法求出二个整数的最大公约数。且求二个整数的最大公约数用函数来实现,该函数放在一个头文件中(如 xxx.h)。二个整数从键盘输入。 (1)写出二个求整数的最大公约数函数;放在一个头文件中(如 xxx.h)//2分 (2)写出主函数;//2分

2.(6分)描述一个复数类Complex,私有数据为实部Real和虚部Imag 要求Complex类能提供如下操作(方法):

(1) 有构造函数,缺省时实部Real和虚部Imag置为0;//1分 (2) 能修改并读取Real的值; //1分 (3) 能修改并读取Imag的值 //1分

(4) 重载运算符 +=,完成两个复数的加法;//1分

9

(5) 重载运算符 -=,完成两个复数的减法;//1分 (6) 重载运算符 *=,完成两个复数的乘法;//1分

10

本文来源:https://www.bwwdw.com/article/6xfp.html

Top