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

江苏省高等学校计算机等级考试
二级Visual C++考试(样卷)
(本试卷完成时间  120分钟)

 

本套试卷的视频讲解见:http://school.njwww.net/kecheng/detail_921575


第一部分  计算机信息技术基础知识
选择题(共20分,每题2分)
1.下列关于数字技术与微电子技术的叙述中,错误的是______ 。
A.数字技术的处理对象是"比特",一个触发器可以存储2个比特
B.在数据通信时,远距离传输或者无线传输时需要用比特对载波进行
C.现代集成电路使用的半导体材料主要是硅
D.我国第2代居民身份证中使用了非接触式IC芯片
2.下列关于台式PC芯片组的叙述中,错误的是______ 。
A.芯片组是主板上最为重要的部件之一,存储器控制、I/O控制等功能主要由芯片组实现
B.芯片组与CPU同步发展,有什么样功能和速度的CPU,就需要使用什么样的芯片组
C.芯片组决定了主板上能安装的内存最大容量及可使用的内存条类型
D.同CPU一样,用户可以很方便、很简单地更换主板上的芯片组
3.下列关于I/O设备的叙述中,错误的是______。
A.目前平板电脑、智能手机的触摸屏大多为"多点触摸屏",可同时感知屏幕上的多个触控点
B.扫描仪可分为手持式、平板式和滚筒式等类型,目前普通家用/办公用扫描仪大多为滚筒式
C.目前一些型号的数码相机已具有拍摄视频和进行录音的功能
D.为了降低成本,目前许多PC采用集成显卡,其显示控制器被集成在芯片组中
4.下列关于PC外存储器的叙述中,错误的是____。
A.目前PC采用的硬盘,其盘片的直径通常为3.5英寸、2.5英寸或1.8英寸
B.U盘和存储卡都是采用闪烁存储器制作的,目前其容量大多为几GB至几十GB
C.目前固态硬盘的存储容量大多为数百GB,但其读写速度远不如传统硬盘(硬磁盘)
D.蓝光光盘是目前最先进的大容量光盘,单层盘片的存储容量可达25GB
5.下列关于Windows操作系统功能的叙述中,错误的是______。
A.对于多任务处理,系统一般采用按时间片轮转的策略进行处理器调度
B.系统采用了虚拟存储技术进行存储管理,其页面调度算法为"最近最少使用"( LRU)算法
C.系统支持多种文件系统(如FAT32、NTFS、CDFS等)以管理不同的外存储器
D.系统支持任何I/O设备的"即插即用"和"热插拔"
6.下列关于程序设计语言的叙述中,错误的是____。
A.虽然机器语言不易记忆、机器语言程序难以阅读和理解,但目前还有很多人使用其编写程序
B.汇编语言与计算机的指令系统密切相关,不同类型的计算机,其汇编语言通常不同
C.VBScript语言是VB的子集,用其编写的程序可以嵌入在HTML文档中以扩充网页的功能
D.Java语言是一种适用于网络环境的程序设计语言,目前许多手机软件就是用Java编写的
7.下列关于通信技术的叙述中,错误的是______。
A.调制与解调技术主要用于模拟通信,在数字通信中不需要使用调制与解调技术
B.使用多路复用技术的主要目的是提高传输线路的利用率,降低通信成本
C.在数据通信中采用分组交换技术,可以动态分配信道资源,提高传输效率和质量
D.数据通信网络大多采用分组交换技术,但不同类型网络的数据包格式通常不同
8.Internet使用TCP/IP协议实现了全球范围的计算机网络的互连,连接在
Internet上的每一台主机都有一个IP地址。目前使用的是IPv4标准(32位地
址),下一代互联网将会采用IPv6标准,其IP地址为____。
    A.48位
    B.64位
    C.96位
    D.128位
