2013秋江蘇省計算機二級C++上機真題第1套 |
2013秋江蘇省計算機二級Visual C++上機試卷 一、改錯題(20分) [題目] 以下程序的功能是:驗證一個字符串中的小括號"("和")"是否匹配,即左小括號和右小括號是否成對出現,并且符合括號配對規則,例如,字符串")("和"(( )"中的小括號都不匹配 正確程序的輸入/輸出結果如下(下劃線部分為鍵盤輸入); 請輸入一個字符串:ab(cde)(fg)(b) 該字符串的小括號正確匹配 請輸入一個字符串:ab)bc(de)( 該字符串的小括號不匹配 含有錯誤的源程序如下: #include <iostream.h> int judge(char str[],int n) { int count; for(int i=0; i<n; i++){ if(str[i] == '(') count++; else if(str[i]==')'){ count--; if(count>0) return 0; } } if(count!=0) return 0; return 1; } void main() { char str[50]; cout<<"請輸入一個字符串:"; cin.getline(str,50); if(!judge(str, strlen(str))) cout<<"該字符串的小括號正確匹配"<<endl; else cout<<"該字符串的小括號不匹配"<<endl; } 【要求】 1.打開T盤中myfa.txt文件,將其文本拷貝到文件myfa.cpp中(或將上述程序錄入到文 件myfa.cpp中),根據題目要求及程序中語句之間的邏輯關系對程序中的錯誤進行修改。程 序中的注解可以不輸入。 2.改錯時,可以修改語句中的一部分內容,增加少量的變量說明、函數原型說明或編譯預 處理命令,但不能增加其他語句,也不能刪除整條語句。 3.將改正后的源程序文件myfa.cpp必須放在T盤根目錄下,供閱卷用。 二、編程題(20分) 【題目】 試定義一個類NUM,根據給定的二維數組a生成二維數組b,其生成規則如下: b[m][n]= 具體要求如下: (1)私有數據成員 int a[3][4]:原數組a float b[3][4]:生成數組b (2)公有成員函數 NUM(int k[][4], int n):構造函數,利用數組k初始化數組a void fun1(int k, int p):按下列算法提示計算數組b的元素b[k][p] void fun2():按題意生成數組b void print(): 按行列方陣形式輸出數組a和數組b 算法提示: 計算 (3)在主函數中對該類進行測試 輸出示例: 數組a: 5 8 10 15 17 6 4 8 6 15 9 12 數組b: 7.07107 14.5344 24.2441 39.1695 24.5967 12.7269 10.0145 10.2021 29.5146 11.4176 7.54247 6.84524 [要求] 源程序文件名必須為myfb.cpp,并放在T盤根目錄下,供閱卷用 參考答案: 一、改錯題 在第1行與第2行之間 添加#include <string.h> 第4行 int count; 改為:int count=0 第10行 if(count>0) 改為: if(count<0) 第23行 if(!judge(str,strlen(str)) 改為:if(judge(str,strlen(str)) 二、編程題 #include <iostream.h> #include <math.h> class NUM{ int a[3][4]; float b[3][4]; public: NUM(int k[][4], int n) { for(int i=0;i<n;i++) for(int j=0;j<4;j++) a[i][j]=k[i][j]; } void fun1(int k,int p) { float temp=0; for(int i=0;i<=k; i++) for(int j=0; j<=p;j++){ float t0=a[i][j]*a[i][j]; temp+=sqrt(t0/(k+1)/(k+1)+t0/(p+1)/(p+1)); } b[k][p]=temp/(k*p+1); } void fun2() { for(int i=0;i<3;i++) for(int j=0; j<4; j++) fun1(i,j); } void print() { cout<<"數組a:"<<endl; for(int i=0; i<3; i++){ for(int j=0;j<4;j++) cout<<a[i][j]<<'\t'; cout<<endl; } cout<<"\n數組b:"<<endl; for(i=0;i<3;i++){ for(int j=0;j<4;j++) cout<<b[i][j]<<'\t'; cout<<endl; } } }; void main() { int a1[3][4]={5,8,10,15,17,6,4,8,6,15,9,12}; NUM n1(a1,3); n1.fun2(); n1.print(); } |