江蘇省計算機二級 Visual C++上機試卷(01) (本試卷完成時間為70分鐘) 一、改錯題(20分) 【題目】 以下程序的功能是:根據字符串str中是否包含子串substr,決定如何將字符串str1插入到 str的不同位置。插入方法是:如果str中包含子串substr,則將str1插入到str中首次出現的子 串substr之后;否則,插入到str的尾部。 正確程序的輸出如下: 原字符串:aabcd12345 子字符串:abcd 插入字符串:ABC 新字符串:aabcdABC12345 含有錯誤的源程序如下: #include <iostream.h> #include <string.h> char *find(char *str,char *substr) { unsigned lent=strlen(str); for(char *p1=str,*p2=substr;strlen(p1)>=len;p1++){ for(unsigned i=0;i<len;i++) if(p1[i]!=p2[i]) break; if(i>len) return p1+len; } return 0; } char *insert(char *str,char *substr,char *str1) { char p=find(str,substr); if(p) strcat(str,str1); else{ char *tmp=new char[strlen(str)+strlen(str1)+1]; strcpy(tmp,str1) strcat(tmp,p); strcpy(p,tmp); delete []tmp; } return str; } void main() { char *str=new char[80],substr[]="abcd",str1[]="ABC"; strcpy(str,"aabcdl2345"); ’ cout<<"原字符串:"<<str<<"子字符串:"<<substr<<"插入字符串:"<<str1<<endl; str=insert(str,substr,str1); cout<<"新字符串:"<<str<<endl; delete []str; } 【要求】 1.把上述程序錄入到文件myfa.cpp中,根據題目要求及程序中語句之間的邏輯關系對。 程序中的錯誤進行修改。程序中的注解可以不輸入。 2.改錯時,可以修改語句中的一部分內容,增加少量的變量說明、函數原型說明或編譯預 處理命令,但不能增加其他語句,也不能刪除整條語句。 3.改正后的源程序文件myfa.cpp必須放在T盤根目錄下,供閱卷用。 二、編程題(20分) 【題目】 試定義一個類Array,將4行5列二維數組的各列前3個元素依次拼接成一個整數,再將 該整數賦值給相應列的最后一個元素。例如,
(1)私有數據成員: int a[4][5]; (2)公有成員函數。 Array(int b[][5],int n):構造函數,用二維數組b初始化數組a,參數n表示數組b的 行數。 void val(int j):將成員數組a第j列的前3個元素依次拼接成一個整數賦值給第4個元 素。 void fun():利用成員函數vaLl()依次處理數組a的各列,完成題目的要求。 void print():按矩陣形式打印數組a。 (3)在主函數中完成對該類的測試。 輸出示例: 原數組: 1 2 0 4 1 16 11 21 0 2 2 0 3 1 3 0 0 0 0 0 處理后的數組: , l 2 0 4 1 16 11 21 0 2 2 0 3 1 3 1162 2110 213 401 123 【要求】 源程序文件名必須為myfb.cpp,并放在T盤根目錄下,供閱卷用。 參考答案 一、改錯題 unsigned len=strlen(str); str改為substr if(i>len) 改為i>=len char p=find(str,substr); char p改為char *p if(p) p改為p==0或!p 二、編程題 #include<iostream.h> class Array{ int a[4][5]; public: Array(int b[][5],int n) { for(int i=0;i<n;i++) for(int j=0;j<5;j++) a[i][j]=b[i][j]; } void val(int j) { a[3][j]=0; for(int i=0;i<3;i++){ int k=a[i][j]; do{ a[3][j]=10; k/=10; }while(k); a[3][j]+=a[i][j]; } } void fun() { for(int j=0;j<5;j++) val(j); } void print() { for(int i=0;i<4;i++){ for(int j=0;j<5;j++) cout<<a[i][j]<<'\t'; cout<<'\n'; } } void main() {int t[4][5]={{1,2,0,4,1},{16,11,21,0,2},{2,0,3,1,3}}; Array test(t,4); cout<<"原數組:"<<end]; test.print(); test.fun(); cout<<"處理后的數組:"<<endl; test.print(); }
|