c++期末复习题

C++程序设计期末试题

一、单项选择题

1.C++源程序文件的默认扩展名为(A)。

A.cpp B.exe C.obj D.lik

2.C++程序从上机到得到结果的几个操作步骤依次是(B)

A.编译、编辑、连接、运行B.编辑、编译、连接、运行C.编译、运行、编辑、连接D.编辑、运行、编辑、连接

3.以下标识符中不全是保留字(关键字)的是(B)。

A.case for int  B.default then while  C.bool class long  D.goto return char

4.程序中主函数的名字为(A)。

A.main B.MAIN C.Main D.任意标识符

5.C++程序的基本模块为(D)。

A.表达式B.标识符C.语句D.函数

6.可用作C++语言用户标识符(变量名)的一组标识符是(B)。

A.void define+WORD   B.a3_b3_123 YNC.for-abc   CaseD.2a   DO sizeof

7.存储以下数据,占用存储字节最多的是(D)。

A.0 B.‘0’C.“0”D.0.0

8.设”int a=15,b=26;”,则”cout<<(a,b);”的输出结果是(D)。

A.15  B.26,15  C.15,26  D.26

9.设x是一个bool型的逻辑量,y的值为10,则表达式x&&y的值为(C)。

A.1   B.0   C.与x值相同  D.与x值相反

10.假定一个二维数组的定义语句为“int a[3][4]={{3,4},{2,8,6}};”,则元素a[2][1]的值为(A)。

A.0   B.4   C.8    D.6

11.若定义了函数double*function(),则函数function的返回值为(B)。

A.实数型  B.实数的地址  C.指向函数的指针  D.函数的地址

12.函数重载是指(A)。

A.两个或两个以上的函数取相同的函数名,但形参的个数或类型不同

B.两个以上的函数取相同的名字和具有相同的参数个数,但形参的类型可以不同

C.两个以上的函数名字不同,但形参的个数或类型相同

D.两个以上的函数取相同的函数名,并且函数的返回类型相同

13.以下关于函数模板叙述正确的是(C)。

A.函数模板也是一个具体类型的函数

B.函数模板的类型参数与函数的参数是同一个概念

C.通过使用不同的类型参数,函数模板可以生成不同类型的函数

D.用函数模板定义的函数没有类型

14.假定指针变量p定义为“int*p=new int(100);”,要释放p所指向的动态内存,应使用语句(A)。

A.delete p;  B.delete*p;  C.delete&p;  D.delete[]p;

15.关于封装,下列说法中不正确的是(D)。

A.通过封装,对象的全部属性和操作结合在一起,形成一个整体

B.通过封装,一个对象的实现细节被尽可能地隐藏起来(不可见)

C.通过封装,每个对象都成为相对独立的实体

D.通过封装,对象的属性都是不可见的

16.面向对象方法的多态性是指(C)。

A.一个类可以派生出多个特殊类

B.一个对象在不同的运行环境中可以有不同的变体

C.针对一消息,不同的对象可以以适合自身的方式加以响应

D.一个对象可以是由多个其他对象组合而成的

17.文件包含命令中被包含的文件的扩展名(C)。

A.必须是.h   B.不能是.h   C.可以是.h或.cpp  D.必须是.cpp

18.预处理命令在程序中都是以(B)符号开头的。

A.*  B.#  C.&  D.@

19.以下叙述中正确的是(B)。

A.使用#define可以为常量定义一个名字,该名字在程序中可以再赋另外的值

B.使用const定义的常量名有类型之分,其值在程序运行时是不可改变的

C.在程序中使用内联函数使程序的可读性变差

D.在定义函数时可以在形参表的任何位置给出缺省形参值

20.设有如下函数定义int f(char*s){char*p=s;while(*p!=’\0’)p++;return(p-s);}在主函数中用cout<<f(“good”)调用上述函数,则输出结果为(B)。

A.3   B.4   C.5   D.6

二、填空题

1.C++语言是在__C___语言的基础上发展起来的。

2.行尾使用注释的开始标记符为___//___。

3.一条表达式语句必须以__分号___作为结束符。

4.程序文件的编译错误分为___warning___和__error___两类。

5.从一条函数原型语句“int fun1(void);”可知,该函数的返回类型为_int_,该函数带有_0_个参数。

6.假定x=5,y=6,则执行表达式y+=x--计算后,x和y的值分别为_4_和_11_。

