江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
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

彩票30选5开奖结果