9.下列关于字符编码标准的叙述中,错误的是____。
A.在ASCII标准中,每个字符采用7位二进制编码
B.在绝大多数情况下,GB2312字符集包含的1万多个汉字足够使用
C.Unicode字符集既包含简体汉字,也包含繁体汉字
D.中文版Windows XP及其后的Windows系列操作系统均支持国标GB18030
10.由于采用的压缩编码方式及数据组织方式的不同,图像文件形成了多种不同的文件格式。在下列四种图像文件中,常用于网页上发布并可具有动画
效果的是    。
A. BMP
B.JPEG
C.GIF
D. TIF
参考答案:
1.A    3.B  2.D    4.C   5.D   6.A   7.A  8.D  9.B  10.C

第二部分  Visual C++程序设计
    一、选择题(共10分,每题2分)
    1.设有说明:“char s[100]="my\'s apple. \nyour=\65";”,则strlen(s)
的值是____。
    A.19    B.24    C.27    D.28
    2.下列有关break和continue语句的叙述中,正确的是____。
    A.前者用于循环语句,后者用于switch语句
    B.前者用于循环语句或switch语句,后者用于循环语句
    C.前者用于switch语句,后者用于循环语句
    D.前者用于循环语句,后者用于循环语句或switch语句
    3.以下关于函数重载的叙述中,正确的是____。
    A.函数名相同,函数的参数个数和参数类型也相同,但函数的返回值的类型不同
    B.函数名相同,函数的参数个数必须不同,对参数类型和函数的返回值的类型没有限制
    C.函数名相同,函数的参数类型必须不同,对参数个数和函数的返回值的类型没有限制
    D.函数名相同,函数的参数个数或者参数类型不同,对函数的返回值的类型没有限制
  4.以下有关类的叙述中,不正确的是____。
  A.类是一组对象的模板
  B.类是数据和函数(方法)的封装体
  C.在类中定义数据成员时,可直接对数据成员设置初值或赋值
  D.对象是类的实例,类声明在前,而对象定义在后
  5.以下有关运算符重载的叙述中,正确的是____。
  A.能用成员函数重载的运算符,均能用友元函数重载
  B.能用友元函数重载的运算符,均能用成员函数重载
  C.用成员函数或友元函数重载同一运算符时,两者的参数类型与个数相同
  D.通过运算符重载,能改变运算符的优先级


二、填空题(共20分,每空2分)
1.[程序]
#include 
int fun(int x, int &y)
{  int a=x;
   static int b =10;
   x=a+y; y=b+y; b=y+a;
   return (x++) ;
}
void main( void)
{   int x=1, y=5;
    for(int i=0; i<3; i++) {
      cout<    }
}
执行程序后,输出的第一行是___(1)___    ,第二行是 ___(2)___


2.[程序]
#include
int *p;
void fun(int a, int &b)  {
    p=&b;
    a+=*p;   b+=a;
    cout<}
void main( void)
{
  int x = 20, y = 30 ;
  fun(x, y) ;
  cout<< x<<'\t'<}
执行以上程序后,输出的第一行是___(3)___,第二行是___(4)___.
3.[程序]
#include 
int n1 =O,n2=O,n3=0 ,n4=0;
class T{
  public :
    T(int a) {    ia = a;   n1++ ;       }
    void print( )    {  cout<    int Getia() {return ia;}
  private :
    int ia;
};
class S1 : public T{
    int x;
  public :
    S1(int a,int c) :T(a)     { x=c;   n2++ ;  }
    void printS1( )    {  cout<< Getia( )<<'\t'<};
class S2 : public T{
    int y;
public :
    S2(int a) :T(10)   {   y=a;   n3++ ;   }
    void printS2 ( )     { cout<};
class S : public S1, public S2 {
    int xx;
public :
     S ( int a , float b,int c,int d) :S1(a,b) ,S2(c) {     xx = d;    n4 ++ ; }
     void printS( ) { cout<

};
void main( void)
 {    T t1(2) ;     S1 t2(3,4) ;
     S2 t3(5) ;   S  t4(6,7,8,9) ,  * p;
     p=&t4;
     p->printS( );    p->printS1( ) ;    p->printS2( ) ;
     cout<}
    执行程序后,输出的第二行是___(5)___ ,第三行是___(6)___ ,第四行是___(7)___    。
4.[程序]
#include
class A{
public :
     int x,y;
     A(int a,int b)
     {x=a;  y=b;}
     virtual void display( )  { cout<};


class B : public A{
  public :
     int z;
     B(int a,int b,int c) :A( a,b)    {   z =c; }
     void display( )  { cout<< x<<'\t'<< y<<'\t'<< z<< endl; }
};
class D: public B {
public :
     int m;
     D(int a,int b,int c,int d) :B( a,b,c)   { m = d; }
     void display( )  { cout<< x<<'\t'<< y<<'\t'<< z<<'\t'<};
class E :public A{
 public :
     int n;
     E(int a,int b,int c) :A( a,b) {n =c;  }
     void display1( )   { cout<<"E::"<};
void fun(A * p1)  {
   p1-> display ( ) ;

}
void main( void)  -
        A b0(10,20) , *p;
        p = &b0;    fun(p) ;
        B b1(30,40,50) ;
        D d1( 31,41, 51,61) ;
        p = &b1;      fun( p) ;
        p = &d1;      fun( p) ;
        E e1(100,200 ,300) ;
        p = &e1;    fun(p) ;
}

