江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2010秋江苏省二级C++考试真题

    绝密★ 启用前

2010年秋

江苏省高等学校非计算机专业学生

计算机基础知识和应用能力等级考试

二级试卷

试卷语种:C++语言

 

  明:

1.本试卷包括计算机基础知识部分和程序设计部分,考试时间共12 0分钟;

2.本试卷满分为60分,分选择题和填空题,试卷不分AB类型;

3.计算机基础知识部分全部是选择题(20),程序设计部分分为选择题(1 0

  )和填空题(30)两种;

4.选择题用答题卡答题。每一项有ABCD四个可供选择的答案,请选

  择其中一个你认为正确的答案,用HB铅笔涂写在答题卡的相应答题号内。

  每选对一项得1分,不选或选错不得分;

5.填空题用答题纸答题。请将答案用蓝、黑色钢笔或圆珠笔填写在答题纸的

  相应答题号内,每个答案只占一行,不得换行。每填对一个答案得1分,

  不填或填错不得分;

6.请认真填写并仔细核对答题卡和答题纸上的学校名称、准考证号和姓名是

  否填写正确。

7.考试结束时将试卷、答题卡和答题纸放在桌上,不得带走。待监考人员收

  毕清点后,方可离场。

 

第一部分  计算机基础知识

  1.微电子技术是信息技术领域中的关键技术,它以集成电路为核心.下列有关集成电路的叙述中,错误的是 ___(1)___  

    A.  现代集成电路使用的半导体材料只能是硅(Si),不能使用其它任何半导体材料

    B.  集成度是指集成电路包含的电子元件数目,可分为SSIMSIVLSI

    C.  Moore定律指出,单块集成电路的集成度平均18--24个月翻一番

    D.  我国第二代身份证中嵌入了集成电路芯片,可以实现电子防伪和数字管理功能

  2.  数据传输速率是数据通信中重要的性能指标。Gb/s是数据传输速率的计量单位之一,其正确含义是 ___(2)___  

    A.每秒兆位

    B.每秒千兆位

    C.每秒百兆位

    D.每秒百万位

  3.  所谓"变号操作"是指将一个整数变成绝对值相同但符号相反的另一个整数。假设使用补码表示的8位整数x=10010101,则经过变号操作后结果为___(3)___.

    A.01101010

    B.00010101

    C.11101010

    D.01101011

  4.  下列有关PC机主板的叙述中,错误的是 ___(4)___  

    A.  主板的物理尺寸没有标准,各厂家均可自行定义

    B.  主板上包含芯片组,它是PC机各组成部分相互连接和通信的枢纽

    C.  主板上包含BIOSCMOS芯片

    D.  主板上包含CPU插座、内存条插槽及其它类型的插槽

  5.  下列有关PC机中央处理器(CPU)和内存(内存条)的叙述中,正确的是 __(5)____   .

    A.PC机所采用的CPU都是Intel公司生产的Pentium系列芯片,其它厂商生产的

    CPU都与之不兼容

    B.  目前已有双核的微处理器(例如Core 2 Duo),但还没有四核的微处理器

    c.  通常来说,DRAM的速度比SRAM的存取速度慢

    D.  一般来说,一个内存条上仅有一个DRAMSRAM芯片

6.  下列有关PCI/O总线与I/O接口的叙述中,错误的是 __(6)____   .

    A.  目前PC机中协调与管理总线操作的总线控制器包含在主板上的芯片组中

    B.  总线最重要的性能是数据传输速率,其单位通常为MB/sGB/s

    C.  SATA接口的数据传输速率通常低于USB 2.0的数据传输速率

    D.  USB连接器有4个引脚,其中一个引脚连接+5V电源

7.  下列有关PC机常用I/O设备的叙述中,错误的是__(7)____

    A.  目前台式机键盘通常有一百零几个按键,笔记本电脑的键盘有八十几个按键

    B.  目前流行的鼠标是光电鼠标,其与主机的接口有PS/2USB两种

    C.  宽屏LCD显示器的宽高比为1691610

    D.  打印速度是打印机的重要性能指标,速度单位通常为dpi

