山东广播电视大学开放教育《C++语言程序设计》课程综合练习题.doc
山东广播电视大学开放教育C+语言程序设计课程综合练习题 一选择题 1. 下面的哪一个保留字不能作为函数的返回类型?( C ) A. void B. int C. new D. long2. 假定a为一个数组名,则下面的哪一种表示有错误?( 了B ) A. ai B. *+a C. *a D. *(a+1) 3. 在下面的二维数组定义中,哪一个是正确的?( D ) A. int a5; B. int a(10); C. int a; D. int a5=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 operator +(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 CHINA B byte-size C double D A+a8下列各种函数中,( 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);和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。 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 )。 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.h17类型修饰符unsigned修饰( D )类型是错误的。 A char B int C long int D float18下列变量名中,( A )是合法的。 A _var B bye-bye C int D 123_cc19设int a=3,* p=&a;,则*p的值是( D )。 A 变量a的地址值 B 无意义 C 变量p的地址值 D 320设int m=0;,下列表示引用的方法中,( A )是正确的。 A int &x=m; B int &y=10; C int &z; D float &t=&m21循环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 ate23类X中,若没有定义构造函数,则默认的构造函数是( A )。 A 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(int &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 )。Astrlen() Bdtrcap() CStrcat() Dstrcmp()28假定AB为一个类,则执行“ABa(4),b5,*p2:”语句时,自动调用该类构造函数的次数为( A )。 A6 B7 C9 D1129设int a=3,* p=&a;,则*p的值是( D )。 A变量a的地址值 B无意义 C变量p的地址值 D330使用操作符setw对数据进行格式输出时,需要包含( C )文件。 Aiostream.h Bfstream.h Ciomanip.h Dstdlib.h二填空题1在c+语言中,用输出控制字符_表示输出一个换行。2表达式xx+l表示成增量表达式为_。3关系表达式x+y>5的相反表达式为_。 4假定x=5,则执行“a=(x<0?10:20);”语句后a的值为_。 5假定一个二维数组的定义为“int a36;”,则该数组所含元素的个数为_.6要在屏幕上显示"Hello,world!"应执行语句cout<<_。7表达式8&3的结果是_。8若一全局变量只允许本程序文件中的函数使用,则定义它时应加上修饰符_。9假定p所指对象的值为36,p+l所指对象的值为49,则*+p的值为10假定AB为一个类,则执行"ABa8;”语句时,系统自动调用该类构造函数的次数为。11已知A一Z的ASCII码为6590,当执行"charch=14*5+2;cout<<ch<<endl;”语句序列后,得到的输出结果为。12float和double类型的长度分别为和。13假定一个二维数组的定义为“int a36;”,则该数组所含元素的个数为,所占存储空间的字节数为·14执行“typedef int ABC20;”语句把ABC定义为具有20个整型元素的 .15假定p所指对象的值为36,p+l所指对象的值为49,则*+p的值为16假定a是一个二维数组,则 aii的指针访问方式为 。17假定要访问一个结构对象x中的由a指针成员所指向的对象,则表示方法为。18对一个类中的数据成员的初始化可以通过构造函数中的实现,也可以通过构造函数中的实现。19当一个类对象离开它的作用域时,系统将自动调用该类的。20假定AB为一个类,则执行"ABa8;”语句时,系统自动调用该类构造函数的次数为。 答案:1. n 2. +x 3. x+y<=5 4. 205. 18 6. ""Hello,world!"" 7. 0 8. static9. 49 10. 8 11H 124 8 1318 72 14数组类型 15 49 16 *,(ai+”或*(*(a+i)十j) 17 *(x.a) 18初始化表 函数体 19析构函数 20 8三写出下列每一个程序运行后的结果。1#include<iostream.h> void main() int s1=0, s2=0; for(int i=0; i<15; i+) if(i%2) s1+=i; else s2+=i; cout<<s1<<','<<s2<<endl; 2#include<iostream.h> void main() int i=1,s=0; while(s<15)s+=i+;cout<<i<<,<<s<<ednl;3#include<iostream.h> void main() int a10=8,19,46,15,6,24,27,18,20,53; int c1=0, c2=0; for(int i=0;i<10;i+) if(ai>=20) c1+; if(ai>=10 && ai<=40) c2+; cout<<c1<<','<<c2<<endl; 4#include<iostream.h> Int LB(int *a,int n)For(int i=0;i<n;i+) p*=*a;a+;Return p; Inta5=1,2,3,4,3;Cout<<LB(a,5)<<endl; 5#include<iostream.h> struct Worker char name15; /姓名 int age; /年龄 float pay; /工资 void main() Worker x="wangfong",46,1640; Worker y, *p; y=x; p=&x; cou<<p->age+5<< <<p->pay-300<<endl; 19. #include<iostream.h> void SB(char ch) switch(ch) case 'A': case 'a': cout<<"well !" break; case 'B': case 'b' cout<<"good !" break; case 'C': case 'c': cout<<"pass ! " break default: cout<<"bad! " break; ) cout<<endl; void main() char a6 ="Abcaf' for(int i=0; ai; i+) SB(ai); 21. #include<iomanip. h> void main() int a8= 3,5,7,9,11,13,15,17; int * p=a; for(int i=0;i<8;i+) p+=l0; cout<<setw(5)<< * p+; if(i+1 %3= =0 cout<<endl; 22. # inelude<iomanip, h> void LF(int& x, int y) x=x+y; y= x+y; cout<<"x="<<x<<", y="<<y<<endl; void main() int x=5, y=8, cout<<"x="<<x<<'', y="<<y<<endl; LF(x, y); cout<<"x="<<x<<", Y="<<Y<<endl; 23.# include<iomanip, h> void main() int x=25,y= 120; cout<<"dec:"<<dec<<setw(l0) <<x<<setw(l0)<<y<<endl; cout<<"oct: "<<oct<<setw(l0) <<x<<setw(l0)<<y<<endl; cout<<"hex:"<<hex<<setw(10) <<x<<setw(10) <<y<<dec<<endl 答案:1 49,56 26,5 35,6 472551,13406well! good! pass! well! bad!7 13 15 17 19 2l 23 25 278x5,y8 x=13,y21 x=13,y8 9dec: 25 120 Oct: 31 170 hex: 19 78 四写出下列每个函数的功能 1double FI(double n) /n 为大于等于1的整数 double x,y=0; do cin>>x; n-; y+=x; while(n>0); return y; 2template<class Type> bool WE(Type a, Type b, int n) int c=0; for(int i=0;i<n;i+) if(ai=bi) c+; if(c=n) return true; return false; 3void LK(double a, int n) double s=0; int I,m=0; for(i=0;i<n;i+) s+=ai; s=s/n; for(i=0;i<n;i+) if(ai>=s) m+; 4. # inelude<iostream, h> template<class Type> Type WD(Type a, int n) Type m= a0 ; for(int i=l;i<n;i+) if(ai>m) re=ai; return m 5. # include<iomanip, h> include< fstream, h> void JD(char* 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<<n<< ' ' <<s<<' ' << float(s)/n<<endl;fin. close( );6已知6a30,15b36,编一程序求出满足不定方程2a十5b=126的全部整数组解。如(13,20)就是其中的一组解。 参考答案1. 求出从键盘上输入的n个实数之和。2.模板函数,判断具有n个元素的两个数组a和b中对应元素值是否全部相等,若是则返回真,否则返回0。3.统计出数组a的前n个元素中大于等于其平均值的元素个数并作为函数值m返回。4模板函数,从数组a的n个元素中求出最大值并返回。5从二进制文件中输入所有整数,计算并显示出所有整数的个数、总和与平均值。6整个程序正确得10分,否则按下面参考程序中语句后的注释给分。 #include<iostreamh> void main( ) inta,bi 定义变量正确得2分 for(a=6;a<30;a+) 外循环次数正确得2分 for(b15;b<36;b+) 内循环次数正确得2分 if(2xa+5,b=126)coul<<(<<a<<,<<b<<)<<endl; 条件正确得2分,输出语句正确得2分 五、编写一个函数,统计出具有n个元素的一维数组中大于等于所有 元素平均值的元素个数并返回它。(12分) int Count(double a,int n);/此为该函数的声明。参考答案: 答案评分标准见参考程序中的注释。 int Count(double a,int n) double m0; int i; for(i0;i<n;i+) m+ai;/计算出所有元素之和得3分 mm/n; /计算出平均值得1分 int c0; for(i0;i<n;i+) if(ai>=m) c+; /按条件统计出元素个数得4分 return c;/返回统计结果得2分 2.编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a:xxk1.dat”中。(10分)参考答案: 评分标准见参考程序中的注释。 #include<fstream.h> /使用此命令得1分 #include<stdlib.h> void main() ofstream fout("a:xxkl.dat");/定义输出文件流并打开文件得2分 if(! fout) cerr<<”文件没有打开!”<<endl; exit(1); /可有可无 int x; cin>>x; while(x!-1) fout<<x<<' '; cin>>x; /能够从键盘向文件正确输出数据得6分 fout.close();/关闭输出文件流得1分3. 假定一个函数声明为“int FF(int a, int n);”,要求递归求出数组a中所有n个元素之积并返回。 参考答案: 评分标准:根据编程的完整情况酌情给分。 int FF(int a, int n) if(n=1) return an-1; else return an-1 * FF(a,n-1); 4. 编写一个函数,显示出整数形参x的除1和本身之外的所有因数,并返回所有因数的个数。(10分)参考答案:评分标准见参考程序中的注释。 int Func(int x) /函数头正确得2分 int k0; for(int i2;i<x/2;i+) if(xi0) cout<<i<<' ' k+; /正确显示并统计出结果得6分 cout<<endl; return k;/返回统计结果得2分