    执行以上程序后,输出一共___(8)___行,其中第二行是___(9)___,第四行是___(10)___    。

三、操作题(共50分)
    1.以下程序首先建立一条链表,然后按照如下顺序删除链表中的结点:以
链表的第一个结点为1号结点开始依次搜索,删除所有序号为3的倍数的结
点,即删除第3、6、9、……个结点,当搜索一遍结束后再从链表头部继续此操
作,直到链表的结点个数少于3个为止。(10分)
    程序输出为:

当前链表中的结点依次为:23 12  32  54 74 25  65  94  17  72
第1轮删除的结点为:32 25 17
当前链表中的结点依次为:23 12 54 74 65  94 72
第2轮删除的结点为:54 94
当前链表中的结点依次为:23 12 74 65 72
... ...
第5轮删除的结点为:72
链表中剩余的结点为:23  12
[程序]

#include 
struct node {
    int data;
    node *next;
};
node * insert(int x, node * head)
{
     node *p;
     p = new node;
     p -> data = x;
     p-> next= head;
     return p;
}
void fun( node *head, int n)
{   node *p, *p1,*q;
    int i,num =1;
    if(!head) return;
     while(n >2){
        cout<<"当前链表中的结点依次为:";
        p=head;
        while(p){
          cout<data<<"    ";
          p=p->next;
  }
        cout<        p=head;
        ___(1)___    ;
        i=2;
        while(q) {
    if(i%3==0){
          cout<< q -> data<<'\t';
        ___(2)___    ;
        delete q;
        q=p->next;
        n--;
        i++;
  }
  else{
          p=p->next;
         i++;
         __(3)___;
      }
   }
    num++;
    cout< }
  cout<<"链表中剩余的结点为:";
  p= head;
  while(p){
    cout<data<<" ";
    ___(4)___;
  }
   cout<}
void main( void)
{
    int a[10] ={23, 12, 32, 54, 74, 25, 65, 94, 17, 72 } ;
    node  * head =0;
    for(int i= 9; i >=0; i-- )
      ___(5)___  ;
    fun(head,10);
}
    【要求】
    ·打开T盘中MYFA. txt文件,将其复制到文件myfa.cpp中(或把上述程
序录入到文件myfa.cpp中),根据题目要求及程序中语句之间的逻辑关系对程
序进行完善。程序中的注解可以不输入。
    ·完善后的源程序文件myfa. cpp必须放在T盘的根目录下,供阅卷用。
 2.程序改错(20分)
    【题目】以下程序的功能是:求1000000以内的所有平方回文数。平方回文
数是指该整数为某一整数的平方,且该整数的各位数字呈中心对称。


正确程序的输出结果如下:
1000000以内的平方回文数为:
121 484 676 10201 12321 14641 40804 44944 69696 94249 698896
含有错误的源程序如下:
#include
int pow(int m,int n)    //计算m的n次方
{  int t=0;
   for(int i=0; i    t*=m;
   return t;
}
int pingfanghuiwen( int a)
{  int temp,k,num, sum;
   int count,i,n;
   n=a*a;
   count=0;
   while( 1){  //计算n的位数
     k=n-pow(10,count);
   if(k<0)
     continue ;
   count ++ ;
}
   sum =0;
   num = n;
   for(i=0; i     temp = num;
     sum= sum+ temp*pow(10,  count -i);
     num= num/10;
   }
  if(sum==n)
    return 1;
  else
    return 0;
}
void main()
{  int i;
   cout<<"1000000以内的平方回文数为:"<   for(i=10;i<1000; i++)
      if( pingfanghuiwen(i))
        cout<    cout< }
【要求】
    ·打开T盘中MYFB.txt文件,将其复制到文件myfb. cpp中(或把上述程
序录入到文件myfb. cpp中),根据题目要求及程序中语句之间的逻辑关系对程
序中的错误进行修改。程序中的注解可以不输入。
    ·改错时,可以修改语句中的一部分内容,增加少量的变量说明、函数原型
说明或编译预处理命令,但不能增加其他语句,也不能删除整条语句。
    ·改正后的源程序文件myfb. cpp必须放在T盘的根目录下,供阅卷用。
3.程序编程题(20分)
    【题目】字符串的并集定义为两个字符串中所包含的所有字符(并集中字符
的排列顺序不做要求,但不能重复)。试定义一个字符串类STR,求两个字符串
的并集。具体要求如下:
    (1)私有数据成员
    ·char *p1,*p2;存放两个原始字符串。
    ·char *p;存放两个字符串的并集。
    (2)公有成员函数
    ·STR( char s1[],char s2[]);初始化原始字符串并为指针p分配存储空间。
    ·void del(char *p);删除p指向字符串中的重复字符。
    ·void fun();求指针p1和p2所指向的两个字符串的并集,结果存人指针p所指向的存储空间,注意调用del()函数删除结果中的重复字符。
    ·void print();输出两个原始字符串及它们的并集。
    ·~STR();析构函数,释放动态内存。
    (3)在主函数中对该类进行测试。
    输出示例:
    原字符串:adb12345    abcdefg23xz
    它们的并集为:adb12345cefgxz
    【要求】
    源程序文件名必须为myfc.cpp,并放在T盘根目录下,供阅卷用。
    参考答案:
    一、选择题
    1.A    2.B    3.D    4.C    5.B

本套试卷的视频演示见:school.njwww.net

二、填空题
1.6  15
2. 16  31
3. 50  80  80
4. 20 80 80
5. 6 7
6. 10 8
7. 5  2 2 1
8. 4
9. 30 40  50
10. 100  200
三、操作题
1 (1) q =head ->next
    (2) p -> next =q ->next
    (3) q =q ->next
    (4) p =p ->next
   (5) head =lnsert(a[i] , head)
2.
(1)  第3行的int t=0修改为   int t=1;
(2)  第16行的continue修改为 break
(3)第23行的count-i 修改为 count-i-1
(4)第34行的cout<

3.
#include
#include
class STR{
    char *p1,  *p2,  *p;
public :
    STR(char s1[ ] , char s2[ ])
    {   int n1 = strlen ( s1)  + 1 ,  n2 = strlen( s2)  + 1 ;
        strcpy( p1 = new char[n1] , s1) ;
        strcpy( p2 = new char[n2] , s2) ;
        p = new char[n1 + n2 + 1] ;
     }
     void fun( )
     {   char *s=p1,  *p0 =p;
         while(*p0++=*s+);
         s=p2;
         p0--;
         while(*p0++=*s++);
         del(p);
      }
     void del( char  * s)   
     { while(*(s+1)){                                            //4分
       for( char *s1 =s+1;  *s1; s1++ )
          if(*s==*s1){
            *s1='\0';
            strcat( s,s1 +1) ;
            s1--;
          }
       s++;
      }
  }

void print()
{  cout<<"原字符串:";
   cout<   cout<<"它们的并集为:"<}
  ~STR()
 { delete []p1;
   delete []p2;
   delete []p;
  }
};

void main( )                                           //2分
{    STR  s1("adb12345", " abcdefg23xz") ;
     s1.fun( );
     s1.print( );
}

本套试卷的视频讲解见:http://school.njwww.net/kecheng/detail_921575