1、山东广播电视大学开放教育《C++语言程序设计》课程综合练习题 一.选择题 1. 下面的哪一个保存字不能作为函数的返回类型?( C ) A. void B. int C. new D. long 2. 假定a为一个数组名,则下面的哪一种表达有错误?( 了B ) A. a[i] B. *++a C. *a D. *(a+1) 3. 在下面的二维数组定义中,哪一个是对的的?( D ) A. int a[5][]; B. int a[](10)
2、 C. int a[][]; D. int a[][5]={{1,2,3},{4,5}}; 4.下面的哪一个函数头格式不对的?( B ) A. AA(int a, int b) B. AA(int a=0, int b) C. AA(int a=0, int b=0) D. AA(int a, int b=0) 5.假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为( B )。 A. AB operato
3、r +(AB& a, AB& b); B. AB operator +(AB& a); C. operator +(AB a); D. AB& operator +(); 6.当需要使用ostrstream流类定义一个流对象并联系一个字符串时,应在文献开始使用#include命令,使之包含( A)文献。 A. strstrea.h B. stdlib.h C. iostream.h D. fstream.h 7.下列变量名中,( A )是合法的。 A
4、 CHINA B byte-size C double D A+a 8.下列各种函数中,( C )不是类的成员函数。 A 构造函数 B 析构函数 C 友元函数 D 拷贝构造函数 9.下列( A )是对的的语句。 A ; B a=17 C x+y D cout<<"\n" 10.循环while(int i=0) i--;执行次数是( A )。 A 0 B 1 C 5 D 无限 11.设int f(int)
5、和int g(int);是函数f和g的原形,以下将f作为语句调用的是(B )。 A g(f(3)); B f(g(3)); C g(f(3)+2); D p= f(g(3)+1); 12.设int * p2=&x,* p1=a;p2= *b;则a和b的类型分别是( B )。 A int * 和int B int * 和int ** C int 和int * D int * 和int * 13.设int x;,则通过( C )后,语句*px=0;可将x值置为0。
6、 A int * px; B int const * px=&x; C int * const px=&x; D const int * px=&x; 14.设void f1(int *m,long &n);int a;long b;则以下调用合法的是( B )。 A f1(a,b); B f1(&a,b); C f1(a,&b); D f1(&a,&b); 15.以下结构类型可用来构造链表的是( B )。
7、 A struct aa{ int a;int * b;}; B struct bb{ int a;bb * b;}; C struct cc{ int * a;cc b;}; D struct dd{ int * a;aa b;}; 16.使用操作符setw对数据进行格式输出时,需要包含( C )文献。 A iostream.h B fstream.h C iomanip.h D stdlib.h 17.类型修饰符unsigned修饰( D )类型是错误的。 A c
8、har B int C long int D float 18.下列变量名中,( A )是合法的。 A _var B bye-bye C int D 123_cc 19.设int a=3,* p=&a;,则*p的值是( D )。 A 变量a的地址值 B 无意义 C 变量p的地址值 D 3 20.设int m=0;,下列表达引用的方法中,( A )是对的的。 A int &x=m; B int &y=10; C
9、 int &z; D float &t=&m 21.循环for(int i=0,x=0;!x&&i<=5;i++);的循环体执行次数是( B )。 A 5 B 6 C 1 D 无限 22.磁盘文献操作时,在打开磁盘文献的访问方式中,( C )是以追加数据 方式打开文献的。 A in B out C app D ate 23.类X中,若没有定义构造函数,则默认的构造函数是( A )。 A
10、 X ( ){ } B X (X & x){ *this=x;} C ~X ( ){ } D 不存在 24. int * p2=&x,* p1=a;*p2=*b;则变量a和b的类型分别是( D )。 A int和int B int * 和int C int和int * D int * 和int * 25.设p为指针变量,则以下表达式对的的是( B )。 A --p++ B --++p C --(p+5) D (p-5)++ 26..设void f1(i
11、nt &x,char * p);int m;char s[ ]="c++";以下调用合法的是( C )。 A f1(&m,&s); B f1(&m,s); C f1(m,s); D f1(m,&s); 27 .求一个字符串长度的标准函数为( A )。 A.strlen() B.dtrcap() C.Strcat() D.strcmp() 28.假定AB为一个类,则执行“ABa(4),b[5],*p[2]:”语句时,自动调用该类构造 函数的次数为( A )。 A.6 B.7 C.9 D.
12、11 29.设int a=3,* p=&a;,则*p的值是( D )。 A.变量a的地址值 B.无意义 C.变量p的地址值 D.3 30.使用操作符setw对数据进行格式输出时,需要包含( C )文献。 A.iostream.h B.fstream.h C.iomanip.h D.stdlib.h 二.填空题 1.在c++语言中,用输出控制字符________表达输出一个换行。 2.表达式x=x+l表达成增量表达式为____________________。 3.关系表达式x+y>5的相
13、反表达式为______________。 4.假定x=5,则执行“a=(x<0?10:20);”语句后a的值为________。 5.假定一个二维数组的定义为“int a[3][6];”,则该数组所含元素的个数为________. 6.要在屏幕上显示"Hello,world!"应执行语句cout<<____________________。 7.表达式8&3的结果是__________。 8.若一全局变量只允许本程序文献中的函数使用,则定义它时应加上修饰符_______________。 9.假定p所指对象的值为36,p+l所指对象的值为49,则*++p的值为—— 10.假定
14、AB为一个类,则执行"ABa[8];”语句时,系统自动调用该类构造函数的次数为————。
11.已知’A’一’Z’的ASCII码为65—90,当执行"charch=14*5+2;cout< 15、p的值为——
16.假定a是一个二维数组,则 a[i][i]的指针访问方式为 ——。
17.假定要访问一个结构对象x中的由a指针成员所指向的对象,则表达方法为———。
18.对一个类中的数据成员的初始化可以通过构造函数中的——实现,也可以通过构造函数中的——实现。
19.当一个类对象离开它的作用域时,系统将自动调用该类的——。
20.假定AB为一个类,则执行"ABa[8];”语句时,系统自动调用该类构造函数的次数为————。
答案:1. ’\n’ 2. ++x 3. x+y<=5 16、 4. 20
5. 18 6. "\"Hello,world!\"" 7. 0 8. static
9. 49 10. 8 11.H 12.4 8
13.18 72 14.数组类型 15. 49 16. *,(a[i]+”或*(*(a+i)十j)
17. *(x.a) 18.初始化表 函数体
19.析构函数 17、 20. 8
三.写出下列每一个程序运营后的结果。
1.#include 18、) {
int i=1,s=0;
while(s<15)s+=i++;
cout<
void main() {
int a[10]={8,19,46,15,6,24,27,18,20,53};
int c1=0, c2=0;
for(int i=0;i<10;i++) {
if(a[i]>=20) c1++;
19、 if(a[i]>=10 && a[i]<=40) c2++;
}
cout< 20、 struct Worker {
char name[15]; //姓名
int age; //年龄
float pay; //工资
};
void main() {
Worker x={"wangfong",46,1640};
Worker y, *p;
y=x; p=&x;
cou< 21、 }
19. #include 22、 cout<<"pass ! "; break
default:
cout<<"bad! "; break;
)
cout< 23、 int a[8]= {3,5,7,9,11,13,15,17};
int * p=a;
for(int i=0;i<8;i++) {
p+=l0;
cout< 24、
x=x+y;
y= x+y;
cout<<"x="< 26、
2.6,5
3.5,6
4.72
5.51,1340
6.well!
good!
pass!
well!
bad!
7. 13 15 17
19 2l 23
25 27
8.x=5,y=8
x=13,y=21
x=13,y=8
9.dec: 25 120
Oct: 31 170
hex: 19 78
四.写出下列每个函数的功能
1 27、.double FI(double n) {
//n 为大于等于1的整数
double x,y=0;
do {
cin>>x;
n--; y+=x;
} while(n>0);
return y;
}
2.template 28、
for(int i=0;i 29、>=s) m++;
}
4. # inelude 30、ar* fname)
//可把以fname所指字符串作为文献标记符的文献称为fname文献,
//假定该文献保存着一批整数。
{
ifstream fin(fname, ios: :in |ios: :nocreate | ios: :binary)
int x, s=O, n=O;
while(fin, read((char * ) &x, size of(x))) {
s+=x; n++
}
cout< 31、一程序求出满足不定方程2a十5b=126的所有整数组解。如(13,20)就是其中的一组解。
参考答案
1. 求出从键盘上输入的n个实数之和。
2.模板函数,判断具有n个元素的两个数组a和b中相应元素值是否所有相等,若是则返回真,否则返回0。
3.记录出数组a的前n个元素中大于等于其平均值的元素个数并作为函数值m返回。
4.模板函数,从数组a的n个元素中求出最大值并返回。
5.从二进制文献中输入所有整数,计算并显示出所有整数的个数、总和与平均值。
6.整个程序对的得10分,否则按下面参考程序中语句后的注释给分。
#include 32、oid main( )
{
inta,bi //定义变量对的得2分
for(a=6;a<=30;a++) //外循环次数对的得2分
for(b=15;b<=36;b++) //内循环次数对的得2分
if(2xa+5,b==126)coul<<’(’< 33、);//此为该函数的声明。
参考答案:
答案评分标准见参考程序中的注释。
int Count(double a[],int n) {
double m=0;
int i;
for(i=0;i 34、上输入的一批整数(以-1作为终止输入的标志)保存到文本文献“a:xxk1.dat”中。(10分)
参考答案: 评分标准见参考程序中的注释。
#include 35、int x;
cin>>x;
while(x!=-1) {
fout< 36、eturn a[n-1];
else return a[n-1] * FF(a,n-1);
}
4. 编写一个函数,显示出整数形参x的除1和自身之外的所有因数,并返回所有因数的个数。(10分)
参考答案:评分标准见参考程序中的注释。
int Func(int x) {//函数头对的得2分
int k=0;
for(int i=2;i<=x/2;i++)
if(x%i==0) {
cout<






