江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2009年春江苏省二级VC++考试试题与答案

绝密★启用前

       2009年春

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

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

            二级试卷   

    试卷语种:  Visual C++

  明:

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

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

3.计算机基础知识部分全部是选择题(20),程序设计部分分为选择题(10)和填空题(30)两种;   

4.选择题用答题卡答题。每一项有ABCD四个可供选择的答案,请选择其中一个你认为正确的答案,用HB铅笔涂写在答题卡的相应答题号内。每选对一项得1分,不选或选错不得分;

5.填空题用答题纸答题。请将答案用蓝、黑色钢笔或圆珠笔填写在答题纸的相应答题号内,每个答案只占一行,不得换行。每填对一个答案得1分,不填或填错不得分;

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

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

    第一部分计算机基础知识

1.  在下列有关现代信息技术的一些叙述中,正确的是    1   

  A.集成电路是20世纪90年代初出现的,它的出现直接导致了微型计算机的诞生

  B.集成电路的集成度越来越高,目前集成度最高的已包含几百个电子元件

  C.目前所有数字通信均不再需要使用调制解调技术和载波技术

  D.光纤主要用于数字通信,它采用波分多路复用技术以增大信道容量‘    .

2.  最大的10位无符号二进制整数转换成八进制数是    2    .

  A.1023    B.1777

  C.1000    D.1024

3.  在下列有关目前PCCPU的叙述中,错误的是    3  

    A.CPU芯片主要是由Intel公司和AMD公司提供的

    B."双核"是指PC机主板上含有两个独立的CPU芯片

    C.Pentium 4微处理器的指令系统由数百条指令组成

    D.Pentium 4微处理器中包含一定容量的Cache存储器

4.  在下列有关当前PC机主板和内存的叙述中,正确的是    4   

    A.主板上的BIOS芯片是一种只读存储器,其内容不可在线改写

    B.绝大多数主板上仅有一个内存插座,因此PC机只能安装一根内存条

    C.内存条上的存储器芯片属于SRAM(静态随机存取存储器)

    D.目前内存的存取时间大多在几个到十几个ns(纳秒)之间

5.  在下列有关PC机辅助存储器的叙述中,正确的是    5   

    A.硬盘的内部传输速率远远大于外部传输速率

    B.对于光盘刻录机来说,其刻录信息的速度一般小于读取信息的速度

    C.使用USB 2.0接口的移动硬盘,其数据传输速率大约为每秒数百兆字节

    D.CD-ROM的数据传输速率一般比USB 2.0还快

6.  在下列PCI/O接口中,数据传输速率最快的是    6   

    A.USB 2.0          B.IEEE-1394

    C.IrDA (红外)      D.SATA

 7.  计算机软件可以分为商品软件、共享软件和自由软件等类型。在下列相关叙述中,错误的是    7   

    A.通常用户需要付费才能得到商品软件的使用权,但这类软件的升级总是免费的

    B.共享软件通常是一种"买前免费试用"的具有版权的软件

    C.自由软件的原则是用户可共享,并允许拷贝和自由传播

    D.软件许可证是一种法律合同,它确定了用户对软件的使用权限

8.  人们通常将计算机软件划分为系统软件和应用软件。下列软件中,不属于应用软件类型的是    8  

    A.AutoCAD     B.MSN    C.Oracle      D.Windows Media Player

9.  在下列有关Windows 98/2000/XP操作系统的叙述中,错误的是    9   

    A.系统采用并发多任务方式支持多个任务在计算机中同时执行

    B.系统总是将一定的硬盘空间作为虚拟内存来使用

    C.文件()名的长度可达200多个字符

    D.硬盘、光盘、优盘等均使用FAT文件系统

10. 在下列有关算法和数据结构的叙述中,错误的是    10   

    A.算法通常是用于解决某一个特定问题,且算法必须有输入和输出

    B.算法的表示可以有多种形式,流程图和伪代码都是常用的算法表示方法

    C.常用的数据结构有集合结构、线性结构、树形结构和网状结构等

    D.数组的存储结构是一种顺序结构

