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 |