C++面向对象编程题 第46题

46.建立一个类NUM,求指定数据范围内的所有合数(非质数)。提示:合数定义是“一个数,除了1和它本身,还有其它约数,这样的数叫合数”。

具体要求如下:

  1. 私有数据成员
  • int *data:动态存放在指定范围内求出的所有合数。
  • int span1,span2:存放指定范围的下限和上限。
  • int num:存放 span1 与 span2 之间的合数个数。
  1. 公有成员函数
  • NUM(int n1, int n2) :构造函数,用参数n1和n2初始化span1和span2,同时初始化 num。
  • int isComposite (int x ):判断x是否为合数。若是合数,返回1,否则,返回0。
  • void process( ) :求指定范围内的所有合数,把它们依次存放在数组data 中,并将求出的合数个数赋给num。
  • void print( ):输出求出的素数个数及所有合数,每行输出 8 个合数。
    ~NUM( ):释放动态分配的存储空间。
  1. 在主函数中完成对该类的测试。定义一个NUM类对象test,指定查找范围为100~200,即求100
    至200之间的所有合数。通过test调用成员函数完成求合数及输出合数的工作。
#include
using namespace std;
class NUM{
    int *data,span1,span2,num;
public:
    NUM(int n1,int n2){
        //data = new int[100];
        span1 = n1;
        span2 = n2;
        num  = 0;
    }
    int isComposite(int x){
        for(int i=2;i<x;i++){
            if(x%i==0){
                return 1;
            }
        }
        return 0;
    }
    void process(){
        int n = 0;
        for(int i=span1;i<=span2;i++){
            if(isComposite(i)){
                n++;
            }
        }
        data = new int[n];
        for(int i=span1;i<=span2;i++){
            if(isComposite(i)){
                data[num++]=i;
            }
        }
    }
    void print(){
        cout<<"num:"<<num<<endl;
        for(int i=0;i<num;i++){
            cout<<data[i]<<" ";
            if((i+1)%8==0){
                cout<<endl;
            }
        }
    }
    ~NUM(){
        if(data)delete[]data;
    }
};
int main(){
    NUM test(100,200);
    test.process();
    test.print();
    system("pause");
    return 0;
}

你可能感兴趣的:(C++面向对象编程题,c++,算法)