c++第2次上机作业

来源:互联网 发布:同和软件 编辑:程序博客网 时间:2024/05/01 05:35

1:第一题(时间)

#include<iostream>
using namespace std;
class Time
{
public:
void set_time();
void show_time();
void add_a_sec();
void add_a_minute();
void add_an_hour();
void add_seconds(int);
void add_minutes(int);
void add_hours(int);
private:
bool is_time(int,int,int);
int hour;
int minute;
int sec;
};
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;
 else
return true;
 }
 //////////////////////////////////////
void Time::add_a_sec()
{   sec++;
   if(sec>=60)
   { minute++;
     sec-=60;
   }
   if(minute>=60){
     hour++; 
minute-=60;
   }
  if(hour>24)
hour-=24;
}
void Time::add_a_minute()
{
minute++;
if(minute>=60)
{ hour++;
   minute-=60;
}
 if(hour>24)
hour-=24;
}
void Time::add_an_hour()
{
hour++;
if(hour>24)
hour-=24;
}
void Time::add_seconds(int n)
{
sec+=n;
if(sec>=60)
{
sec=sec%60;
minute+=sec/60;
}
if(minute>=60)
{
minute%=60;
hour+=minute/60;
}
if(hour>24)
{
         hour%=24;
}
}


int main()
{  
Time t1;
t1.set_time();
t1.show_time();
t1.add_a_sec();
t1.show_time();
t1.add_a_minute();
t1.show_time();
t1.add_an_hour();
t1.show_time();
t1.add_seconds(1000);
t1.show_time();
return 0;
}

2:第二题(正整数类)


#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 (6);    
    cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;    
    
    ;nn.setValue (37);     
    cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;    
    
    nn.setValue (84);     
    cout<<nn.getValue()<<"的因子有:";    
    nn.printFactor();   
    cout<<endl;  
    nn.setValue(888);  
    cout<<nn.getValue()<<"的水仙花数有:  ";  
    nn.printDaffodils();  
    cout<<endl;  
}  

3:第三题(Book类)

#include<iostream>
#include<string>
using namespace std;
class Book
{
public:
void setBook(char n,char w,char p,int x,int num, int N);
void borrow();
void restore();
void print();
void set_NO();
void get_NO();
private:
string name;
    string writer;
string publicer;
int price;
int number;
int NO;
};
void Book::setBook(string n,string w,string p,int x,int num,int N)
{ name=n;writer=w;publicer=p;price=x;number=num;NO=N;
}
void Book::borrow()
{
number-=1;
cout<<"剩余书的数量"<<number;
}
void Book::restore()
{
number+=1;
cout<<"归还后的数量"<<number;
}
void Book::print()
{
cout<<"name:"<<name<<"writer:"<<writer<<"publicer:"<<publicer<<"price:"<<price<<"number:"<<"NO:"<<NO<<endl;
}
void Book::set_NO()
{
int a;       
cout<<"原来的书号是"<<NO<<"请输入新的书号";
cin>>a;
NO=a;
cout<<"修改后书号"<<number<<endl;
}
void Book::get_NO()
{
int b;
cout<<"请输入书号:";
cin>>b;
number=b;
cout<<"该书的书号为:"<<number;
}
void main()
{      Book B1;
       B1.setBook("Qin Cheng","Gu Man","Hua Huo",28,100,90);
  B1.print();
  B1.borrow();
  B1.print();
  B1.restore();
  B1.print();
  B1.set_NO();
  B1.print();
  B1.get_NO();
  B1.print();
}

4:第五题(分数类)

#include<iostream>
#include <iomanip>
using namespace std;
class CFraction
{
private:
    int nume;  // 分子
    int deno;  // 分母
public:
    CFraction(int nu=0,int de=1);   //构造函数,初始化用
    void set(int nu=0,int de=1);    //置值,改变值时用
    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;
//style为1时,输出化简后形式4/3;
//style为2时,输出1(1/3)形式,表示一又三分之一;
//style为3时,用小数形式输出,如1.3333;
//默认方式0
};
/*
 *  初始化
 */
CFraction::CFraction(int nu,int de)
{
    nume = nu;  
deno = de;
cout<<nume<<"/"<<deno;
}
/*
 *创建
 */
void CFraction::set(int nu,int de)
{
nume = nu;  
deno = de;
}
/*
 *输出
 */
void CFraction::input()
{
     cout<<nume<<"/"<<deno;
}
/*
 *化简
 */
void CFraction::simplify()
{
int temp,mt=nume,r,nt=deno;
if(mt<nt)
   {
    temp=mt;
    mt=nt;
    nt=temp;
   }
while(nt!=0)
{   
    r=mt%nt;
    mt=nt;
nt=r;  
}

   cout<<nume/mt<<"/"<<deno/mt;
}
void CFraction::amplify(int n)
{
int nume1;
nume1 = nume*n;
cout<<nume1<<"/"<<deno;
}


/*
 *选择
 */
void CFraction::output(int style)
{
int mt=nume,nt=deno,r,temp;
double a;
if(mt<nt)
   {
    temp=mt;
    mt=nt;
    nt=temp;
   }
while(nt!=0)
{   
    r=mt%nt;
    mt=nt;
nt=r;  
}
if(style==1)
   cout<<nume/mt<<"/"<<deno/mt;
else if(style==2)
{
if(nume-deno>0)
{
  cout<<(nume/mt)/(deno/mt)<<"("<<((nume/mt)-(deno/mt))<<"/"<<(deno/mt)<<")";
}
else
cout<<"无带分数!!!";
}
else if(style==3)
{
a = (nume/mt*1.0)/(deno/mt);
   cout<<setprecision(10)<<a;
}
else
cout<<nume<<"/"<<deno;
}


//主函数
void  main()
{
int a,b,n,d;
cout<<"初始值为: ";
CFraction c;
cout<<endl;
cout<<"请输入分子: ";
    cin>>a;
cout<<"请输入分母: ";
cin>>b;
    c.set(a,b);
    cout<<"创建成功:";
c.input();
cout<<endl<<"化简为: ";
    c.simplify();
cout<<endl<<"输入n值:";
cin>>n;
    c.amplify(n);
cout<<endl;
    cout<<"请选择操作:0:原样输出   1:输出化简后形式   2:输出带分数形式   3:输出小数形式"<<endl; 
c.output(d);
}








0 0