2012春江蘇計算機二級VC++上機真題 |
二級 Visual C++上機試卷 (本試卷完成時間為70分鐘) 一、改錯題(20分) 【題目】 以下程序中,函數fun(int m, int fac[], int &p)的功能是:計算參數m(m>2)的所有因子,將這些因子按從小到大的順序依次存放在數組fac中,將因子個數存放在參數p中,并返回所有因子之和。 正確程序的輸入/輸出結果如下(下劃線部分為鍵盤輸入): 輸入一個整數:24 24的所有因子之和為:60 24的各因子為:1 2 3 4 6 8 12 24 含有錯誤的源程序如下: 1 #include<iostream.h> 2 #include<math.h> 3 int fun(int,int[],int); 4 void main(void) 5 { 6 int n,f[100],p; 7 cout<<"輸入一個整數:"; 8 cin>>n; 9 cout<<n<<"的所有因子之和為:"<<fun(n,f,p)<<endl; 10 cout<<n<<"的各因子為:"; 11 for(int i=0;i<p;i++) 12 cout<<f[i]<<' '; 13 cout<<endl; 14 } 15 int fun(int m,int fac[],int &p) 16 { 17 int i,s; 18 fac[0]=p=1; 19 for(s=1,i=2;i<=sqrt(m);i++){ 20 if(m%i=0){ 21 fac[p++]=i; 22 s+=i; 23 } 24 } 25 fac[p]=m; 26 s+=m; 27 return fac; 28 }
【要求】 1.打開T盤中myfa.txt文件,將其文本拷貝到文件myfa.cpp中(或將上述程序錄入到文 件myfa.cpp中),根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。程 序中的注解可以不輸入。 2.改錯時,可以修改語句中的一部分內容,增加少量的變量說明、函數原型說明或編譯預 處理命令,但不能增加其他語句,也不能刪除整條語句。 3.將改正后的源程序文件myfa.cpp必須放在T盤根目錄下,供閱卷用。 二、編程題(20分) 【題目】 試定義一個類STR,實現兩個字符串的交集。具體要求如下: (1)私有數據成員。 char s1[50],s2[50],s0[50]:字符串s0用于存放字符串s1和字符串s2的交集。 (2)公有成員函數。 •STR(char *p1,char *p2):構造函數,分別用參數p1和p2初始化成員數組s1和s2 •int isin(char *p,char c):判斷字符c是否出現在字符串p中,如果是,則返回值為1, 否則返回值為0 •void fun():求成員數組s1和s2的交集,并將結果存放在成員數組s0中。提示:利用 函數isin(char *,char)依次判斷一個字符串中的每個字符是否包含于另一個字符串中,如果 包含,且該字符不包含于成員數組s0中,則將該字符加入到成員數組s0中。 •void print():按輸出示例的格式輸出所有數據成員。 (3)在主函數中對該類進行測試。 。 輸出示例: 字符串1:abcdef123abc12 字符串2:acef123ace124 兩個字符串的交集:acef123 【要求】 源程序文件名必須為myfb.cpp,并放在T盤根目錄下,供閱卷用。 參考答案 一、改錯題 第3行 int fun(int,int[],int); 改為int & 第19行 for(s=1,i=2;i<=sqrt(m);i++){ 改為i<=m/2或i<m 第20行 if(m%i=0){ 改為m%i==0 第27行 return fac; 改為return s 二、編程題 #include<iostream.h> #include<string.h> class STR{ char s1[50],s2[50],s0[50]; public: STR(char *p1.char *p2) { strcpy(s1,p1); strcpy(s2,p2); s0[0]='\0'; } int isin(char *p,char c) {char *p0=p; while(*p0) if(*p0++==c) return 1; return 0; } void fun() { for(char *p1=s1,*p0=s0;*p1;p1++) { if(isin(s2,*p1)&&(!isin(s0,*p1))) { *p0++=*p1; } *p0='\0'; } } void print() { cout<<"字符串1:"<<sl<<endl; cout<<"字符串2:"<<s2<<endl; cout<<"兩個字符串的交集:"<<s0<<endl; } }; void main() { char str1[]="abcdef123abc12",str2[]="acef123ace124"; STR test(str1,str2); test.fun();test.print(); } |