C++第二次实验作业

来源:互联网 发布:解压rar的软件 编辑:程序博客网 时间:2024/04/28 19:47

一、阅读、运行程序后,按要求增加类的功能:

#include <iostream>using namespace std;class Time{public:void set_time( );   void show_time( );  void add_an_hour() {hour++;}void add_a_minute(){minute++;if(minute>=60){add_an_hour();minute=0;}}void add_a_sec(){sec++;if(sec>=60){add_a_minute();sec=0;}}void add_seconds(int n); //增加n秒钟void add_minutes(int n); //增加n分钟void add_hours(int n);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;return true;}void Time::add_hours(int n){hour+=n;}void Time::add_minutes(int n){minute+=n;if(minute>60){hour+=minute/60;minute%=60;}}void Time::add_seconds(int n){sec+=n;if(sec>60){add_minutes(sec/60);sec/=60;}}int main( ){Time t1;  int n;t1.set_time( );   t1.show_time( );cout<<"\n增加一秒后:";t1.add_a_sec();t1.show_time( );cout<<endl;cout<<"再增加一分后:";t1.add_a_minute();t1.show_time( );cout<<endl;cout<<"\n增加一时后:";t1.add_an_hour();t1.show_time( );cout<<"\n请输入增加的秒:";cin>>n;cout<<"\n增加"<<n<<"秒后:";t1.add_seconds(n);t1.show_time( );cout<<"\n请输入增加的分:";cin>>n;cout<<"\n增加"<<n<<"分后:";t1.add_minutes(n);t1.show_time( );cout<<"\n请输入增加的时:";cin>>n;cout<<"\n增加"<<n<<"时后:";t1.add_hours(n);t1.show_time( );return 0;}

二、正整数类:

#include<iostream>  using namespace std;  class NaturalNumber  {  public:      int 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的水仙花数;  private:      int n;  };  int NaturalNumber::setValue (int x)  {      if(x>0) n=x;      else {cout<<"x不是正整数\n"; return -1;}  }  int NaturalNumber::getValue()  {      return n;  }  bool NaturalNumber::isPrime()  {      int i=2;      if(n==1) return 0;      else      {          for(i=2;i*i<=n;i++)          {              if(n%i==0)                  return 0;          }      }      return 1;  }  void NaturalNumber::printFactor()//输出数据成员n的所有因子,包括1和n自身  {      for(int i=1;i<=n;i++)          if(n%i==0) cout<<i<<" ";          cout<<endl;  }  bool NaturalNumber::isPerfect()//判断数据成员n是否为完全数。若一个正整数n的所有小于n的因子之和等于n, 则称n为完全数, 如6=1+2+3是完全数。  {      int s;      for(int i=1;i<n;i++)      {          if(n%i==0) s+=i;      }      if(s==n) return 1;      else return 0;  }  bool NaturalNumber::isReverse(int x)//判断形式参数x是否为数据成员n的逆向数(例321是123的逆向数)。  {      int a[20],m=n,i;      for(i=0;m;i++)      {          a[i]=m%10;          m/=10;      }      while(i>0||x)      {          if(a[--i]!=x%10) return 0;          x/=10;      }      return 1;  }  bool NaturalNumber::isDaffodil(int x)//判断形式参数x是否是水仙花数。水仙花数的各位数字立方和等于该数,如153=1*1*1+5*5*5+3*3*3  {      int s=0,m=x;      while(m)      {          s+=(m%10)*(m%10)*(m%10);              m/=10;      }      if(x==s) return 1;      else return 0;  }  void NaturalNumber::print_Daffodils()//显示所有大于1,且小于数据成员n的水仙花数;  {      for(int i=1;i<n;i++)      {          if(isDaffodil(i)) cout<<i<<" ";      }      cout<<endl;  }  int main()  {      int n;      NaturalNumber nn;   //定义类的一个实例(对象)      nn.setValue (5);      cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数"<<endl;      cout<<nn.getValue()<<( nn.isPerfect()?"是":"不是")<<"完全数"<<endl;      nn.setValue (59);      cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;      cout<<nn.getValue()<<(nn.isPerfect()?"是":"不是")<<"完全数"<<endl;      cout<<nn.getValue()<<"你觉得的逆向数是:";          cin>>n;      while(!nn.isReverse(n))      {          cout<<"不是,请重新输入:";          cin>>n;      }      cout<<"对了\n";      nn.setValue (81);      cout<<nn.getValue()<<(nn.isPrime()?"是":"不是")<<"素数" <<endl;      cout<<nn.getValue()<<(nn.isPerfect()?"是":"不是")<<"完全数"<<endl;      cout<<nn.getValue()<<"你觉得的逆向数是:";          cin>>n;      while(!nn.isReverse(n))      {          cout<<"不是,请重新输入:";          cin>>n;      }      cout<<"\n对了\n";      cout<<nn.getValue()<<"的因子有:";      nn.printFactor();      nn.setValue (999);      cout<<nn.getValue()<<"以下的水花仙数有:\n";      nn.print_Daffodils();        //随着成员函数的实现,增加代码以完成相关的测试。注意判断类的成员函数需要测试是或否两种情况……  } 

三、Book类

#include<iostream>       #include<string>       using namespace std;    class Book    {    public:        void setBook(string n,string w,string p,int pr,int nu,string N);        void borrow();        void restore();        void print();        void set_NO(string N);        string get_NO();    private:        string name,writer,publicer,NO;        int price,number;    };    void Book::setBook(string n,string w,string p,int pr,int nu,string N)  {      name=n;      writer=w;      publicer=p;      price=pr;      number=nu;      NO=N;  }    void Book::borrow()  {      number--;  }    void Book::restore()  {      number++;  }    void Book::print()  {      cout<<"书名:"<<name<<endl;      cout<<"作者:"<<writer<<endl;      cout<<"出版社:"<<publicer<<endl;      cout<<"书号:"<<NO<<endl;      cout<<"价格:"<<price<<endl;      cout<<"数量:"<<number<<endl;      cout<<endl;  }    void Book::set_NO(string N)  {      NO=N;  }    string Book::get_NO()  {      return NO;  }    int main()  {      Book book1,book2;      book1.setBook("时间简史","史蒂芬霍金","湖南科学技术出版社",45,56,"ISBN 978-7-5357-3230-9");      book2.setBook("大学物理基础","吴百诗","北京科学出版社",24,16,"ISBN 978-7-03-018442-9");      book1.borrow();      book1.print();      book2.restore();      book2.print();      book2.set_NO("ISBN 111-1-1111-1111-1");      book2.print();      return 0;  }  

四、学生成绩

#include<iostream>  #include<string>  using namespace std;  class Stu  {  public:      void setStudent(string na,int c,int m);      void show();      void setName(string na);      string getName();      float average();  private:      string name;    //学生姓名      float chinese;  //语文成绩      float math;     //数学成绩      float ave;      float sum;  };  void Stu::setName(string na)  {      name=na;  }  void Stu::setStudent(string na,int c,int m)  {      name=na;      chinese=c;      math=m;      sum=math+chinese;      ave=sum/2;  }  void Stu::show()  {      cout<<"Name:  "<<name<<endl;      cout<<"Score:  "<<chinese<<"     "<<math<<endl;      cout<<"average:  "<<ave<<"     Sum:  "<<sum<<endl;      cout<<endl;  }  string Stu::getName()  {      return name;  }  float Stu::average()  {      return ave;  }  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;  }  


0 0
原创粉丝点击