C++作业2-类和对象1

一、正整数类

#include<iostream>    
using namespace std;    
class NaturalNumber    
{private:    
int n;     
public:    
    void setValue (int x);  
    int getValue();  
    bool isPrime();    
    void printFactor();   
    bool isPerfect();  
    bool isDaffodil(int x);  
    void printDaffodils();  
};  
void NaturalNumber::setValue (int x)  
{  
    if(x>0&&(int)x==x)  
        cout<<x<<"是正整数"<<endl;  
    n=x;  
}  
int NaturalNumber::getValue()  
{  
	return n;  
}  
bool NaturalNumber::isPrime()  
{  
    int a;  
    for(a=2;a<=n;a++)  
    {  
        if(n%a==0)  
            break;  
    }  
    if(n==a)  
        return true;  
    else  
        return false;  
}  
void NaturalNumber::printFactor()  
{  
    int a;  
    for(a=1;a<=n;a++)  
    {  
        if(n%a==0)  
            cout<<a<<" ";  
    }  
}  
bool NaturalNumber::isPerfect()  
{  
    int a,sum=0;  
    for(a=1;a<n;a++)  
    {  
        if(n%a==0)  
            sum=sum+a;  
    }  
    if(sum==n)  
		return true;  
    else  
        return false;  
}  
bool NaturalNumber::isDaffodil(int x)  
{  
    if(x==1)  
        return true;  
    else if(x<10)  
        return false;  
    else if(x<100)  
    {int a,b;  
    a=x/10;b=x-a*10;  
    if((a*a*a+b*b*b)==x)  
        return true;  
    else  
        return false;  
    }  
    else if(x<1000)  
    {  
        int a,b,c;  
        a=x/100;b=(x-a*100)/10;c=x-a*100-b*10;  
        if(x==(a*a*a+b*b*b+c*c*c))  
            return true;  
        else  
            return false;  
    }  
	
}  
void NaturalNumber::printDaffodils()  
{  
    int x;  
    for(x=2;x<n;x++)  
    {  
        if(x<100&&x>10)  
        {int a,b;  
        a=x/10;b=x-a*10;  
        if((a*a*a+b*b*b)==x)  
            cout<<x<<" ";  
        }  
        else if(x<1000&&x>100)  
        {  
            int a,b,c;  
            a=x/100;b=(x-a*100)/10;c=x-a*100-b*10;  
            if(x==(a*a*a+b*b*b+c*c*c))  
                cout<<x<<" ";  
        }  
    }  
}  

void main(void)    
{    
    NaturalNumber nn;   
    nn.setValue (7);    
    cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;    
    
    ;nn.setValue (32);     
    cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;    
    
    nn.setValue (79);     
    cout<<nn.getValue()<<"的因子有:";    
    nn.printFactor();   
    cout<<endl;  
    nn.setValue(666);  
    cout<<nn.getValue()<<"的水仙花数有:  ";  
    nn.printDaffodils();  
    cout<<endl;  
}  
二、学生成绩

#include<iostream>  
#include<string>    
using namespace std;    
class Stu    
{  
public:  
    void setStudent(string n,float c,float m);  
    void show();  
    void setName(string a);  
    string getName();  
    double average();  
private:    
    string name;    //学生姓名    
    float chinese;  //语文成绩    
    float math;     //数学成绩  
};    
void Stu::setStudent(string n,float c,float m)  
{  
    name=n;chinese=c;math=m;  
}  
void Stu::show()  
{  
    cout<<"名字:  "<<name<<endl;  
    cout<<"得分  :"<<chinese<<"   "<<math<<endl;  
    cout<<"平均:   "<<(chinese+math)/2<<"   sum:  "<<(math+chinese)<<endl;  
}  
void Stu::setName(string a)  
{  
    name=a;  
}  
string Stu::getName()  
{  
    return name;  
}  
double Stu::average()  
{  
    return((math+chinese)/2);  
}  

int main()    
{    
    Stu s1,s2;    
    s1.setStudent("Lin daiyu", 98, 96); //对象置初值    
    s2.setStudent("Jia baoyu", 90, 88); //对象置初值    
    s1.show();//打印信息    
    s2.show();//打印信息    
    s1.setName("xue baochai");//重新置p1对象的名字    
    s1.show();    
    cout<<"s1.Name: "<<s1.getName()<<endl;//打印对象的名字    
    cout<<"s1.average: "<<s1.average()<<endl;//打印对象的成绩    
    return 0;    
}   

