1. 程式人生 > >C++第四周【任務3】設計一個“正整數”類,並通過一系列的成員函式對其性質進行做出判斷或列出相關聯的數值。

C++第四周【任務3】設計一個“正整數”類,並通過一系列的成員函式對其性質進行做出判斷或列出相關聯的數值。

/* (程式頭部註釋開始)
* 程式的版權和版本宣告部分
* Copyright (c) 2011, 煙臺大學計算機學院學生 
* All rights reserved.
* 檔名稱:                              
* 作    者:李洪懸                              
* 完成日期:    2011     年    3   月     14   日
* 版 本 號:          

* 對任務及求解方法的描述部分
* 輸入描述: 
* 問題描述: 
【任務3】設計一個“正整數”類,並通過一系列的成員函式對其性質進行做出判斷或列出相關聯的數值。下面給出類宣告,請實現各成員函式。另外,模仿已經給出的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 print Daffodils(); //顯示所有大於1,且小於資料成員n的水仙花數;
};

void main(void)
{
	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();

	//隨著成員函式的實現,增加程式碼以完成相關的測試。注意判斷類的成員函式需要測試是或否兩種情況……	
}

//請在下面定義類中的各個成員函式



* 程式輸出: * 程式頭部的註釋結束
//標頭檔案
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的水仙花數;
};
//原始檔--主函式

#include<iostream>
#include <Cmath>
#include "NaturalNumber.h"
using namespace std;
void main(void)
{
	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()<<"的因子有:";
	nn.printFactor();
	system("PAUSE");
	
	//隨著成員函式的實現,增加程式碼以完成相關的測試。注意判斷類的成員函式需要測試是或否兩種情況……	
}
//原始檔--成員函式

#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 << " ";
		}
	}
}
經驗積累:我又忘記加cmath了!