11•因特网的IP地址由三个部分构成,从左到右分别代表    11   

    A.网络号、主机号和类型号

    B.类型号、网络号和主机号

    C.网络号、类型号和主机号

    D.主机号、网络号和类型号

12•在下列有关ADSL技术及利用该技术接入因特网的叙述中,错误的是    12   

    A.从理论上看,其上传速度与下载速度相同

    B.一条电话线上可同时接听/拨打电话和进行数据传输

    C.利用ADSL技术进行数据传输时,有效传输距离可达几公里

    D.目前利用ADSL技术上网的计算机一般需要使用以太网网卡

13.人们往往会用"我用的是10M宽带上网"来说明白己计算机连网的性能,这里的"10M"

  指的是数据通信中的    13    指标。

  A.最高数据传输速率

  B.平均数据传输速率

  C.每分钟数据流量

  D.每分钟IP数据包的数目

14•计算机局域网按拓扑结构进行分类,可分为环型、星型和    14    型等。

  A.电路交换

  B.以太  

  C.总线

  D.对等

15.网络信息安全主要涉及数据的完整性、可用性、机密性等问题。保证数据的完整性就是 15  

  A.保证传送的数据信息不被第三方监视和窃取

  B.保证发送方的真实身份

  C.保证传送的数据信息不被篡改

  D.保证发送方不能抵赖曾经发送过某数据信息

16.某计算机系统中,西文使用标准ASCII码、汉字采用GB2312编码。设有一段纯文本,其机内码为CB F5 DO B4 50 43 CA C7 D6 B8,则在这段文本中含有:  16   

    A.2个汉字和1个西文字符

    B.4个汉字和2个西文字符   

    C.8个汉字和2个西文字符

    D.4个汉字和1个西文字符

17.以下关于汉字编码标准的叙述中,错误的是   17   

    A.GB 2312标准中所有汉字的机内码均用双字节表示      

    B.我国台湾地区使用的汉字编码标准BIG 5收录的是繁体汉字

    C.GB 18030汉字编码标准收录的汉字在GB 2312标准中一定能找到

    D.GB 18030汉字编码标准既能与UCS(Unicode)接轨,又能保护已有中文信息资源

18.若波形声音未进行压缩时的码率为64kb/s,已知取样频率为8kHz,量化位数为8,那么它的声道数是    18   

  A.1    B.2   C.4 D.8 

19.从信息处理的深度来区分信息系统,可分为业务处理系统、信息检索系统和信息分析系统等。在下列几种信息系统中,不属于业务处理系统的是    19   

    A.DSS  B.CAI   C.CAM   D.OA

 20.在下列有关信息系统开发、管理及其数据库设计的叙述中,错误的是    20   

    A.常用的信息系统开发方法可分为结构化生命周期方法、原型法、面向对象方法和CASE方法等

    B.在系统分析中常常使用结构化分析方法,并用数据流程图和数据字典来表达数据和处理过程的关系

    C.系统设计分为概念结构设计、逻辑结构设计和物理结构设计,通常用E-R模型作为描述逻辑结构的工具

    D.从信息系统开发过程来看,程序

 

21.下列关于"for(e1;e2;e3) s1;"的描述中不正确的是______

A.存在"for(;;) s1;"的情况    B.表达式e1e3可为空,e2不能为空

C.表达式e2的值可增可减       D.循环体s1可以为空,但分号(;)必须有

22.下列函数定义中存在语法错误的是______

    Avoid f5();f6(){f5;cout<<200;} void f5(){cout<<100;}

    Bvoid f3(){cout<<100;} void f4(){tout<<200;}

    Cvoid f7(int a){if(a)f7(--a);cout<””;}

    Dvoid f1(){cout<<100;void f2(){tout<<200;}}   

