![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
2010年春江蘇VC++上機(jī)試題第1套 |
一:改錯(cuò)題(20分) [題目]以下程序的功能是:找出100之內(nèi)所有符合等式x=(y+z)/2的x(其中x,y,z都是100以內(nèi)素?cái)?shù),且他們互不相同),并輸出所有滿足條件的結(jié)果, 例如:5是符合上述條件的素?cái)?shù),因?yàn)?=(3+7)/2,并且5,3和7都是素?cái)?shù),13也是符合條件的素?cái)?shù),因?yàn)?3=(3+23)/2,13=(7+19)/2,13、3、23、7、19均為素?cái)?shù) 正確程序的輸出如下(部分省略) 5=(3+7)/2 7=(3+11)/2 11=(3+19)/2 13=(3+23)/2 17=(3+31)/2 ./.. 含有錯(cuò)誤的源程序如下: #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; } } } 二:編程題 試定義一個(gè)類COIN,用于模擬一個(gè)翻硬幣游戲,n個(gè)硬幣畫面向上圍成一圈,按順時(shí)針方向依次數(shù)硬幣,對(duì)于數(shù)硬幣的計(jì)數(shù),當(dāng)計(jì)數(shù)到可以被3整除或者被5整除的數(shù)時(shí),將硬幣翻轉(zhuǎn),使用一個(gè)數(shù)組來表示這n個(gè)硬幣的狀態(tài)(數(shù)組下標(biāo)從0開始),元素值為1表示對(duì)應(yīng)硬幣畫面朝上,編寫程序計(jì)算這n個(gè)硬幣依次從1開始到k時(shí),各硬幣的狀態(tài)(數(shù)組各元素的值),具體要求如下: (1) 私有數(shù)組成員 int *a,指向用于存儲(chǔ)硬幣狀態(tài)的數(shù)組 int n,k;整型變量,n表示硬幣的總數(shù),k表示依次計(jì)數(shù)的次數(shù) (2) 公有成員函數(shù) COIN(int n1,int k1);構(gòu)造函數(shù),利用n1和k1的值分別初始化n和k,并為指針成員a動(dòng)態(tài)分配存放n1個(gè)整數(shù)的存儲(chǔ)空間,將指針a指向的數(shù)組中的每一個(gè)元素初始化為1(即假設(shè)每個(gè)硬幣的初始狀態(tài)都為畫面朝上) void func();計(jì)算從1數(shù)到k時(shí)硬幣的狀態(tài) void print();按示例要求打印輸出結(jié)果 ~COIN():析構(gòu)函數(shù) (3) 在主函數(shù)中對(duì)該類進(jìn)行測(cè)試 輸入n和k的值:12 100 從1數(shù)到100時(shí)的硬幣狀態(tài)是: 0 1 0 0 0 1 1 0 1 0 0 1 |