8.  下列有关PC机外存储器的叙述中,错误的是___(8)___   

  A.  目前硬盘的盘片大多为3.52.51.8英寸,一个硬盘中可有一个或多个盘片

  B.  目前有些u盘可以模拟硬盘和光盘存储器启动操作系统

  C.  目前光盘存储器主要分为CDDVDBD三种,它们均采用红外激光进行读写

  D.  目前光驱的速率通常用多少倍速表示

9.  下列有关计算机软件的叙述中,错误的是___(9)___.

  A.  软件一般是指程序及其相关的数据和文档资料   

  B.  从软件的用途考虑,软件可以分为系统软件和应用软件,主要的系统软件有操作系统、语言处理系统和数据库管理系统等。   

  C.  从软件的权益来考虑,软件可以分为商品软件、共享软件和自由软件,共享软件和自由软件均为无版权的免费软件

  D.Linux是一种系统软件、自由软件

10.到目前以止,Windows系列操作系统已推出多个版本。在下列版本中,最新的Windows

  版本是___(10)___

  A.  Windows7   B.  Windows Me  C.  Windows XP    D.  Windows Vista

11.下列有关Windows XP操作系统功能的叙述中,错误的是___(11)___.

    A.  系统通过"时间片”轮转策略支持多任务处理 

    B.  系统利用SPOOLing技术进行存储管理

    C.  在设备管理中引入了缓冲技术,以减少I/O操作的等待时间

    D.  系统支持PnP功能,并按ACPI标准进行电源管理

12.在因特网中某台主机的IP地址为20.25.30.8,子网掩码为255.255.255.0,那么该主机

  的主机号为  ___(12)___ 

  A.  20   B.  25    C.  30   D.  8

13.局域网中需要传输的数据必须预先组织成若干数据帧,每一数据帧的格式如下图所示:

上图中最末部分"?”表示的是___(13)___   

发送计算机地址

目的计算机地址

编号

有效载荷

  ?

A.协议信息

B.校验信息

C.冗余信息

D.结束标志

14.目前网络用户接入因特网有多种方式,例如ADSLHFC等。通过HFC接入因特网时采用的网络是___(14)____

    A.  有线电话网   B.  有线电视网   C.  无线局域网    D.  移动电话网

15.下列网络协议中,直接与电子邮件传输相关的网络协议是___(15)___

    A.FTP   B.SMTP    C.TELNET     D.NNTP

16.下列有关计算机中文本与文本处理的叙述中,错误的是 ___(16)____ 

    A.  西文字符主要是采用ASCII字符集,基本ASCII字符集共有256个字符

    B.  我国最早采用的汉字字符集是GB2312,包含6000多个汉字和若干个非汉字字符

    C.  无论采用何种方式输入汉字,在计算机中保存时均采用统一的汉字内码

    D.  简单文本和丰富格式文本中字符信息的表示相同,区别在于格式信息的表示

17.彩色图像所使用的颜色描述方法称为颜色模型(即颜色空间)。下列四种颜色模型中,

    彩色喷墨打印机使用的是___(17)___.

    A.  RGB   B.  HSB    C.  YUV    D.  CMYK

 18.文件的扩展名用于标记文件的类型,用户应该尽可能多地知晓各类文件的扩展名,

    列文件中,属于数字声音的文件是______

    A.  ABC.RM

    B.  ABC.WMA

    C.  ABC.MKV

    D.  ABC.SWF

 19.信息系统软件开发瀑布模型包括系统规划、系统分析、系统设计、系统实施和系统维

    护等几个阶段。下面各项工作中,属于系统实施阶段的是___(19)___

    A.问题定义

    B.可行性研究

    C.系统测试

    D.绘制E-R

20.下列有关Micmsoft Word 2003Microsoft Excel 2003软件的叙述中,错误的是___(20)___

    A.  利用Word软件编辑文档,可以将其保存为TXTDOCRTFHTM格式文件

    B.  利用Word软件编辑文档时,可以统计选定文本的字符数

    C.  Excel软件中,可以打开(导入)TXTDBFHTML格式的文件(数据)

    D.  Excel文件可以设置打开权限密码,但不可以单独设置修改权限密码

 