23.设有说明语句;   

    int a=7,b=12,e;

  以下表达式选项中,e值为2的是_______

  Ae=b%=(a-a%5)    Be=b%=(a%=5)

  Ce=b%=b+1-a%5    De=(b%=a)-(a%=5)

24.以下叙述中不正确的是_____

  A.一个函数中可以有多个return语句  B.一个函数中可以没有return语句

  C.一个return语句可返回多个值      D.一个return语句可不返回值

25.以下双目运算符中要求两个操作数均为整型的运算符是______

    A||    B&&    C/   D %

26.以下对break语句的描述中,不正确的是______

  Abreak语句可用在循环语句中,其作用是结束本层循环的执行

  Bbreak语句可用在switch语句中,其作用是结束该switch语句的执行

  Cbreak语句可用在if语句中,其作用是结束该if语句的执行

  Dbreak语句在同一循环体中可以多处使用

27.以下对类的析构函数的叙述中,正确的是______

  A.析构函数完成类的初始化   

  B.析构函数完成对象的初始化

  C.析构函数完成撤销对象的相关处理

  D.析构函数和成员函数一样可以显式地调用   

28.以下有关多态性的叙述中不正确的是________

    AC++语言的多态性分为编译时的多态性和运行时的多态性

    B.编译时的多态性通过重载函数来实现

    C.运行时的多态性通过虚函数来实现

    D.函数重载和虚函数均可实现编译时的多态性和运行时的多态性

29.设已定义了一个类名为MyClass的类:

    MyClass sl*s2**s3*s4 E2];

    当该语句执行后,调用该类的构造函数的次数是 _______

    A1    B2    C3    D.5

 30.在公有派生的情况下,派生类中定义的成员函数能访问其基类的_________

    A.公有成员和保护成员    B.公有成员和私有成员

    C.保护成员和私有成员    D.公有成员、保护成员和私有成员

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

●基本概念题(5)

1.以下循环语句的循环体的执行次数为  ( ) 

      for(int s=0,j=1;j<=10;s+=j);j++;

2void类型的指针是其指向变量的数据类型是不固定的,对该类型指针进行操作时,通常应进行________

3.C++变量的存储类型有自动类型、静态类型、 _________________

4.c++函数的参数传递方式有三种:  (_________)  、指针传递和引用传递。

●阅读程序题(13)

5.[程序](2)

    #include

    void fa(int&a,int&b)

    {int t=a;a=b;b=t;}

    void fb(int a,int b)

    {  int t=a;a=b;b=t;}   

    void main(void)

    {int c[2]={100,200},d[2]={300,400};

    fa(c[0],c[1]);    cout<

    rb(d[0],d[1]);    cout<

    }   

    程序输出的第一行是(   )  ,第二行是(  )

6.[程序](2)

    #include   

    void main(void)

    {  int n=0,m=0;

    for(int i=0;i<3;i++)

      for(int j=0;j<3;j++)

        if(j>=i)n++;m++;

    cout<

    }.

  程序输出的第一行是(   )  ,第二行是(   ) 

