2010年春江蘇VC++上機試題第1套 |
一:改錯題(20分) [題目]以下程序的功能是:找出100之內所有符合等式x=(y+z)/2的x(其中x,y,z都是100以內素數,且他們互不相同),并輸出所有滿足條件的結果, 例如:5是符合上述條件的素數,因為5=(3+7)/2,并且5,3和7都是素數,13也是符合條件的素數,因為13=(3+23)/2,13=(7+19)/2,13、3、23、7、19均為素數 正確程序的輸出如下(部分省略) 5=(3+7)/2 7=(3+11)/2 11=(3+19)/2 13=(3+23)/2 17=(3+31)/2 ./.. 含有錯誤的源程序如下: #include “iostream.h” #include “math.h” int isPrime(int n) {for(int i=2;i<sqrt(n);i++) if(n%i==0) return 0; return 1; } int check(int x,int y) {if(isPrime(x) && isPrime(y)) if((x+y)/2==0) return isPrime((x+y)/2); return 0; } void main() {int s=2,t=2,p=2; int flag; while(1){ for(t+=1; ;t++){ if(isPrime(t)) { if(flag==0){ p=t,flag=1; } break; } } if(p>100) break; if((s+t)/2<100){ if(!check(s,t)) cout<<(s+t)/2<<"=("<<S<<"+"<<t<<") /2”<<endl; } else{ s=t=p; flag=0; } } } 二:編程題 試定義一個類COIN,用于模擬一個翻硬幣游戲,n個硬幣畫面向上圍成一圈,按順時針方向依次數硬幣,對于數硬幣的計數,當計數到可以被3整除或者被5整除的數時,將硬幣翻轉,使用一個數組來表示這n個硬幣的狀態(數組下標從0開始),元素值為1表示對應硬幣畫面朝上,編寫程序計算這n個硬幣依次從1開始到k時,各硬幣的狀態(數組各元素的值),具體要求如下: (1) 私有數組成員 int *a,指向用于存儲硬幣狀態的數組 int n,k;整型變量,n表示硬幣的總數,k表示依次計數的次數 (2) 公有成員函數 COIN(int n1,int k1);構造函數,利用n1和k1的值分別初始化n和k,并為指針成員a動態分配存放n1個整數的存儲空間,將指針a指向的數組中的每一個元素初始化為1(即假設每個硬幣的初始狀態都為畫面朝上) void func();計算從1數到k時硬幣的狀態 void print();按示例要求打印輸出結果 ~COIN():析構函數 (3) 在主函數中對該類進行測試 輸入n和k的值:12 100 從1數到100時的硬幣狀態是: 0 1 0 0 0 1 1 0 1 0 0 1 |