第二部分  C++语言程序设计

一、选择题(用答题卡答题,答案依次填在21--30答题号内)

21.对于fordowhile循环语句,以下描述正确的是___(21)___

  A.for语句中的循环体至少执行一次            B.两个语句中的循环体可能都不执行

  C.do...while语句中的循环体至少执行一次     D.两个语句中的循环体至少执行一次

22.设有说明语句;int hh[4]={2,3,4},*p=hh;则以下选项中存在语法错误的是___(22)___

  A.p++;    B.hh++;    C.(*p)++; D.(*hh)++

23.以下说明语句中,不存在语法错误的是___(23)___ 

  A.int s=26,this=30;         B.int _s1=25,-s2=100;

  C.int n;cin>>n;int arr[n];  D.char str[]={"I am a student"};

24.设有语句;int a=10,b=20,c=30;则执行语句;cout<<(a,b,c);其输出结果是___(24)___

  A.10    B.20    C.30   D.10,20,30

25.以下关于运算符重载的叙述中,正确的是___(25)___ 

    A.c++已有的任何运算符都可以重载    B.可以重载C++中没有的运算符

    C.运算符重载时可改变其优先级       D.运算符重载时可改变其实现的功能

26.设有函数原型说明;float *f(int,float);,则函数f的返回值为___(26)___    .

    A.一个实数    B.指向一个实数的指针  C.该函数的地址 D.指向一个函数的指针

27.下列有关构造函数的叙述中,不正确的是___(27)___ .

    A.可以定义没有构造函数的类    B.任何一个类必定有构造函数

    C.类的构造函数可以重载        D.构造函数没有返回值

28.下列有关类成员的叙述中,不正确的是___(28)___     

    A.当不指定类成员的访问权限时则为私有成员   B.友元函数可访问类中的任一成员

    C.指定为public的成员不允许在类外访问      D.成员函数可访问类中的任一成员

29.以下关于类和对象的叙述中,不正确的是___(29)___   .

    A.不同的类可以产生相同类型的对象    B.类是一种类型,它定义了数据和操作

    C.对象是类的实例                    D.任一对象必属于某一个类

30.以下关于指针运算的叙述中,不正确的是___(30)___

    A.可以将NULL赋给任一指针变量

    B.两个同类型的指针变量可进行相等或不等的比较运算

    C.指针变量的值加上整常数n,可使该指针指向当前元素后的第n个元素

    D-指向同一数组的两个指针变量,在任何情况下,两指针变量相减都是无意义的

二、填空题(请将答案填写在答题纸的相应答题号内,每个答案只占一行)

●基本概念题,5

1.每一个类均有构造函数和析构函数,这两个函数中不可以定义为虚函数的是___(1)___  

2.定义了宏;#define F(x,y,z)  x/y*z

  执行语句;b=F(3+4,2+2,4+4);后变量b的值为___(2)___

3.函数重载和运算符重载实现的多态性属于___(3)___多态性.

4.为使函数不返回任何值,定义函数时应在函数名前加保留字(关键字)___(4)___    .

5.C++存储类型的四种说明符分别是;auto,static,extern___(5)___  

●阅读程序题,13

6.[程序]  (2)

  #include <iostream.h>

  void main(void)

  {

    int c2,c3,c5,m=20;

    c2=c3=c5=0;

    for(int i=1;i<=m;i++){

      if(i==15 || i==14)continue;

    if(i%2==0) c2++;

    if(i%3==0) c3++;

    if(i%7==0) c5++;

    }

    cout<<c2<<endl<<c3<<endl<<c5<<endl;

   }   

    执行程序后输出的第一行是___(6)___,  第三行是___(7)___