三、分数类

#include<iostream>  
using namespace std;  
class CFraction    
{    
private:    
    int nume;  // 分子    
    int deno;  // 分母    
public:  
    CFraction(int nu=0,int de=1)  
    {  
        nume=nu;deno=de;  
    }  
    void set(int nu=0,int de=1)  
    {  
		nume=nu;deno=de;  
    }    
    void input();               //按照"nu/de"的格式,如"5/2"的形式输入    
    void simplify();            //化简(使分子分母没有公因子)    
    void amplify(int n);        //放大n倍,如2/3放大5倍为10/3    
    void output(int style=0)   //输出:以8/6为例,style为0时,原样输出8/6;    
	{  
        if(style==0)  
            cout<<"原样输出:"<<nume<<"/"<<deno<<endl;  
        else if(style==1)  
        {cout<<"输出化简后的分数: ";simplify();}  
        else if(style==2)  
        {  
            int a,b;  
            if(nume>deno)  
            {  
                a=nume-deno;  
                while(1)  
                {  
                    if(a>deno)  
                        a=a-deno;  
                    else if(a<deno)  
                        break;  
                }  
            }  
            b=(nume-a)/deno;  
            cout<<"输出真分数形式: "<<b<<"("<<a<<"/"<<deno<<")"<<endl;  
        }  
        else if(style==3)  
        {  
            double c;  
            c=double(nume)/double(deno);  
            cout<<"输出小数形式: "<<c<<endl;  
        }  
    }                           
};  
void CFraction::input()  
{  
    char a;  
    cout<<"请输入一个分数(格式a/b): "<<endl;  
    while(1)  
    {  
        cin>>nume>>a>>deno;  
        if(a!='/')  
            cout<<"输入格式不正确,请重新输入"<<endl;  
        else  
            break;  
    }  
}  
void CFraction::simplify()  
{  
    int a;  
    for(a=2;a<=nume;a++)  
    {  
        if(nume%a==0)  
        {  
            if(deno%a==0)  
            {nume=nume/a;deno=deno/a;}  
        }  
    }  
    cout<<nume<<"/"<<deno<<endl;  
}  
void CFraction::amplify(int n)  
{  
    nume=nume*n;  
}  
void main()  
{  
    CFraction a1;  
    a1.set(9,7);  
    a1.output();  
    a1.output(6);  
    a1.output(4);  
    a1.input();  
    a1.output(3);  
    a1.amplify(8);  
    cout<<"将分数增大10倍后,分数为: ";  
    a1.output();  
    a1.output(7);  
    a1.output(1);  
}  
四、时间类

#include <iostream>    
using namespace std;    
class Time    
{    
public:    
    void set_time( );       
    void show_time( );  
    void add_a_sec()  
    {  
        sec=sec+1;  
    }  
    void add_a_minute()   
    {  
       minute=minute+1;  
    }  
    void add_an_hour()   
    {  
        hour=hour+1;  
    }  
    int add_seconds(int n);  
    int add_minutes(int n);  
    int add_hours(int n);  
    void tiao();  
private:     
    bool is_time(int, int, int);   //这个成员函数设置为私有的,是合适的,请品味    
    int hour;    
    int minute;    
    int sec;    
};  
void Time::add_seconds(int n)  
{  
	sec=sec+n;  
}  
void Time::add_minutes(int n)  
{  
   minute=minute+n;  
}  
void Time::add_hours(int n)  
{  
    hour=hour+n;  
}  
void Time::set_time( )     
{    
    char c1,c2;    
    cout<<"请输入时间(格式hh:mm:ss)";    
    while(1)    
    {   cin>>hour>>c1>>minute>>c2>>sec;    
	if(c1!=':'||c2!=':')    
		cout<<"格式不正确,请重新输入"<<endl;    
	else if (!is_time(hour,minute,sec))    
		cout<<"时间非法,请重新输入"<<endl;    
	else     
		break;    
    }    
}    
void Time::show_time( )          
{    
    cout<<hour<<":"<<minute<<":"<<sec<<endl;    
}    
bool Time::is_time(int h,int m, int s)    
{    
    if (h<0 ||h>24 || m<0 ||m>60 || s<0 ||s>60)    
        return false;    
    return true;    
}  
void Time::tiao()  
{  
    if(sec>=60)  
        sec=0;  
    if(minute>=60)  
        minute=0;  
    if(hour>=60)  
        hour=0;  
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值