江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
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