江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
2015年秋江苏省计算机二级VC++真题试卷

 

1.         下列移动通信技术标准中,中国移动通信集团公司(简称"中国移动")采用的第四代移动通信(4G)技术标准是_______

AWCDMA   

BTD-SCDMA

CTD-LTE   

DFDD-LTE

C

解析:中国移动4G的通信技术标准是TD-LTE

4

2.         二进制数(1010)与十六进制数(B2)相加,结果为__________ 

A . 八进制274

B. 八进制273 

C.八进制314 

D.八进制313

A

解析: 二进制1010转换为十进制是1*2^3+1*2^1=10,十六进制B2转换为十进制是11*16^1+2*16^0=178。所以是10+178=188188转换为8进制是除以8逆序取余法,所以是274八进制

1

3.         下列有关PC及其组成部件的叙述中,错误的是______

A.主板BIOS存储器和CMOS存储器都是易失性存储器,它们均由主板上的电池供电

B.芯片组是PC各组成部分相互连接和通信的枢纽,它是与CPU芯片及外设同步发展的

C.主板上所能安装的内存最大容量及可使用的内存条的类型在一定程序上由芯片组决定

D.作为高速缓冲存储器的cache通常是SRAM,主存储器通常是DRAM

A

解析:BIOS属于非易失性存储器,不需要供电。CMOS属于易失性存储器,需要由主板上的电池供电。

2

4.         目前广泛使用的打印机主要有针式打印机、激光打印机和喷墨打印机。下列有关这些打印机的叙述中,错误的是______

A9针的针式打印机是指打印头由9根钢针组成

B.激光打印机的主要消耗材料之一是炭粉/硒鼓

C.喷墨打印机与激光打印机的打印速度均用每分钟打印的页数来衡量

D.目前激光打印机均为黑白打印机,而喷墨打印机均为彩色打印机

D

解析: 激光打印机与喷墨打印机均有黑白与彩色打印机

2

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

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

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

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

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

D

解析:1个汉字是由两个字节构成的,且机内码都大于127,题目给出的机内码都是十六进制数表示的,转换为十进制后,CB,F5,D0,B4,CA,C7,D6,B8都是高于127的,因为两个字节构成一个汉字,所以是4个汉字,50,43转换为十进制后不高于127所以是2个西文。

3

6.         下列关于Microsoft Office软件(以2007/2010版本为例)功能的叙述中,错误的是_____

AWord具有中文简繁(体)转换功能

BExcel处理的数据可以来自Access数据库

CPowerPoint演示文稿可以设置为随机放映

D.在Access中,利用查询可以修改表中的数据

C

解析:PPT无法设置为随机放映。

6

7.         因特网中的IP地址可以分为A类、B类、C类、D类等。在下列4IP地址中,属于C类地址的是______

A. 28. 129. 200. 19   

B.88. 129. 200. 19

C. 188. 129. 200. 19   

D.222. 129. 200. 19

D

解析:IPv4地址中,共有4个数字,如果第1个数字<=127属于A类地址,如果第1个数字大于等于128且小于192的属于B类地址,如果第1个数字>=192且小于224的属于C类地址。所以选项A与选项BAIP地址,选项CBIP地址,选项DCIP地址。

4

8.         目前有线电视( CATV)系统已经广泛采用数字技术传输电视节目。下列是有关数字有线电视的相关叙述,其中错误的是______

A.数字有线电视采用光纤同轴电缆混合网,其主干线部分采用光纤连接到"小区"

B.数字有线电视网络依赖于时分多路复用技术

C.借助数字有线电视网络接人因特网,需要专用的Cable Modem或互动式机顶盒

D.借助数字有线电视网络接人因特网的多个终端用户共享连接段线路的带宽

B

解析: 数字有线电视网络依赖于频分多路复用技术

4

