您的当前位置:首页正文

江苏科技大学2011C++期末试卷(附答案)

2023-07-01 来源:爱go旅游网
使用前注意保密

江苏科技大学非计算机专业学生 Visual C++ 程序设计语言期末考试

试卷代号:VC02

说明:

1、 本试卷为笔试题,含选择、填空、及编程三部分。 2、 本试卷满分为100分,考试时间为120分钟。 3、 所有答案必须写在答题纸上,否则不计成绩。

3、 填空题,请注意空格号(不是题号)与答题纸上的编号对应。 4、 答题纸上必须写明学号(含班级号)、姓名。

计算机基础教研室

一、选择题(10×2=20分)

1、设CH为字符型变量,则语句CH=CH+’e’-‘E’;的作用可能是: (1) 。

A.将大写字母转换成对应的小写字母 B.将字母CH转换成e

C.将小写字母转换成对应的大写字母 D.将字母CH转换成E 2、设有说明语句“int a=4,b=5,c=6,d=7,m=1,n=1;”,则执行语句

“c=(m=a>b)&&(n=c>d);”后,m和n的值分别为 (2) 。 A. 1、1 B. 1、0 C. 0、1 D. 0、0 3、下列数组的定义和使用中,正确的是 (3) 。

A.char a[20];a[20]=”Hello”; B.char a[20];a=”Hello”; C.int n=20;char a[n]; D.char a[]=”Hello”;

4、设类A为类B的基类,类B为类C的基类,并有如下定义:

Aa1,*pa; B b1,*pb; C c1,*pc;

则以赋值存在语法错误的是 (4) 。 A.pa=&b1 B.pb=&c1; C.A a2=&c1; D.pc=&b1; 5、设有变量说明“int a=1,b=2;float x=1.5,y=1.2;”,下列语句正确的是 (5) 。 A.y=x%a; B.int(y)=a; C.x+y=a+b; D.a=x+y; 6、对于下面的一组函数: void fun (int a, float x); // 函数1 void fun (int a, int x); // 函数2 void fun (float a, float x ); // 函数3 void fun (float a, int x ); // 函数4 void fun (int a[], int n); // 函数5 void fun (int *p, int n); // 函数6 以下说法不正确的是: (6) 。

A.函数1和函数2可以构成重载函数; B.函数1和函数4可以构成重载函数;

C.函数3和函数4可以构成重载函数; D.函数5和函数6可以构成重载函数;

7、对于下列函数说明及变量定义: int fun1 (int a, int x); void fun2 (int a, int x); void fun3(int a[], int n);

void fun4(int *p, int n); int a=5, b=10, c[5]={0}; float x=1.5;

下列语句序列各自独立编译时产生错误信息的是 (7) 。

A. fun2(fun1(a,b),a); B. fun1(x,a); C. fun3(c[4],5); D.fun4(c,5); 8、设有指针变量定义:int *p1, *p2; float x; float *p3=&x, *p4=&x; 下列语句序列各自独立编译时产生错误或警告信息的是 (8) 。

A. *p1=*p2=2; B. p3=p4=NULL; C. p3=p4+1; D.int a=p3>p4; 9、对于任意一个类,下列说法正确的是 (9) 。 A. 不一定有析构函数 B. 可以有多个析构函数 C. 析构函数没有参数 D. 析构函数允许重载 10、若有定义“int a[5],*p=a;”,

则对a数组元素的引用正确的是 (10) 。

A. *&a[5] B. a+2 C. *(p+5) D. *(a+2)

二、填空题(30×2=60分)

●基本概念题

1、数学表达式(b-4ac)

2

1/2

在C++的程序中就写成 (1) 。

2、执行完下列C++语句序列后,a的值为 (2) 。 int x=1,y=0,a=3;

a=(--x==y++)?y?x:y:a+=--y;

3、设有宏定义:#define F(x,y,z) x/y*z

执行语句:int b=F(3+4,2+2,4+4);后变量b的值为 (3) 。 4、设已定义了一个类A,执行语句A s1,*s2,s3[2],*s4[2];时,调用类A

的构造函数的次数是 (4) 。

5、运算符重载函数的关键字是 (5) 。

6、C++语言规定,函数的缺省返回值的类型为 (6) 。 7、类的三大特性是: (7) 、 (8) 和 (9) 。 ●阅读程序题

8、[程序]

#include void main(void)

