C++第五次实验

来源:互联网 发布:主播助手软件 编辑:程序博客网 时间:2024/06/06 10:56

二、项目名称:正整数类

一、问题及代码

[cpp] view plain copy  
   
 在CODE上查看代码片派生到我的代码片
  1. /*  
  2. * 文件名称:Ex5-1.cpp  
  3. * 作    者:戴光彤 
  4. * 完成日期:2017 年 4月 24日  
  5. * 版 本 号:v1.0  
  6. * 对任务及求解方法的描述部分: 
  7. * 输入描述:无  
  8. * 问题描述:


    设计一个“正整数”类,并通过一系列的成员函数对其性质进行做出判断或列出相关联的数值。下面给出类声明,请实现各成员函数。另外,模仿已经给出的main()函数,完成你所设计的各个成员函数的测试

  9. [cpp] view plain copy 
      
     在CODE上查看代码片派生到我的代码片
    1. #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 print Daffodils(); //显示所有大于1,且小于数据成员n的水仙花数;  
      };  
        
      void main()  
      {  
          NaturalNumber nn;   //定义类的一个实例(对象)  
          nn.setValue (6);  
          cout<<nn.getValue()<<(nn.isPrime()?”是”:”不是”)<<”素数” <<endl;  
        
          nn.setValue (37);   
          cout<<nn.getValue()<<(nn.isPrime()?”是”:”不是”)<<”素数” <<endl;  
        
          nn.setValue (84);   
          cout<<nn.getValue()<<”的因子有:”;  
          printFactor();  
        
          //随着成员函数的实现,增加代码以完成相关的测试。注意判断类的成员函数需要测试是或否两种情况……      
      }  
        
      //请在下面定义类中的各个成员函数  
        
        
      #include<iostream>  
      #include <Cmath>  
      #include "NaturalNumber.h"  
      using namespace std;  
      void NaturalNumber::setValue (int x)  
      {  
          cout << "请输入一个数据成员的值:";  
            
          cout<< x << endl;  
            
          if (x > 0)  
          {  
              cout << "数据为正整数!"<<endl;  
                
              n = x;  
                
                
          }  
          else  
          {  
              cout << "数据不是正整数!请重新输入:"<< endl;  
          }  
      }  
      int NaturalNumber::getValue()  
      {  
          return n;  
      }  
      bool NaturalNumber::isPrime()  
      {  
          bool pri = true;  
          for (int i = 2;i <= sqrt(x);i++)  
          {  
              if( n % i == 0)  
              {  
                  pri = false;  
                    
                  break;  
              }  
          }  
          return pri;  
      }  
      void NaturalNumber::printFactor()  
      {  
          for(int i = 1;i <= n;i++)  
          {  
              if( n % i == 0)  
              {  
                  cout << i << "  ";  
              }  
          }  
          cout << endl;  
      }  
      bool NaturalNumber::isPerfect()  
      {  
          int s = 0;  
            
          for(int i = 1;i < n;i++)  
          {  
              if( n % i == 0)  
              {  
                  s = s + i;  
                    
              }  
          }  
          if(n == s)  
          {  
              cout << "n为完全数!"<< endl;  
                
                
          }  
          else  
          {  
              cout << "n不是完全数!"<< endl;  
                
          }  
          return 0;  
            
      }  
      bool NaturalNumber::isReverse(int x)  
      {  
          int t,s = 0;  
            
          while(x > 0)  
          {  
              t = x % 10;  
                
              s = s + t;  
                
              x = x / 10;  
          }  
          if (n == x)  
          {  
              cout << "形式参数x是数据成员n的逆向数"<< endl;  
                
          }  
          else  
          {  
              cout << "形式参数x不是数据n的逆向数"<< endl;  
                
          }  
          return 0;  
            
      }  
      bool NaturalNumber::isDaffodil(int x)  
      {  
          int t,s = 0;  
            
          while(x > 0)  
          {  
              t = x % 10;  
                
              s = s + t * t * t;  
                
              x = x / 10;  
          }  
          if (n == s)  
          {  
              cout << "形式参数x是水仙花数"<< endl;  
                
          }  
          else  
          {  
              cout << "形式参数x不是水仙花数"<< endl;  
                
          }  
          return 0;  
            
      }  
      void NaturalNumber::printDaffodils()  
      {  
          int i,t,s = 0;  
          for(i = 1;i < n;i++)  
          {  
              while(i > 0)  
              {  
                  t = i % 10;  
                    
                  s = s + t * t *t;  
                    
                  i = i / 10;  
              }  
              if(s == i)  
              {  
                  cout << "1--n的水仙花数有:"<< i << " ";  
              }  
          }  
      }  


二、运行结果:


 

三、心得体会:

     本实验涉及类的方方面面,而且要求判断水仙花数,素数,完全数等等。

       要求熟练掌握布尔型这一数据类型。

        编写一个过程相对复杂的程序需要我们付出更多的耐心去一遍遍修改错误。

    

四、知识点总结:

        主要是要求掌握类与对象的运用。

  

    


0 0
原创粉丝点击