1、20082009年度C+程序设计复习模拟试题一、单选题1、在每个C+程序中都必须包含有这样一个函数,该函数的函数名为A 。A. main B. MAIN C. name D. function2、设x和y均为bool量,则x&y为真的条件是A 。A. 它们均为真 B. 其中一个为真 C. 它们均为假 D. 其中一个为假3、下面的哪个保留字不能作为函数的返回类型?C 。A. void B. int C. new D. long4、假定a为一个整型数组名,则元素a4的字节地址为C 。A. a+4 B. a+8 C. a+16 D. a+325、假定AB为一个类,则执行“AB a(4) , b3 ,
2、 * p2 ;”语句时,自动调用该类构造函数的次数为B 。A. 3 B. 4 C. 6 D. 96、假定要对类AB定义加号操作符重载成员函数,实现两个AB类对象的加法,并返回相加结果,则该成员函数的声明语句为:B 。A. AB operator+(AB & a , AB & b) B. AB operator+(AB & a)C. operator+(AB a) D. AB & operator+( )二、填空题1、C+语言中的每条基本语句以; 作为结束符,每条复合语句以 作为结束符。2、执行“coutchar(A+2)5的相反表达式为x+y=5 。5、假定一个一维数组的定义为“char *
3、a8 ;”,则该数组所含元素的个数为8 ,所占存储空间的字节数为32 。(一个指针占4个字节)6、变量分为全局和局部两种,局部 变量没有赋初值时,其值是不确定的。7、假定a是一个二维数组,则aij的指针访为*(*(a+i)+j) 。8、假定一个结构类型定义为“struct D int a ; union int b ; double c ; ; D * d2 ; ;” ,则该类型的大小为20 字节。9、对一个类中的数据成员的初始化可以通过构造函数的初始化表 实现,也可以通过构造函数中的函数体 实现。10、假定AB为一个类,则执行“AB a10;”语句时,系统自动调用该类的构造函数的次数为10
4、。 11、假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员bb的写法为AB:bb 。12、在C+中建立参数类型和个数不同的同名函数是可能的,这称为函数重载。13、运算符new动态分配一个对象。14、关键字enum、struct、union和class在C+中用来建立新的数据类型。15、类的私有成员只能被该类的成员函数或友元访问。三、给出下列程序运行后的输出结果1、 #includeusing namespace std;class baseint x;public:base(int a)x=a;coutbase.xendl;base(base &t)x=t.x;cou
5、tbase copy.xendl;virtual base()coutbase.xendl;class derived:public baseint y;public:derived(int a,int b):base(a)y=b;coutderived.yendl;derived(derived &t):base(t)y=t.y;coutderived.yendl;derived()coutderived.yendl;void main()base *pb=new derived(52,54);base a(*pb);delete pb;2、#includeusing namespace s
6、td;class Apublic:virtual void fa(void)coutA:faendl; void fb(void)coutB:fbendl;class B:public Apublic:void fa(void)coutB:faendl;void fb(void)coutB:fbfa();pb-fb();pb-fa();pb-A:fa();(B*)pb)-fb();A:faB:fb B:fa A:faB:fb3、 # include void SB(char ch) switch(ch) case A: case a: cout well!; break; case B: ca
7、se b: cout good!; break; case C: case c: cout pass!; break; default: cout nad!; break; void main() char a1=b,a2=C,a3=f; SB(a1);SB(a2);SB(a3);SB(A);cout endl; good! pass! bad! well!4、# include # include void main() char *a5=student,worker,cadre,soldier,peasant; char *p1,*p2; p1=p2=a0; for (int i=0; i
8、0) p1=ai; if (strcmp(ai,p2)0) p2=ai; cout p1 p2endl;5、# include int a=5;void main() int a=10,b=20; cout a bendl; int a=0,b=0; for (int i=1; i6; i+) a+=i; b+=a; cout a b :aendl; cout a bendl; 10 2015 35 510 206、 # include int LB(int *a,int n) int s=1; for (int i=0; in; i+) s*=*a+; return s;void main(
9、) int a=1,2,3,4,5,6,7,8; int b=LB(a,5)+LB(&a3,3); cout b=bendl;b=2407、 # include # include struct Worker char name15; / 姓名 int age; / 年龄 float pay; / 工资;void main() Worker x; char *t=liouting; int d=38; float f=493; strcpy(x.name,t); x.age=d; x.pay=f; cout x.name x.age x.payendl;8、 # include class A
10、 int a;public: A(int aa=0) a=aa; A() cout Destructor A!aendl; ;class B:public A int b;public: B(int aa=0,int bb=0):A(aa) b=bb; B() cout Destructor B!bendl; ;void main() B x(5),y(6,7); / 后定义的变量将先被释放Destructor B! 7Destructor A! 6Destructor B! 0Destructor A! 5四、写出下列每个函数的功能1、# include int SA(int a,int b
11、) if (ab) return 1; else if (a=b) return 0; else return -1;2、float FI(int n) / n为大于等于1的整数 float x,y=0; do cin x; n-; y+=x*x; while (n0); return y;3、template void WE(Type a,Type b,int n) for (int i=0; if-name; StrNode * p=f; while (-n) p=p-next=new StrNode; cin p-name; p-next=NULL;五、编写程序,把从键盘上输入的一批整数
12、(以-1作为终止输入的标志)保存到文本文件“a:xxk1.dat”中。参考答案及评分标准一、单选题(每小题1分,共6分)评分标准:选对者得1分,否则不得分。1、A 2、A 3、C 4、C 5、B 6、B二、填空题(每小题2分,共24分) 评分标准:每题与参考答案相同者得2分,否则不得分。1、 : 2、 C3、 4 8 4、 x+yb则返回1,若a= =b则返回0,若ab则返回-1。 2、求出从键盘上输入的n个常数的平方和并返回。 3、模板函数,把数组a的每个元素按逆序放入数组b中。 4、建立一个具有n个结点的链表,每个结点的字符串值由键盘输入,链表的表头指针由引用变量f带回。五、编写程序,把从键盘上输入的一批整数(以-1作为终止输入的标志)保存到文本文件“a:xxk1.dat”中。(10分) 评分标准:见参考程序中的注释。# include / 使用此命令得1分# include # include void main() ofstream fout(a:xxk1.dat); / 定义输出文件流打开文件2分 if (!fout) cerr 文件没有打开!x; while (x!=-1) fout xx; / 能够从键盘向文件正确输出数据得6分 fout.close(); / 关闭输出文件流得1分