7.unsigned short int和int类型的长度分别为__2__和___4__。

8.字符串”\nThis\’s a pen\n\n”的长度为_____15_____。

9.在C++中存储字符串”abcdef”至少需要___7___个字节。

10.假定x和y为整型,其值分别为16和5,则x/y和double(x)/y的值分别为_3_和_3.2_。

11.假定x是一个逻辑量,则!x||false的值为____x______。

12.数学算式3xy/(x+y)的C++表达式为____3*x*y/(x+y)____。

13.设enum Printstatus{ready=2,busy,error};则cout<<busy的输出结果是__1__。

14.假定x=10,则表达式x<=10?20:30的值为__20____。

15.在switch语句中,每个语句标号所含关键字case后面的表达式必须是__常量__。

16.若while循环的“头”为“while(i++<=10)”,并且i的初值为0,同时在循环体中不会修改i的值,则循环体将被重复执行___11__次后正常结束。

17.若“double x=100;”是文件F1.CPP中的一个全局变量定义语句,若文件F2.CPP中的某个函数需要访问此x,则应在文件F2.CPP中添加对x的声明语句为_extern double x;_。

18.若要把一个整型指针p转换为字符指针,则采用的强制转换表达式为__(char*)p __。

19.假定p是一个指向整数对象的指针,则用__*p __表示该整数对象。

20.假定p所指对象的值为25,p+1所指对象的值为42,则*++p的值为___42____。

三、程序填空,对程序、函数或类中划有横线的位置,根据题意按标号把合适的内容填写到程序下面相应标号的后面。

1、打印出100到200之间的所有素数(即除1和它本身再没有其他约数的数)。

#include<iostream.h>

#include<math.h>

void main()

{

  int i,j;

  for(i=100;i<=200;i++)

  {

    int temp=int(sqrt(i));

    for(j=2; __  j<=temp __;j++)

        if(i%j==0) __ break __;

    if(__  j>temp __)cout<<i<<'';

  }

 cout<<'\n';

}

2、斐波那契数列的第1和第2个数分别为0和1,从第三个数开始,每个数等于其前两个数之和。求斐波那契数列中的前20个数,要求每行输出5

个数。

#include<iostream.h>

void main()

{

int f,f1,f2,i;

cout<<”斐波那契数列:\n”;

f1=0;f2=1;

cout<<setw(6)<<f1<<setw(6)<<f2;

for(i=3;i<=20;i++){

f=______f1+f2______;

cout<<setw(6)<<f;

if(_____ i%5==0 ______)cout<<endl;

f1=f2;

f2=____f_______;

}

cout<<endl;

}

3、采用指针访问方式从键盘给数组a[N]输入数据,然后对元素值重新按逆序存放并输出。

#include<iostream.h>

const int N=8;

void main()

{

int a[N],*p,*q;

for(p=a;p<a+N;p++)___cin>>*p ___;

p=a;q=a+N-1;

while(p<q){

int r=*p;*p=*q;*q=r;

___ p++ ___;___ q--___;

}

for(p=a;p<a+N;p++)

cout<<*p<<'';

cout<<endl;

}

四、写出程序运行结果

1. #include<iostream.h>

#include<stdlib.h>

void main()

{

int a[8]={25,48,32,85,64,18,48,29};

int max,min;

max=min=a[0];

for(int i=0;i<8;i++){

if(max>a[i])max=a[i];

if(min<a[i])min=a[i];

}

cout<<"max:"<<max<<endl;

cout<<"min:"<<min<<endl;

}

运行结果:max:85    min:18

2.#include<iomanip.h>

void main()

{

int i,j;

for(i=0;i<5;i++){

for(j=i;j<5;j++)cout<<’*’;

cout<<endl;

}

}

运行结果:

*****

****

***

**

*

五、指出程序或函数的功能

1.#include<iostream.h>

void main()

{

int i,s=0;

for(i=2;i<=30;i+=2)s+=i*i;

cout<<"s="<<s<<endl;

}

功能:计算并输出22+42+62+...+302的值。

六、程序改错,请根据程序段或函数模块的功能改写个别地方的错误

1、在下面的定义中,NODE是链表接点的结构,appendToList则是一函数,其功能是:在list所指向的链表的末尾添加一个新的值为x的接点,并返回表头指针。函数中有两处错误,指出错误所在行的行号并提出改正意见。