{ int a=0,b=0,i=0,j=0; while(i<5){ a++; while(j<5){ if((j+1)%2) {

b++; break; }

a++; j++; } i++; } cout << \"a=\" << a << endl; cout << \"b=\" << b << endl; }

程序输出的第一行是 (10) ,第二行是 (11) 。 9、[程序]

#include int a=10;

void fun(void) { int a=15; ::a-=--a;

cout<<::a<<'\'<void main(void) { int a=15;

for(int i=-10;ifun();

}

执行上述程序时,第1行输出为 (12) ,

第2行输出为 (13) , 第3行输出为 (14) 。 10、[程序]

#include int fun(int a, int b) { static int m; int n=0, k=0; m++; n++;

if(a&&b)

k+=fun(a-n, b+m); else {

m+=2; n+=2;

}

cout<void main(void) {

cout<程序输出的第一行是 (15) ,

第二行是 (16) , 第三行是 (17) 。

11、[程序]

#include class A{ protected:

int a, b; public: A(int t1,int t2){ a=t1; b=t2; } virtual int fun1 ( ) { return (a*b); } virtual int fun2 ( ) { return (a-b); } int fun3( ) { return (a+b); }

};

class B: public A { int c, d; public: B(int t):A(4*t,2*t)

{ c=2*t; d=t; }

int fun2 ( ){ return (a+b-c-d); } int fun3( ){ return (a+b+c+d); } };

void main ( void ) {

A a1(0,0), *pa; B b1(2); a1=b1;

cout<cout<fun1()<<’\’<fun2() <<’\’<fun3()<程序输出的第一行是 (18) ,

第二行是 (19) 。 12、[程序]

#include class A{ int a; public:

A(int x)

{ a=x;

cout<<\"A\"; }

int geta( ){return a;}

~A( ){ cout<<\" ~A\"<<'\\n'; } };

class B{ protected: int b; public:

B(int x)

{ b=x;

cout<<\"B\"; }

~B( ){ cout<<\"~B\"<<'\\n'; } };

class C:public B{ int c; A a1; public:

C(int x,int y,int z):a1(y),B(z)

{ c=x;

cout<<\"C\"; }

void show()

{ cout<void main( ) {

C c1(2,5,7); cout<执行上述程序时,第1行输出为 (20) ,

第2行输出为 (21) 。 ●完善程序题

13、以下程序打印所有符合下列条件的3位正整数:是某一个数的平方,其

中有两位数字相同。如100、121等,请完善程序。 #include void main() { int a,b,c,n,k; for(k=10;;k++){ (22) ; if(n>999) break; a=n/100;

}

}

b= (23) c=n%10;

if( (24) ) cout<14、以下程序中的sort函数,采用间接选择排序法,对具有n个元素的一

维数组a进行降序排列,第i趟排序时,首先找到当前最大元素的位置k,然后将a[k]放到a[i]处。请完善程序。 #include (25) ; void main(void )

{ int b[15]={4,8,7,3,15,11,14,12,1,13,6,2,9,10,5},i=0; sort( (26) ); while(i<15) { cout<cout<<'\\n'; }

void sort(int a[],int n) { int i,j,k;

for(i=0;ik=j;

if(k!=i)

j=a[i],a[i]=a[k],a[k]=j;

} } 15、设已建立一个单向链表,指针head指向该链表的首结点。结点的数据结构如下:

struct Node{int data; Node *next;};

以下函数sort(Node *head)的功能是:将head所指向链表上各结点的数据按data值从小到大的顺序排序。

算法提示:初始时,使p指向链表的首结点,从p之后的所有结点中找出data值最小的结点,让p1指向该结点。将p指向的结点的data值与p1指向的结点的data值进行交换。让p指向下一个结点,依次类推,直至p指向链表的最后一个结点为止。

Node *sort(Node *head){ Node *p=head,*p1,*p2; if(p==NULL)return head; while(p->next!=NULL){ p1=p; p2=p->next; while(p2!=NULL){ if( (28) ) p1=p2; p2=p2->next; } if(p!=p1){ int t; t=p->data; p->data= (29) ; p1->data=t; } (30) ; }

return head; }

三、编程题(20分)

定义一个字符串类STR,将字符串中的数字字符移至字符串前部,其他非数字字符符移至字符串后部,同时保证数字字符之间以及非数字字符之间的相对位置不变。如,字符串“ab12cd56AC78”处理后变为“125678abcdAC”。具体要求如下:

(1)私有成员数据:

char *s; 指向成员字符串; (2)公有成员函数:

 STR(char *p);构造函数,用字符串p初始化成员字符串数据。注意申请动态内存;  ~STR();析构函数,释放对象所占用的动态内存。

 int ischar(char t); 判断字符t是否为数字字符,如果是,则返回值为1,否则返回值为0。

 void fun(); 按题意处理成员字符串s。使用如下算法:

a) 通过指针p逐位判断每个字符;

b) 如果p所指向的字符不是数字字符,则通过指针p1寻找其

后的第一个数字字符;

c) 将p1和p之间的字符逐位后移,并将原先p1所指向的字符

放到p所指向的位置;

d) 指针p指向下一个字符。重复步聚a到d,直至所有字符处

理完毕。

 void print(); 输出成员字符串。

(3)在主函数中定义一个字符数组,使用getline函数从键盘输入一个长

度小于20的字符串,并使用该字符串对类STR进行测试。

Visual C++ 程序设计语言期末考试

试卷代号:VC02

参考答案:

一、选择(10×2=20分)

1-5:ACDDD

6-10:DCACD

二、填空:(30×2=60分)1、 sqrt(b*b-4*a*c) 2、 0 3、 17 4、 3 5、 operator 6、 int 7、 封装 8、 继承 9、 多态 10、 a=5 11、 b=5 12、 -4 14 13、 -18 14 14、 -32 14 15、 6, 3, 0

三、编程题(20分) #include #include class STR{ char *s; public: STR(char *p)

16、 6, 1, 0 17、 6, 1, 0 18、 32 4 12 19、 32 6 12 20、 BAC 21、 5 7 2 22、 n=k*k

23、 n/10%10 或 n%100/10 24、 a==b||b==c||c==a 25、 void sort(int [ ], int) 26、 b, 15 27、 a[j]>a[k] 28、 p1->data>p2->data 29、 p1->data 30、 p=p->next

// 1’ // 1’ // 3’

{ s=new char[strlen(p)+1]; strcpy(s,p); } ~STR() // { delete []s; } int isnum(char t) // 1’ 3’

{ if(t>='0'&&t<='9') return 1; return 0; } void fun() { for(char *p=s; *p; p++){ if (isnum(*p)==0){ char *p1=p; while(*p1&&isnum(*p1)==0) p1++; char t=*p1; while(*p1&&p1>p){ *p1=*(p1-1); p1--; } *p1=t; } } } void print() { cout<void main() { char str1[20];

cin.getline(str,20); STR st(str1); st.print(); st.fun(); st.print(); }

// 5’// 1’// 5’

因篇幅问题不能全部显示,请点此查看更多更全内容