7.[程序]  (2)

  #include<iostream.h>

  int f(int a,int &b,int *c)

  {

    a+=b;  b+=*c;*c+=a;

    return  (a+b+*c);

  }

  void main(void)

  {

    int x=5,y=5,z=6,sum;

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

      sum=f(x,y,&z);

      cout<<x<<'\t'<<y<<'\t'<<z<<'\t'<<sum<<'\n';

    }

  }

    执行程序后输出的第一行是___(8)___,第二行是___(9)___

8.[程序]  (2)

  #include <iostream.h>

  void f(int s[],int *y)

  {

    static int t=3;

    *y=s[t];

    s[t]*=2;

    t--;

  }

  void main(void)

  {

    int a[]={1,2,3,4},i;

    int x=0;

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

      f(a,&x);

      cout<<x<<endl;

    }

    for(i=0;i<4;i++) cout<<a[i]<<'\t';

    cout<<'\n';

  }

    执行程序后输出的第二行为___(10)___,最后一行为 ___(11)___

9.[程序](3)

    #include<iostream.h>

    void f(int x,int y)

    {  

      char res[10]={0};

      int i=0,rem;

      do{

         rem=x%y;

         x=x/y;

         if(rem<10) res[i]='0'+rem;else res[i]='A'+rem-10;

         i++;

        }while(x!=0);

        i--;

        for(;i>=0;i--) cout<<res[i];

        cout<<endl;

    }

    void main(void)

    {

      f(23,10);

      f(45,8);

      f(50,16);

    }

    执行程序后输出的第一行是___(12)___,第二行是___(13)___,第三行是___(14)___.

10.[程序]  (2)

  #include <iostream.h>

  char st[]="Your friend!";

  void f2(int );

  void f1(int i)

  {

    cout<<(st+i)<<endl;

    if(i<3){

      i+=2;

      f2(i);

    }

  }

  void f2(int i)

  {

    cout<<st[i]<<endl;

    if(i<3){

       i+=2;

       f1(i);

    }

  }

  void main(void)

  {

    int i=0;

    f1(i);

  }

    执行程序后输出的第一行是___(15)___,第二行是___(16)___.

