c++实验2—正整数类

一.问题及代码

/*
文件名称:正整数类.cpp
作者    :汤俊鹏
日期    :2016.3.25
平台    :visual c++ 6.0    
项目名称:正整数类
问题详情:设计一个“正整数”类,并通过一系列的成员函数对其性质进行做出判断或列出相关联的数值。
          下面给出类声明,请实现各成员函数。另外,模仿已经给出的main()函数,完成你所设计的各个成员函数的测试。
代码如下:
*/
#include<iostream>  
using namespace std;  
class NaturalNumber  
{
private:  
    int n;   
public:  
    void setValue (int x);//置数据成员n的值,要求判断是否是正整数  
    int getValue();  //返回私有数据成员n的值  
    bool isPrime();  //判断数据成员n是否为素数,是返回true,否则返回false  
    void printFactor();  //输出数据成员n的所有因子,包括1和n自身  
    bool isPerfect(); //判断数据成员n是否为完全数。若一个正整数n的所有小于n的因子之和等于n, 则称n为完全数, 如6=1+2+3是完全数。  
    bool isReverse(int x);//判断形式参数x是否为数据成员n的逆向数(例321是123的逆向数)。  
    bool isDaffodil(int x); //判断形式参数x是否是水仙花数。水仙花数的各位数字立方和等于该数,如153=1*1*1+5*5*5+3*3*3  
    void printDaffodils(); //显示所有大于1,且小于数据成员n的水仙花数;  
}; 
void NaturalNumber ::setValue(int x)  
{     
    n=x;  
    while(x<=0)  
    {  
        cout<<"n不是正整数,请重新输入:"<<endl;  
        cin>>n;  
        if(n>0) break;  
    }  
} 
int NaturalNumber::getValue()
{
	return n;
}
bool NaturalNumber::isPrime()
{
	int i;
	for(i=2;i<n;i++)
		if(n%i==0)
			break;
	if(i==n) return true;
	else     return false;
}
void NaturalNumber::printFactor()
{
	int i=1;
	while((n%i)==0)
	{
		cout<<i<<" ";
		i++;
	}
	cout<<endl;
}
bool NaturalNumber::isPerfect()  
{  
    int i,s=0;  
    for(i=1;i<n;i++)  
        if(n%i==0)  
            s+=i;  
    if(n==s)return true;  
    return false;  
} 

bool NaturalNumber::isReverse(int x)
{  
    cout<<x;  
    int a[10],i,k,j;  
    for(i=0;n!=0;i++)  
    {  
        a[i]=n%10;  
        n/=10;  
    }  
    k=i-1;  
    for(i=0;i<=k;i++)  
    {  
        for(j=0;j<k-i;j++)  
        {  
            a[i]*=10;  
        }  
        n+=a[i];  
    }  
    if(n==x)return true;  
    return false;  
}  
bool NaturalNumber::isDaffodil(int x) 
{
    int m=x;  
    cout<<"x="<<x;  
    int a[10],s=0,i,k;  
    for(i=0;x!=0;i++)  
    {  
        a[i]=x%10;  
        x/=10;  
    }  
    k=i;  
    for(i=0;i<k;i++)  
        s+=a[i]*a[i]*a[i];  
    if(m==s)return true;  
    return false;  
}  
void NaturalNumber::printDaffodils();  
{  
    int j;  
    for(j=2;j<n;j++)  
    {  
    int m;  
    m=j;  
        int a[10],s=0,i,k;  
        for(i=0;j!=0;i++)  
        {  
            a[i]=j%10;  
            j/=10;  
        }  
        k=i;  
        for(i=0;i<k;i++)  
            s+=a[i]*a[i]*a[i];  
        if(m==s)   
        cout<<m<<" ";  
    j=m;  
    }  
    cout<<endl;  
}  

int main()  
{  
    NaturalNumber nn;   //定义类的一个实例(对象)  
  
    nn.setValue (-1);  
    cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数"<<endl;  
  
    nn.setValue (37);  
    cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数"<<endl;  
  
    nn.setValue (84);  
    cout<<nn.getValue()<<"的因子有:";  
    nn.printFactor();  
  
    nn.setValue (6);  
    cout<<nn.getValue()<<(nn.isPerfect()?"是":"不是")<<"完全数"<<endl;  
  
    nn.setValue (37);  
    cout<<nn.getValue()<<(nn.isPerfect()?"是":"不是")<<"完全数"<<endl;  
  
    int z;  
    nn.setValue(123);  
    z=nn.getValue();  
    cout<<(nn.isReverse(321)?"是":"不是")<<"n="<<z<<"的逆向数"<<endl;  
  
    nn.setValue(123);  
    z=nn.getValue();  
    cout<<(nn.isReverse(213)?"是":"不是")<<"n="<<z<<"的逆向数"<<endl;  
  
    cout<<(nn.isDaffodil(153)?"是":"不是")<<"水仙花树"<<endl;  
  
    cout<<(nn.isDaffodil(37)?"是":"不是")<<"水仙花树"<<endl;  
  
    nn.setValue(1053);  
    cout<<"大于1且小于数据成员"<<"n="<<nn.getValue()<<"的水仙花数:";  
    nn.printDaffodils();  
	return 0;
}  
二,运行结果

c++实验2—正整数类_第1张图片

三,心得体会

       老师的这个任务主要是函数的问题,写出函数就行,这几个函数以前都用C语言写过,不过还是比较麻烦的,一题更比六题强,内容太多,不过重新写这几个函数更熟练了。

四,知识点总结

      运用c++类相关的东西已经很熟悉了,处理好数据成员与成员函数的问题是关键,以后将要学习更多关于怎么利用类和对象的知识,一步一步来吧。

你可能感兴趣的:(C++)