9.         目前Windows操作系统支持多种不同语种的字符集,即使同一语种(如汉语)也可有多种字符集。下列字符集中,不包括""""等繁体汉字的是_______

AGBK   

BBig5

CGB 2312   

DGB 18030

C

解析:GB2312是我国颁布的第1个汉字编码标准,不包括繁体汉字。

5

10.     由于采用的压缩编码方式及数据组织方式的不同,图像文件形成了多种不同的文件格式。在下列4种数字图像格式中,用数码相机、智能手机拍照时通常保存为____

ABMP格式   

BJPEG格式

CGIF格式   

DTIF格式

B

解析:BMP属于Windows程序设计使用的图像格式。JPEG属于压缩编码格式,GIF用于网页动画,TIF属于扫描仪或桌面出版格式。

5

 

 

1.         撤销一个对象时,系统会自动调用______

A.友元函数

B.缺省构造函数

C.析构函数

D.拷贝构造函数

C

解析:创建对象时自动调用构造函数,撤销一个对象时,自动调用析构函数。

7

2.         以下关于类的静态数据成员的描述中,错误的是______

A.说明静态数据成员时要在前面加上修饰符static

B.静态数据成员需要在类体外进行初始化

C.可以通过类名或对象名引用类的静态数据成员

D.静态数据成员不是所有对象共有的

D

解析: 静态数据成员是所有对象共有的

7

3.         设有语句序列"char  str[15]; cin> >str;",当输入为”Object windows programming!”时,数组str中保存的是____

A.  Object Windows Programming\0

B Object

C Object Windows

D.  Object Windows Programming!

B

解析: 通过cin输入时遇到空格,回车都认为输入结束,所以结果是Object。可以通过cin.getline(str,15)来获取前面的14个字符Object Windows赋值给变量str

5

4.         下列运算符中,不能被重载的是 _____

A.成员运算符

B[]

Cnew

D!=

A

解析:5个运算符不能被重载,包括 ., .*, ->*,::,?:5,其中 .属于成员运算符

8

5.         C++中,this指针____

A.必须显式声明

B.创建对象后,将指向该对象

C.属于某个成员函数

D.可以被静态成员函数使用

B

解析:this指针是隐含的,它明确地表示出了成员函数当前操作的数据所属的对象,当一个对象调用成员函数时,编译程序先将对象的地址复制给this指针,然后调用成员函数,每次成员函数存取数据成员时,则隐含使用this指针。

7

6[程序]

 #include<iostream.h>

void swap (int &a,int b)

{

    int temp;

    temp = a++ ;

    a=b++;

    b= temp;

    cout<<a<< ", "<<b<<endl;

}

void main( )

{

  int a=2,b=6;

  swap(a,b) ;

  cout<<a<<","<<b<<endl;

}

程序输出的第一行是_____________,  第二行是_____________

6,2@6,6  

解析: 因文字解析不如视频清晰,具体见视频详细讲解

6

7[程序]

程序输出的第一行是_____________,  第三行是_____________,  第五行是_____________

#include <iostream.h>

class S {

      int x;

public :

      void setx (int i){

          x=i;

         }

      int getx() {

           return x;

         }

};

void main() {

   S *p,sample[40] ;

   sample[0].setx(3) ;

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

     sample[i].setx(sample[i-1].getx()+1) ;

   }

   for(i=0; i<36; i+=7){

      p = sample+i;

      cout<<p->getx()<<endl;

   }

   cout<<endl;

}

3@17@31

解析: 因文字解析不如视频清晰,具体见视频详细讲解

7

8[程序]

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

#include <iostream.h>

class Sample {

protected :

   int x;

public :

       Sample(){

      x=0;

       }

    Sample(int val){

         x= val;

       }

    void operator++( ){

      x++ ;

       }

};

class Derived : public Sample{

   int y;

public :

  Derived():Sample(){

    y=0;

  }

  Derived(int val1,int val2) : Sample (val1){

     y = val2 ;

  }

  void operator--( ) {

      x-- ; y-- ;

  }

  void disp() {

     cout<<"x="<<x<<" y="<<y<<endl;

  }

};

void main ()

{

  Derived d(2,7);

  d.disp( ) ;

  ++d;

  d.disp();

  --d;

  --d;

  d.disp();

}

x=2 y=7@x=3 y=7@x=1 y=5

解析: 因文字解析不如视频清晰,具体见视频详细讲解

7

9[程序]

程序输出的第一行是_____________,   第二行是_____________

#include<iostream.h>

int c;

class A {

   int a;

   static int b;

public:

     A(){

       a=0;

       c=0;

        }

    void seta( ) {

       a++ ;

       }

    void setb( ) {

            b++ ;

}

void setc( ) {

               c++ ;

}

      void display( ) {

             cout<<a<< ","<<b<< ","<<c<<endl;

     }

};

int A::b=0;

void main ( )

{

     A a1,a2;

     a1.seta( );

     a1.setb( );

     a1.setc( );

     a1.display( ) ;

     a2.seta( ) ;

     a2.setb ( ) ;

     a2.setc( ) ;

     a2.display( ) ;

}

1,1,1@1,2,2 

解析: 因文字解析不如视频清晰,具体见视频详细讲解

7

【操作题】

10.完善程序

【题目】以下程序首先利用两个元素值递增的数组建立两条结点值递增的链表AB,然后将AB合并成链表CC中的结点值仍然保持递增。

程序输出为:

有序链表A结点值为:

1    5    8  12  15  18  20  25  30  60

有序链表B结点值为:

2    3    8  10  15  28  33  45  90

AB两有序链表合并后得到的有序链表C的结点值为:

1    2    3    5    8    8  10  12  15  15  18  20  25  28  30  33  45  60  90

[程序]

#include <iostream.h>

typedef  struct  Node {

   int data;

   Node *next;

 }*LinkList;

LinkList create(int *a,int n){

   LinkList p1,p2, head;

   int i=0;

   head =new Node;

   head->data = a[i++] ;

   p2 = head;

   while ( i<n){

     p1 = new Node;

     p1->data = a[i++] ;

     p2->next = p1 ;

     ______(1)______;

   }

   p2->next= NULL;

   return head;

}

void print( LinkList head)  {

     while(head) {

       cout.width (4)  ;

       cout<<head->data;

       ______(2)______;

        }

     cout<<endl;

}

void merge( LinkList A, LinkList B, LinkList &C){

      LinkList r;       

      C = NULL;

      while(A!=NULL && B!=NULL) {

        if(A->data<=B->data)  {

            if(C==NULL){

              C=A;

              r=A;

                     }

                     else {

               r->next = A ;

               r= r->next ;

                     }

           ______(3)______ ;

              }

              else {

         if( C == NULL){

          C=B;

          r=B;

               } else {

            r->next = B ;

         r = r->next;

               }

         B= B->next;

              }

         }

     if(B!=NULL)

       r->next = B ;

    else

      ______(4)______;

}

 

void main( )

{

  int a[ ] = {1,5,8, 12,15,18,20,25,30,60};

  int b[ ] = {2,3,8,10,15,28,33,45,90};

  LinkList A,B,C;

  int n = sizeof(a)/sizeof(int) ;

  A=create( a,n) ;

  n= sizeof( b)/sizeof( int);

  B =create(b,n);

  cout<< "有序链表A结点值为:\n ";

  print(A);

  cout<< "有序链表B结点值为:\n ";

  print(B);

  merge(A,B,C);

  cout<<" AB两有序链表合并后得到的有序链表C的结点值为:\n ";

  print(C);

}

【要求】

(1)打开T盘中的myfacpp文件,根据题目要求及程序中语句之间的逻辑关系对程序进行完善;

(2)完善后的源程序文件myfa.cpp必须保存在T盘的根目录下,供阅卷用。

p2=p1@head = head->next@A =A->next@r->next = A

 

(1)p2=p1

(2)head = head->next

(3)A =A->next

(4)r->next = A

 

解析: 因文字解析不如视频清晰,具体见视频详细讲解

6

11.改错题

【题目】以下程序的功能是:将数组看成环形结构,将数组中的元素循环移动k位。若k>0,则循环右移;若k<0,则循环左移;例如,对初始数组{23456789},若k=3,则循环右移3位后变为{78923456};对同样的初始数组,若k=-5,则循环左移5位也能得到相同的结果。

    正确程序的输入/输出结果如下(下划线部分为键盘输入):

    原数组:12345678910

    请输入一个整数k : 4

    原数组循环移动4位后变为:78910l23 ,4,5,6

    含有错误的源程序如下:

#include <iostream.h>

void move(int * a,int n)

{

  int p=a[n-1] ;

  for(int i=n-1; i>=0; i--)

    a[i]=a[i-1];

  a[i]=a[p];

}

void rotate(int a[],  int n,int k)

{

    int  i;

    if(k<0)

      k=n-k;

    k = k/n;

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

      move( a,n) ;

}

void output( int *a,int n) {

  for(int i= 0; i<n-1; i++)

    cout<<a[i]<<endl;

  cout<<a[i]<<endl;

}

void main()

{

    int a[]={1,2,3,4,5,6,7,8,9,10};

    cout<<"原数组:";

    output(a,10);

    cout<<"请输入一个整数k";

    int k;

    cin>>k ;

    rotate( a, 10, k);

    cout<<"原数组循环移动"<<k<<"位后变为:";

    output(a,10);

}

【要求】

(1)打开T盘中的myfb.cpp文件,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改;  

(2)改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型说明或编译预处理命令,但不能增加其他语句,也不能删除整条语句;

(3)改正后的源程序文件myfb.cpp必须保存在T盘的根目录下,供阅卷用。

for(int i=n-1; i>0; i--)@a[i]=p@ k=n+k@k=k%n

 

(1)for(int i=n-1; i>=0; i--)   修改为 for(int i=n-1; i>0; i--)  

(2)a[i]=a[p];   修改为a[i]=p;

(3)k=n-k;   修改为:k=n+k;  

(4) k = k/n;   修改为k=k%n;   4

解析: 因文字解析不如视频清晰,具体见视频详细讲解

6

12.编程题

【题目】设数组a派生出数组b的规则为 。其中,μ为数组an个元素的平均值; 为数组an个元素的方差;π=3.1415926;e=2.71828。试定义一个类Array,实现上述数组的派生。具体要求如下:

    (1)私有数据成员如下:

    ·double a[5]b[5]:数组a,派生数组b

    (2)公有成员函数如下:

    ·Array( double t[]int n):构造函数,用参数t的前n个元素初始化成员数组a

    ·double ave():计算并返回数组a中所有元素的平均值。

    ·double dat():计算并返回数组a中全部n个元素的方差。

    ·void fun():根据题意派生数组b。注:头文件math.h中函数double pow( double x

    double y)的返回值为xy次方。

    ·void print():输出成员数组。

    (3)定义数组并测试类Array

在主函数中定义一个数组,并使用该数组对类Array进行测试,要求输出原数组和派生数组。

    输出示例:

    原数组a

    6.1    2.6     15.8    4.3    1.72

    派生数组b

    0. 078 6135    0.0619398    0.0126703    0.0738    0.0541302

    【要求】

打开T盘中的myfc.cpp文件(空文件),编写后的源程序文件myfc.cpp必须保存在T盘的根目录下,供阅卷用。

 

答案

#include <iostream>

#include <math.h>

using namespace std ;               //1

class Array {

   double a[5] ,b[5] ;              //1

public:

   Array(double t[] ,int n)              //3

   {

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

       a[i]=t[i];

   }

   double ave()                  //3

   {

     double t=0;

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

        t+=a[i];

      return t/5;

   }

   double dat( ){                        //3

     double d=0,u;

     u=ave( );

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

       d+=(a[i]-u)*(a[i]-u);

     d = d/5 ;             

     return d;

   }

  void fun()                            //4

  {

   double pi= 3.1415926,e= 2.71828;

   double t1 =sqrt(2 * pi * dat()) ,t2;

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

     t2=-(a[i]-ave())*(a[i]-ave())/(2*dat());

     b[i] =pow(e,t2)/t1;

   }

  }

  void print(  )                          //3

  {

     int i;

     cout<< "原数组a:\n ";

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

       cout<<a[i]<<'\t';

     cout<<endl;

     cout<<"派生数组b:\n";

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

        cout<<b[i]<<'\t';

     cout<<endl;

  }

};

int main()                                 //4

{

  double  d[5] ={6.1,2.6,15.8,4.3,1.72};

  Array test(d,5) ;

  test.fun( ) ;

  test.print( ) ;

  return 0;

}