7.[程序](2)

    #include

    int a=10;

    void main(void)

    {  int a=20,b=30;

        { int a=0,b=0;

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

              a=a+b;b=::a+b;

           }

          cout<程序输出的第一行是  (  )  ,第二行是(  ) 

8.[程序](3)  

    #include

    void f2(int x[],int n);   

   

    void fl(int x[],int n)   

    {  cout<

       x[n]++;

       if(n<3){n=n+2;f2(x,n);}

    }   

    void f2(int x[],int n)

    {cout<

     x[n]++;

    if(n<3){n=n+3;fl(x,n);  }

    }

    void main(void)

    {int y[7]={3,4,5,6,7,8,9};

     f1(y,0);

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

    cout<   

    }

    程序输出的第一行是(  )  ,第二行是(  )  ,第三行是( )

  9[程序](2)  

    #include

    class A{

        int n;

    public:

        static int s;

        A(int a){n=a;}

        void add(){s+=n;}

        void print(){cout<

        int get(){return n;}

    };

    int A::s=0;

    class B:public A{

          int y;

    public:

        B(int b,int c):A(c){y=b;}

        void p(){cout<

    };

    void main(void)

    {  A a1(10),a2(20);

       B b1(5,15),b2(10,15);

       a1.add();a2.add();b1.add();b2.add();

       a1.print();a2.print();

       b1.p();b2.p();

    }

    程序输出的第一行是(  )  ,第三行是(  )

    10[程序](2)

    #include

    class A{

         int x;

    public:

       A(int a){x=a;}

       virtual void print(){cout<<"x="<

       void fun(){print();}

    };

    class B:public A{

          int y:

    public:

         B(int a,int b):A(a){y=b;}   

         void print(){cout<<"y="<    }

         void fun(){print();}

    };

    class C:public B{

          int z;  

    public:

          C(int a,int b,int C):B(a,b){z=c;}

          void print(){cout<<"z="<    }

          void fun(){print();}

    };

    void main(void)

    {  A a1(5),*p1;  

       B bl(10,15);   

       C c1(20,30,40);  

       a1.fun();b1.fun();c1.fun();  

       pl=&b1;  pl->fun();p1=&c1;pl->fun();

    } 

  程序输出的第四行是()  ,第五行是( )

●完善程序题(12)  

11.以下程序的功能是:采用插入排序的方法将数组s1中的元素升序排序,并删除重复的元

  (值相同的元素只保存一个)。函数insert(int p[],int c,int x)将整数x插入到已排序

  的数组P(并仍保持升序),参数c为数组P的元素个数。函数sort(int s[],int n)将数

  s中的数据按升序排序。先将s[0]放到临时数组tern[0],然后,依次从s中取一个

  元素,若该元素不在数组tem,则调用函数insert()将该元素插入到数组tern中。最后

  将数组tem拷贝到数组s中。

  [程序](4)

    #include

    void insert(int p[],int c,int x)

    {  for(int i=0;i

          if(p[i]>x)break;

          if(i==c)_____________;   

          else{for(int J=c;j>i;j--)p[j]=P[j-1];________;}

    }

    int sort(int s[],int n)

    {int tem[200];  

     int len,j,k;

     tem[O]=s[O];

     len=1    //len记录数组tern中的元素个数

     for(j=1;j

      for(k=0;k

        if(s[j]==tem[k])_____________;

     }

     if(k>=len){

        insert(_________);len=len+1;

        }

    }

    for(j=0;j

    retum len;    //返回数组的大小

    }   

    void main(void)

    {int s1[200]={34,22,11,55,66,30,22,100,66};

    int n;n=sort(s1,9);

    for(int i=0;i

    cout<<'\n';

    }   

12.以下程序通过重载运算符+*实现集合(用数组表示)的并(u),(n)运算。集

  的元素不能相同。两个集合的并包含了两个集合的所有元素。两个集合的交仅包含

  集合中共同存在的元素。设sl={1,2,3,4,5,6},s2={3,5,7,9,11}s1 u s2={1,

  4,5,6,7,9,11},s1 n s2={3,5}

  [程序](4)

    #include

    class Set{

          float x[20];

          int size;

    public:

         int In(float e,int n)    //元素e已在集合x,则返回1,否则返回0

         {  int flag=0;

           for(int i=o;i

           return flag;

         }

         Set(float a[],int n)   

  {  x[0]=a[0];size=1;

    for(int i=1;i

       if(In(a[i],size)==0){

       (________)  ;

       size++;

       }

  }

    Set(){size=0;}

    Set operator +(Set);

    Set operator *(Set);

    Set &operator =(Set&);

    int GetSet(float y[])

    { for(int i=0;i

      return size;

    } 

    void print()

    {  for(int i=0;i

       cout<<'\n'<<"size=”<

    };

}

Set Set::operator +(Set a)

{   Set tem; 

    for(int i=0;i  ______;

    tem.size=size;

    for(i=0;i

    if(tem.In(a.x[i]i,tern.size)==0)tem.x[tem.size++]=a.x[i];

    return tem;

}

Set Set::operator *(Set a)

{  Set tem;

  tem.size=0;

  for(int i=0;i

    if(a.In(x[i],a.size)==1)

    tem.x[tem.size++]=x[i];

    retum tem;

}    Set &Set::operator =(Set &a)

    {for(int i=0;i   

    (__________)  ;  

    return *this;

    }

    void main(void)

    {float b1[6]={1,2,3,4,5,6};

    float b2[6]={3,5,7,9,11},b3[6];

    Set a1(b1,6),a2(b2,5),a3,a4,a5;   

    a3=a1+a2;a3.print();  

    a5=a1*a2;a5.print();  

    int n=a1.GetSet(b3);

    for(int i=0;i

    cout<<'\n'<

    }

13,以下程序的功能是:先产生一条带头结点(链表的第一个结点不存储数据,而是存储链表的

  表长,即结点个数)的无序链表,每一个结点包含一个整数。然后将该链表分成两条带头结

  点的链表:_条链表上的数据均为偶数,另一条链表上的数据均为奇数。函数Cleate()创建

  了一条带有头结点的单链表。函数Print()输出链表上各结点的值。函数Split()把链表

  分割成两条链表,值为奇数的结点保留在原链表上,值为偶数的结点移到另一个链表中,

  并将指向偶数链表的头指针返回。 

  [程序](4)   

    #include

    struct Node{

    int data; 

    struct Node *next;

    };

    Node *Create(void)    //创建一条带有头结点的单向链表

    {  Node *p1,*head;

       int a;    //创建头结点,头结点的数据域储存链表的结点个数

       head=new Node;

       head->data=0;head->next=0   

       cout<<"创建一条无序链表,请输人数据,-l结束,\n";

       cin>>a;

       while(a!=-1){

        p1=new Node;

    pl->data=a;pl->next=head->next;

    _________;  

    head->data++; 

    cin>>a

  }   

    (___________)    ;

}

void Print(Node *h)

{ h=h->next;

  while(h){eout<data<<" ";h=h->next;}

  cout<

}

Node *Split(Node *&link)  //link-个带头结点的单链表

{Node *pl=link*p2=link->next*head;

  head=new Node;

  head->data=0;head->next=0;

  while(p2){

    if(p2->data%2==O){

      p1->next=p2->next;link->data--;

      p2->next=head->next;

      __________  ; 

      head->data++;    p2=p1->next;

    }

    else{pl=p2;  ___________;}

  }

  return(head);

}

void main(void)

{  Node *h1,*h2;

   hl=Create();    cout<<"输入的链表为:"<

   Print(h1);

   h2=Split(h1);  cout<<"分割后的奇数链表为:"<

   Print(h1);    cout<<"分割后的偶数链表为:"<

   Print(h2);

}

 

 

一、选择题 
21.B 22.D 23.A 24.C 25.D 26.C 27.C 28.D 29.A 30.A
(1)无数次   (2)强制类型转换    (3)外部类型
(4)寄存器类型  (5)值传递  (6)200  100
(7)300 400    (8)6    (9)1
(10)30   30  (11)20 30   (12)3
(13)5    (14)8    (15)10   60
(16)15 60  5    (17)15    (18)40
(19)p[c]=x或p[i]=x (20)p[j]=x或p[i]=x   (21)break
(22) tem,len,s[j]  (23)x[i]==e   (24)x[size]=a[i]
(25)tem.x[i]=x[i]    (26)  size=a.size    (27) head->next=p1
(28)retum head    (29)head->next=p2     (30)p2=p2->next