11.[程序](2)

  #include<iostream.h>

  class A{

    public:

        A(char *s){cout<<s<<endl;}

        A(){ };

    };

    class B:public A{       //L1

    public:

        B(char *s1,char *s2):A(s1)

        { cout<<s2<<endl;}

    };

    class C : public A{      //L2

    public:

        C(char *s1,char *s2):A(s1)

        {  cout<<s2<<endl;}

    };

    class D:public B,public C{

    public:

        D(char *s1,char *s2,char *s3,char *s4):B(s1,s2),C(s1,s3)

        {    cout<<s4<<endl;}

    };

    void main(void)

    {

       D *ptr= new D("students","study","C++","hard");

       delete ptr;

    }

    执行程序后共输出___(17)___.

    若分别将L1行改为;class B : virtual public A{       //L1

    L2行改为:class C:virtual public A{    //L2

    则执行程序后共输出___(18)___行。

●完善程序题,12

12.以下程序的功能是;从键盘上输入一个大于等于3的整数,将其分解为质因子的乘积并输

.例如,输入50,则输出;50;2*5*5;输入45,则输出;45=3*3*5;输入37.则出;37=37.

    [程序]  (4)

    #include <iostream.h>

    int prime(int x)  //求大于x的最小质数(素数)

    {

      int flag=1;

      x++;

      while(___(19)___){

         int i=2;

         while(i<x){

           if(___(20)___)break;

           i++;

         }

         if(i<x)x++;else flag=0;

      }

    return x;

    }

    void f(int n)  //n分解为若干个质数之积

    {

      int flag=1;

      int i=2;      //保证i为质数

      do{

         while(___(21)___){

            if(flag==1){

                cout<<i;

                flag=0;

            }

            else cout<<'*'<<i;

            n=n/i;

         }

        ___(22)___

      }while(i<n);

      if(n!=1)

        if(flag==1) cout<<n;else cout<<'*'<<n;

    }

    void main(void)

    {

     int x;

    do{

     cout<<"请输入一个整数,若小于3则重输;";

     cin>>x;

    }while(x<3);

    cout<<x<<'=';

    f(x);

    cout<<endl;

   }

13.以下程序的功能是:实现两个字符串拼接,函数strcat(char *s1,char *s2)先将s1所指向的字符串拷贝到s所指向的动态申请的存储空间,接着将s2所指向的字符串拼接s所指向的字符串后面,函数返回拼接后的字符串。

    [程序](4)

    #include <iostream.h>

    char *strcat(char *s1,char *s2)

    {

      char *s,  *p,  *q;

      int len1=0,len2=0;

      p=s1;

      while(*p!='\0'){

        len1++;

        p++;

      }

      p=s2;

      while(*p!='\0'){

        len2++;

        p++;

      }

      s=q=___(23)___ ;

      p=s1;

      for(int i=0;i<len1;i++)*q++=*p++;

      p=s2;

      while(___(24)___);

        ___(25)___

    }

    void main(void)

    {

      char s1[]="visual";

      char s2[]="is esay";

      char *s;

      s=___(26)___;

      cout<<s<<endl;

      delete []s;

    }  

14.下面程序的功能是;将两个有序链表(降序捧序)合并为一个有序链表,函数merge(node *h1,node *h2)将由h1h2分别指向的己排序的两个链表,合并为一个依然有序的链表。注意;对于数据大小相同的结点,都要保留在合并后的链表上。主函数产生两条已降序排序的链表,并输出合并后链表上的数据值.

  例如,原链表上各结点的数据依次为;

  h1:15,9,8,7,3

  h2:15,12,10,7,3,2

  合并后得到的新链表为;15,15,12,  10,9,8,7,7,3,3,2

  【程序](4)

  #include<iostream.h>

  struct node{

    int data;

    node*next;

   };

    node *merge(node *h1,node *h2)

    {

     if(h1==NULL) return h2;

     if(h2==NULL) return h1;

     node *h=NULL;

     if(___(27)___){

        h=h1;

        h1=h1->next;

     }

     else{

         h=h2;

         h2=h2->next;

     }

     node *p=h;

     while(___(28)___){

       if(h1->data >=h2->data){

         p->next=h1;

         p=h1;

         h1=h1->next;

       }

       else{

           p->next=h2;

           p=h2;

           h2=h2->next;

       }

    }

    if(h1 !=NULL) ___(29)___;

    else   

        if(h2!=NULL) p->next=h2;

    return h;

}

void main(void)

{

  node a[5]={{15},{9},{8},{7},{3}};

  node b[6]={{15},{12},{10),{7},{3},{2}};

  node *h,*h1,*h2,*p;

  int i;

  h1=a;

  h2=b;

  for(i=0;i<4;i++) a[i].next=&a[i+1];    //形成a链表

  a[4].next=NULL;

  for(i=0;i<5;i++) b[i].next=&b[i+1];  //形成b链表

  b[5].next=NULL;

  ___(30)___   ;

  p=h;

  while(p){

    cout<<p->data<<'\t';

    p=p->next;

  }

  cout<<endl;

}

 

答案:

1.A 2.B 3.D 4.A 5.C 6.C 7.D 8.C 9.C 10.A

11.B 12.D 13.B 14.B 15.B16.A 17.D 18.B 19.C 20.D

(21)C (22)B (23)D (24)C (25)D (26)B (27)A (28)C (29)A (30)D

:填空

(1)构造  (2)17  (3)编译 (4)void (5)register

(6)9  (7)1 (8)5 11 16 37 (9)5 27 32 75

(10)3 (11)2 4 6 8 (12)23 (13)55 (14)32 (15)Your friend!

(16)u (17)5 (18)3 (19)flag (20)x%i==0 (21)n%i==0 (22)i++

(23)new char[len1+len2+1] (24)*q++=*p++ (25)return s

(26)strcat(s1,s2) (27)h1->data>h2->data (28)h1!=0 && h2!=0

(29)p->next=h1  (30)h=merge(h1,h2)