c++第二次实验——作业

本文提供了两个C++编程实例,一是时间类的实现,包括时间的输入、显示及加减操作;二是自然数类的设计,实现了数值设定、素数判断、完全数判断等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题
#include <iostream>    
02.using namespace std;    
03.class Time    
04.{    
05.public:    
06.    void set_time( );       
07.    void show_time( );  
08.    int add_a_sec()  
09.    {  
10.        return(sec=sec+1);  
11.    }  
12.    int add_a_minute()   
13.    {  
14.        return(minute=minute+1);  
15.    }  
16.    int add_an_hour()   
17.    {  
18.        return(hour=hour+1);  
19.    }  
20.    int add_seconds(int n);  
21.    int add_minutes(int n);  
22.    int add_hours(int n);  
23.    void tiao();  
24.private:     
25.    bool is_time(int, int, int);   //这个成员函数设置为私有的,是合适的,请品味    
26.    int hour;    
27.    int minute;    
28.    int sec;    
29.};  
30.int Time::add_seconds(int n)  
31.{  
32.return(sec=sec+n);  
33.}  
34.int Time::add_minutes(int n)  
35.{  
36.    return(minute=minute+n);  
37.}  
38.int Time::add_hours(int n)  
39.{  
40.    return(hour=hour+n);  
41.}  
42.void Time::set_time( )     
43.{    
44.    char c1,c2;    
45.    cout<<"请输入时间(格式hh:mm:ss)";    
46.    while(1)    
47.    {   cin>>hour>>c1>>minute>>c2>>sec;    
48.        if(c1!=':'||c2!=':')    
49.            cout<<"格式不正确,请重新输入"<<endl;    
50.        else if (!is_time(hour,minute,sec))    
51.            cout<<"时间非法,请重新输入"<<endl;    
52.        else     
53.            break;    
54.    }    
55.}    
56.void Time::show_time( )          
57.{    
58.    cout<<hour<<":"<<minute<<":"<<sec<<endl;    
59.}    
60.bool Time::is_time(int h,int m, int s)    
61.{    
62.    if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)    
63.        return false;    
64.    return true;    
65.}  
66.void Time::tiao()  
67.{  
68.    if(sec>=60)  
69.        sec=0;  
70.    if(minute>=60)  
71.        minute=0;  
72.    if(hour>=60)  
73.        hour=0;  
74.}  
75.int main( )    
76.{    
77.    Time t1;      
78.    t1.set_time( );       
79.    t1.show_time( );  
80.    t1.add_a_minute();  
81.    t1.show_time();  
82.    t1.add_hours(5);  
83.    t1.show_time();  
84.    return 0;    
85.}   
第二题
#include<iostream>
#include<math.h>  
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)
{
	if(double(x)==x&&x>0)
		n=x;
	else
		cout<<"这不是整数,拒绝"<<endl;
}
int NaturalNumber::getValue()
{	
	return n;
}
bool NaturalNumber::isPrime()
{
	if(n<2) return 0;
	for(int i=2;i<=sqrt(n);i++)
		if(n%i==0)
			return 1;
		return 0;
}
void NaturalNumber::printFactor()
{
for(int j=1;j<=n;j++)
	{	if(n%j==0)
			cout<<j<<" ";
		else cout<<"";
	}
	cout<<endl;
}
bool NaturalNumber::isPerfect()
{
	int sum=0;
	for(int i=1;i<n;i++)
	{	if(n%i==0)
			sum=sum+i;
		else sum=sum+0;
	}
	if(sum==n)
		return 1;
	else return 0;
}
bool NaturalNumber::isReverse(int x)
{

	int sum=0,d=n;
	while(d!=0)
	{
	
		sum=sum*10+d%10;
		d=d/10;
	}
if(sum!=x)
	return 0;
else return 1;
}
bool NaturalNumber::isDaffodil(int x)
{
	int d=x,sum=0;
	while(d)
	{
		sum+=(d%10)*(d%10)*(d%10);
		d/=10;
	}
	if(sum==x)
		return 1;
	else return 0;
}
void NaturalNumber::printDaffodils()
{
	for(int i=2;i<n;i++)

第四题
#include<iostream>
#include<math.h>  
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)
{
	if(double(x)==x&&x>0)
		n=x;
	else
		cout<<"这不是整数,拒绝"<<endl;
}
int NaturalNumber::getValue()
{	
	return n;
}
bool NaturalNumber::isPrime()
{
	if(n<2) return 0;
	for(int i=2;i<=sqrt(n);i++)
		if(n%i==0)
			return 1;
		return 0;
}
void NaturalNumber::printFactor()
{
for(int j=1;j<=n;j++)
	{	if(n%j==0)
			cout<<j<<" ";
		else cout<<"";
	}
	cout<<endl;
}
bool NaturalNumber::isPerfect()
{
	int sum=0;
	for(int i=1;i<n;i++)
	{	if(n%i==0)
			sum=sum+i;
		else sum=sum+0;
	}
	if(sum==n)
		return 1;
	else return 0;
}
bool NaturalNumber::isReverse(int x)
{

	int sum=0,d=n;
	while(d!=0)
	{
	
		sum=sum*10+d%10;
		d=d/10;
	}
if(sum!=x)
	return 0;
else return 1;
}
bool NaturalNumber::isDaffodil(int x)
{
	int d=x,sum=0;
	while(d)
	{
		sum+=(d%10)*(d%10)*(d%10);
		d/=10;
	}
	if(sum==x)
		return 1;
	else return 0;
}
void NaturalNumber::printDaffodils()
{
	for(int i=2;i<n;i++)
第五题
#include <iostream>  
using namespace std; 
class CFraction  
{  
private:  
    int nume;  
    int deno;    
public:  
    CFraction(int nu,int de);   
    void set(int nu=0,int de=1);     
    void input();                 
    void simplify();   
	void amplify(int n);
	void output(int style=0);
};
CFraction::CFraction(int nu,int de) 
{
	nume=nu;
	deno=de;

}
void CFraction::set(int nu,int de)
{
	nume=nu;
	deno=de;
}
void CFraction::input()
{
	cout<<nume<<"/"<<deno<<"化简后为:";
}

void CFraction::simplify()
{
	for(int i=2;i<=nume;i++)
	{
		if(nume%i==0&&deno%i==0)
		{
			nume/=i;
			deno/=i;
			i--;
		}
		else cout<<"";
	}
	cout<<nume<<"/"<<deno<<endl;
}
void CFraction::amplify(int n)
{
	nume*=n;
	cout<<"变化和"<<nume<<"/"<<deno<<endl;
}
void CFraction::output(int style)
{
	while(style==1)
	{	cout<<nume<<"/"<<deno<<"化简"<<nume<<"/"<<deno<<endl;break;}
	while(style==2)
	{	cout<<nume<<"/"<<deno<<"化简"<<nume/deno<<"("<<nume%deno<<"/"<<deno<<")"<<endl;break;}
	while(style==3)
	{
		double n=nume,d=deno;
		cout<<nume<<"/"<<deno<<"化简"<<n/d<<endl;break;
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值