湛江海洋大学2005年第二学期
《C++程序设计》课考试题(B卷)
使用班级:信息与计算科学 信计1041—1042
题 号
一
二
三
四
五
总分
各题分数
36
20
20
9
15
100
实得分数
一、选择题(每题2分,共36分)
1、在每个C++程序中都必须包含有这样一个函数,该函数的函数名为________。
A. main B. MAIN C. name D. function
2、关于C++与C语言关系的描述中,________是错误的。 A.C语言是C++语言的一个子集 B.C语言与C++语言是兼容的 C.C++语言对C语言进行了一些改进 D.C++语言和C语言都是面向对象的
3、设x和y均为bool量,则x || y为假的条件是________。
A. 它们均为真 B. 其中一个为真
C. 它们均为假 D. 其中一个为假
4、在"int a[ ][3]={{1},{3,2},{4,5,6},{0}};"中,a[2][2]的值是________ A.1 B.0C.6 D.2
5、在下列表示引用的方法中,________是正确的。 已知:int m=10; A.int &x=m; B.int &y=10; C.int &z; D.float &t=&m;
6、对于C/C++语言的函数,下列叙述中正确的是________。 A .函数的定义不能嵌套,但函数调用可以嵌套 B.函数的定义可以嵌套,但函数调用不能嵌套 C.函数的定义和调用都不能嵌套 D.函数的定义和调用都可以嵌套
7、在一个被调用函数中,关于return语句使用的描述,________是错误的。 A.被调用函数中可以不用return语句 B.被调用函数中可以使用多个return语句 C.被调用函数中,如果有返回值,就一定要有return语句 D.被调用函数中,一个return语句可以返回多个值给调用函数
8、在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用________。 A.内联函数 B.重载函数 C.递归调用 D.嵌套调用
9、将两个字符串连接起来组成一个字符串时,选用________函数。 A.strlen( ) B.strcpy( ) C.strcat( ) D.strcmp( )
10、________不是构造函数的特征 A.构造函数的函数名与类名相同 B.构造函数可以重载 C.构造函数可以设置缺省参数 D.构造函数必须指定类型说明
11、已知:print( )函数是一个类的常成员函数,它无返回值,下列表示中,________是正确的。A.void print( ) const; B.const void print( );C.void const print( ); D.void print(const);
12、关于new运算符的下列描述中,________是错的。 A.它可以用来动态创建对象和对象数组 B.使用它创建的对象和对象数组可以使用运算符delete删除 C.使用它创建对象时要调用构造函数 D.使用它创建对象数组时必须指定初始值
13、下列for循环的次数为_______。 for(i=0, x=0; !x&&i<=5; i++) A.5 B.6 C.1 D.无限
14、对于"int *pa[5];"的描述中,_______是正确的。 A.pa是一个指向数组的指针,所指向的数组是5个int型元素 B.pa是一个指向某数组中第5个元素的指针,该元素是int型变量 C.pa[5]表示某个元素的第5个元素的值 D.pa是一个具有5个元素的指针数组,每个元素是一个int型指针
15、运行程序后a 的值为______:
void main()
{ int a,k=4,m=6,*p1=&k,*p2=&m;
a=p1==&m;
cout<<a;}
A 4 B 1 C 0 D a无定值
16、以下的输出结果为______:
#include <stdio.h>
void main()
{int i=3,j=2,a=6;
a=(--i==j++)?--i:++j;
printf("%d,%d,%d",a,j,i);
}
A 4,4,2 B 3,2,3
C 1,3,1 D 4,4,1
17、以下程序中,while循环的循环次数是______
void main( )
{ int i=1;
while(i<10)
{ if (i<1) continue;
if (i==5) break;
i++;}
……}
A)4 B)9 C)4 D)5
18、下面的程序,输出结果为 _______。
#include<stdio.h>
void main( )
{ int *p, i;
int a[]={2, 6, 8, 7, 9};
p=a; i=2;
printf("%d\t%d\t%d\t%d\t%d\n",*(a+i), a[p-a],*p++,*++p, *(&a[i]));
}
A、8 6 6 6 8
B、8 2 2 8 8
C、8 2 6 8 8
D、8 6 8 6 8
二、填空(后3题每空2分,其余每空1分,共20分)
1、已知‘A' (‘Z'的ASCII码为65(90,当执行“int x=‘D'+5;”语句后x的值为________。
2、已知x=2.8,a=10,y=4.7,则x+a%3*(int)(x+y)%2/4的值为:________。
3、判断某年(year)为闰年的表达式为:________________________________________。
4、举出C++中两种用户自定义的数据类型:___________、____________
5、执行“typedef int ABC[10];”语句把ABC定义为具有10个整型元素的________,
那么语句“ABC a;”等价的语句是:________。
6、当一个类对象离开它的作用域时,系统将自动调用该类的____________。
7、在C++中,虽然友元提供了类之间数据进行访问的一种方式,但它破坏了面向对象程序设计的____________特性。
8、使用const语句定义一个标识符常量时,则必须对它同时进行__________。
9、设变量均为int型,则表达式(b=51,i=++b)的值是__________。
10、全局变量和_______________若不显示初始化,则自动初始化为0。
11、若需要把一个函数“void F();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:________________________。
12、假定p所指对象的值为25,p+1所指对象的值为46,则*p++的值为________。
13、假定 AB为一个类,则执行”AB a[5];”语句时,系统自动调用该类构造函数的次数
为________。
14、假定要动态分配一个类型为Worker的具有n个元素的数组,并由r指向这个动态数组,则使用的语句为____________________________。
三、读程题(每小题5分,共20分)
1、#include <stdio.h> int a[ ]={1,3,5,7,9}; int *p[ ]={a,a+1,a+2,a+3,a+4}; void main( ) {printf("%d\t%d\t%d\n",a[4],*(a+2),*p[1]); printf("%d\t%d\t%d\n",**(p+1)+a[2],*(p+4) -*(p+0),*(a+3)%a[4]);
}
该程序的运行结果是:
2、#include<iostream.h>
#include<stdlib.h>
double SD(int a, int b, char op)
{double x;
switch(op)
{ case '+': x=double(a)+b; break;
case '-': x=double(a)-b; break;
case '*': x=double(a)*b; break;
case '/': if(b) x=double(a)/b;
else exit(1);
break;
default: exit(1);
}
return x;
}
void main()
{ int x=20,y=8;
cout<<SD(x,y,'-')<< " ";
cout<<SD(x,y,'*')<< " ";
cout<<SD(x+y,y,'/')<<endl;
}
该程序的运行结果是:
3、#include<iostream.h>
#include<string.h>
struct Worker
{char name[15]; //姓名
int age; //年龄
float pay; //工资
};
void main()
{ Worker x;
char *t="WeiRong";
int d=45; float f=1235;
strcpy(x.name,t);
x.age=d; x.pay=f;
cout<<x.name<<" "<<x.age<<" "<<x.pay<<endl;
}
该程序的运行结果是:
4、 #include<iomanip.h>
void LG(int*& a, int& m)
{ a=new int[m];
int* p=a;
for(int i=0;i<m;i++)
*p++=i*i;}
void main()
{int *b,n=5;
LG(b,n);
for(int i=0;i<n;i++)
cout<<b[n-i-1]<< " ";
cout<<endl;
delete[]b; }
该程序的运行结果是:
四、读程填空。将答案直接写在题中的横线上。(共9分)
1、斐波那契数列的第1和第2个数分别为0和1 ,从第三个数开始,每个数等于其
两个数之和。求斐波那契数列中的前20个数,要求每行输出5个数。(3分)
#include<iostream.h>
#include<iomanip.h>
void main( )
{ int f,f1,f2,i;
cout<<" 斐波那契数列的前20个数为:\n";
f1=0; f2=1;
cout<<setw(8)<<f1<<setw(8)<<f2;
for(i=3;i<=20;i++)
{ f=_______________________;
cout<<setw(8)<<f;
if( _______________________ ) cout<<endl;
f1=f2;
f2=_______________________;
}
cout<<endl;
}
2、已知一个类的定义如下:(6分)
#include<iostream.h>
class AA {
int a[10];
int n;
public:
void SetA(int aa[], int nn) //用数组aa初始化数据成员a,用nn初始化数据成员n
{ …… }
int MaxA(); //从数组a中前n个元素中查找最大值
void SortA(); //对数组a中前n个元素进行从小到大排序
void PrintA(); //依次输出数组a中的前n个元素,最后输出一个换行
{ …… }
};
int AA:: MaxA()
{ …… }
void AA:: SortA()
{ …… }
void main()
{ int a[10]={23,78,46,55,62,76,90,25,38,42};
__________________________;
x.SetA(a,8);
int __________________________;
__________________________;
x.PrintA();
cout<<m<<endl;
}
该程序运行结果为:
23 25 46 55 62 76 78 90
90
五、编程题。(共15分)
1、按照下列要求编写程序:
(1)写一个函数void strsort(char *s),调用该函数能将给定的字符串按由小到大排序。
(其中:该函数参数s:为指向所要排序的字符串的首地址。
该函数名为:strsort
该函数返回类型为:void ) (5分)
(2)通过调用上面排序函数编程实现:将从键盘任意输入的两字符串先按由小到大排序输出,再和并,并将和并后的字符串也按由小到大排序输出。(10分)