Struce NODE{

Int data;

NODE*next;

};

NODE*appendToList(NODE*list,int x)

{NODE*p=new int;                     //1行

p->data=x;                           //2行

p->next=NULL;                        //3行

if(list==NULL)return p;              //4行

NODE*p1=list;                        //5行

While(p1->next!=NULL)p1=p1->next;    //6行

p1=p;                                //7行

return list;                         //8行

}

错误行的行号为28

分别改正为 NODE *p=new NODE;p1->next=p; 

2、下面程序段第4—9行中存在着三条语句错误,请指出错误语句的行号并说明原因。

Class A

{

int a,b;

const int c;

public:

A(){a=b=c=0;}

A(int aa,int bb):c(aa+bb){a=aa;b=bb;}

};

A a,b(1,2,3);

A x(2,3),y(4);

错误行的行号为589

错误原因分别为在函数体给常量c赋值定义b多一个参数定义y少一个参数

七、编程题

1.按照函数原型语句“void p(int n);”编写一个递归函数显示出如下图形,此图形是n=5的情况。

1

22

333

4444

55555

函数:

void p(int n)

   {

       if(n!=0) {

           p(n-1);

           for(int i=0; i<n; i++) cout<<n;

           cout<<endl;

       }

   }

2.求出从键盘上输入的10个整数中的最大值,要求输入变量用x表示,存储最大值的变量用max表示。

程序:

#include<iostream.h>

       void main()

       {

           int x,max;

           cin>>x;

           max=x; 

           for(int i=0;i<9;i++) {

               cin>>x;

               if(x>max) max=x; 

           }

           cout<<"max:"<<max<<endl;

       }

3.根据下面类中Search函数成员的原型和注释写出它的类外定义。

class AA{

int*a;

int n;

int MS;

public:

void InitAA(int aa[],int nn,int ms){

if(nn>ms) {cout<<"Error!"<<endl;exit(1);}

MS=ms;

n=nn;

a=new int[MS];

for(int i=0;i<n;i++)a[i]=aa[i];

}

int Search(int x);      //从数组a的前n个元素中顺序查找值为x的第一个元素,//若查找成功则返回元素的下标,否则返回-1。};

类外定义:

int AA::Count(int x)

   {

       int i,c=0;

       for(i=0; i<n;i++)

           if(a[i]==x) c++;

       return c;

   }

选作题:

1.某班级学生进行百米跑测试,规定成绩在12秒以内(含12秒)为优秀,在12秒以上至15秒为达标,在15秒以上为不达标,编一程序,从键盘上输入每个人的成绩,以x作为输入变量,并以小

于0的任何数作为终止标志,分别用变量c1,c2和c3统计并输出成绩为优秀、达标和不达标的人数。

2.假定要求下面程序的输出结果为“11/15”,其主函数中存在着三行语句错误,请指出错误语句行的行号并改正错误行。

#include<iostream.h>

class Franction

{

int nume;

int deno;

public:

void FranSimp();Franction FranADD(const Franction&x);Void

InitFranction(){nume=0;deno=1;}Void InitFranction(int n,int d){nume=n;deno=d;}Void FranOutput(){cout<<nume<<’/’

<<deno<<endl;}};void main()//1行{//2行Franction a,b,c;//3行a.InitFranction(6,15);//4行b.InitFranction(1);//5行

c.initFranction();//6行c=FranAdd(a,b);//7行cout<<c.nume<<’/’<<c.deno<<endl;//8行}//9行错误行的行号为(1)、(2)和(3)。分别

改正为(4)、(5)和(6)。3.根据下面类中MaxMin函数成员的原型和注释写出它的类外定义。class AA{int*a;int n;int MS;public:void

InitAA(int aa[],int nn,int ms){if(nn>ms){cout<<"Error!"<<endl;exit(1);}MS=ms;n=nn;a=new int[MS];for(int i=0;i<n;i++)a[i]=aa

[i];}int MaxMin(int&x,int&y);//从数组a的前n个元素中求出//最大值和最小值,并分别由引用参数x和y带回,//同时若n大于0则返回1,否

则返回0。

};要求:1、不要互相抄袭,自己独立完成;2、另建一个文档作答,注意写好对应的题号;3、注意些好自己的名字与学号;4、元旦前将答案

上交至:dhy@zqu.edu.cn,或406434@qq.com,或hy.dai@live.cn

  • 5
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值