c++ 类问题综合解答

 

1. 用类的成员函数求下列函数的值:

main函数中重复输入xx的值必须通过对象初始化得到),多次求y的值。

        



 

#include<iostream>

#include<math.h>

using namespace std;

class function{

private:

    double x;

 

public:

      function(int a)

        {

             x=a;

        }

        void put()

        {

             if(x<-3)

                 cout<<"y="<<x+10<<endl;

             if(x>=-3&&x<5)

                 cout<<"y="<<sqrt(x+3)+x<<endl;

            if(x>=5)

                 cout<<"y="<<exp(x)<<endl;

             //cout<<"还要继续计算吗?(1-YES,0-NO)"<<c<<endl;

        }

};

int main()

{

    while(1)

    {

        int x;

        cout<<"请输入x的值:";

        cin>>x;

        functiont(x);

        t.put();

        cout<<"还要继续计算吗?(1-YES,0-NO)";

        int c;

        cin>>c;

        if(c==0)

             break;

    }

    return 0;

}

2. 建立一个对象数组,内放5个学生的数据(学号、成绩),设计一个函数max,用指向对象的指针做为参数,在max函数(普通函数)中找出5个学号中成绩最高者,并输出其学号。

#include<iostream>

usingnamespace std;

classstudent{

public:

       student(int a=1,int b=1):

              num(a),score(b){}

 

       int s()

       {return score;}

       int n()

       { return num;}

private:

       int num;

       int score;

};

intmax(student* a,int n)

{

       int i,j=0,maxnum=0;

       for(i=0;i<n;i++)

       {

              int z=a[i].s();

              if(z>maxnum)

          { maxnum=a[i].s();

                    j=i;

              }

       }

       return a[j].n();

}

intmain()

{

       student a[5];

       for(int i=0;i<5;i++)

       {cout<<"请输入学号和成绩";

        int m,n;

        cin>>m>>n;

        a[i]=student(m,n);

       }

       cout<<"最好成绩的学号"<<max(a,5)<<endl;

       system("pause");

       return 0;

}

3.声明一个表示数组的类Array。一个Array对象可以包含多个整型元素。Array的成员说明如下:

(1) 数据成员a表示实际用于存储数据的整型数组;

(2) 整型变量num表示当前数组中的含有效数据的元素个数;

(3) 数据成员size表示数组的容量,数组中的元素个数最多不能超过size

 (4) 成员函数add用于向数组的末尾添加一个元素;

(5) 成员函数get用于获取数组中指定位置的元素;

(6) 成员函数get_size用于获知数组的最多存放元素个数。

(7) 成员函数get_num用于获知数组当前已存放多少数据。

main函数中创建数组类Array的对象,完成各成员函数功能的测试。

代码提示:

#include<iostream>

#define MAX  20

using namespacestd;

class Array{

  private:

int a[MAX], size,num;

  public:

        Array(int a=0,int b=0):size(a),num(b){}

        void add()

        { if(num<=size-1)

              { cout<<"请输入第"<<num+1<<"整数:";

             cin>>a[num];

            num++;

           }

          else

                     cout<<"数组满了"<<endl;

        }

        void get()

        {

               int t;

               cout<<"请输入你要找出的数据所在位置:";

               cin>>t;

               if(t>num)

                      cout<<"该位置还没数据"<<endl;

               else

                      cout<<"所查数据是:"<<a[t-1]<<endl;

        }

        void get_size()

        {

               cout<<"数组最多可存放数据:"<<size<<endl;

        }

        void get_num()

        {

               cout<<"数组已经存放的数据"<<num<<"  "<<"还可以存放数据"<<size-num<<endl;

        }

};

int main()

{

       Array x1(5,0);//只测试5个的数据

       for(int i=0;i<=5;i++)

       {

              x1.add();

       }

       x1.get();

       x1.get_num();

       x1.get_size();

       system("pause");

       return 0;

}

 

              测试(数组长度为5)执行结果一:

 

测试(数组长度为20)执行结果二:

 

 

 

4. 定义一个String类:

classString{

 public :

   String(char []); //有参构造函数

   String();//默认构造函数

String(String &);//复制构造函数  

   ~String(){ delete p;   } //析构函数

   void setstring(char []);  //为对象赋值字符串

   char *Substring(int,int); //求字符串从第n个位置到m个位置的子串;

   int length(); //返回字符串的长度

   void print(); //输出字符串

 private:

   char *p;  //指针存放字符串首地址

};

main主函数中实现该类的应用。

#include<iostream>

#include<string>

usingnamespace std;

 class String{

 public :

    String(char* a=NULL);//有参构造函数

   //String(){};//默认构造函数

   //String(String &a);//复制构造函数 

   ~String(){ delete p;   } //析构函数

   void setstring(char* a);  //为对象赋值字符串

   char *Substring(int n,int m); //求字符串从第n个位置到m个位置的子串;

   int length(); //返回字符串的长度

   void print(); //输出字符串

 private:

   char *p; //指针存放字符串首地址

};

String::String(char*a)

{

       if(a==NULL)

       {

              p=new char[1];

              *p='\0';

       }

       else

       {

              int length=strlen(a);

              p=new char[length+1];

              strcpy_s(p,length+1,a);

       }

 }

 /*String::String(String &a)

 {

    int len=strlen(a.p);

      p=newchar[len+1];

      strcpy_s(p,len+1,a.p);

  } */

voidString::setstring(char* a)

{

       int len=strlen(a);

       p=new char[len+1] ;

       strcpy_s(p,len+1,a);

}    

char*String::Substring(int n,int m)

{

       char* d;

       d=new char[m-n+2];

       for(int i=n;i<=m;i++)

       {

              if(p[i]!='\0')

              d[i-n]=p[i];

       }

       d[m-n+1]='\0';

       return d;

}

intString::length()

{

       return strlen(p);

}

voidString::print()

{

       cout<<p<<endl;

}           

intmain()

{

       String s1("Chinse"),s2,s3;

       s2=s1;

    char str[9]="republic";

    cout<<"字符串1";

    s1.print();

    cout<<"长度:"<< s1.length()<<endl;

    cout<<"字符串2";

    s2.print();

    cout<<"长度:"<< s2.length()<<endl;

    cout<<"字符串3"<<" "<<"长度"<<s3.length()<<endl;

    s3.setstring(str);

    cout<<"重置后,字符串3" ;

    s3.print();

    cout<<"长度:"<<s3.length()<<endl<<"字符串3从第2位到第7位的子串:"<<s3.Substring(2,7)<<"长度:"<<6<<endl;

       system("pause");

       return 0; }     

 

 

5. 定义一个时钟类Time,实现对时间变化进行计算的有关操作。

私有成员:hour,minite , second,分别表示 小时、分、秒,其中小时在0~24之间,分和秒在0~60之间。

构造函数形式为Time((int  h , int m , int  s )

要求:

(1)    定义2个成员函数,一个设置时间,一个显示时间;

(2)    定义函数Time Time_plus(Time& int ),实现Time对象与整数值n(n代表秒)的加法运算。注意,小时、分、秒的取值范围。(提示:声明为Time类的友元)

(3)    定义函数TimeTime_pp(Time &);  实现Time对象自增运算(前++),即秒数加1(提示:声明为Time类的友元)

(4)    main函数中,创建时钟对象,并完成上述函数调用。

#include<iostream>

#include<string>

usingnamespace std;

classtime

{

private:

       int hour,minite,second;

public:

       time(int h,int m,ints):hour(h),minite(m),second(s){}

       time(){}

       void show()

       {

              cout<<"时间是:"<<hour<<":"<<minite<<":"<<second<<endl;

       }

       friend time time_plus(time &t,int m);

       friend time time_pp(time &t);

};

timetime_plus(time &t,int m)

{

        int a,b;

        time ans;

        a=(t.second+m)/60;

        ans.second=(t.second+m)%60;

        b=(t.minite+a)/60;

        ans.minite=(t.minite+b)%60;

       ans.hour=(b+t.hour)%24;

       return ans;

}

timetime_pp(time &t)

{   int a,b;

        time ans;

        a=(t.second+1)/60;

        ans.second=(t.second+1)%60;

        b=(t.minite+a)/60;

        ans.minite=(t.minite+b)%60;

       ans.hour=(b+t.hour)%24;

       return ans;

}

intmain()

{ timem1(23,59,59),m2,m3;

  m2=time_plus(m1 , 10);   m3=time_pp(m2) ;

  m1.show(); 

  m2.show();

  m3.show();

  system("pause");

  return 0;

}

6. 商店销售某一商品,每天公布统一的折扣(设为95),同时允许销售人员在销售时灵活掌握售价,在此基础上,一次购10件以上者,还可以享受9.8折优惠。现已知当天3个销货员的销售情况为

销货员(num)     销货件数(quantity)     销售价格(price)

101              5                    23.5

102              12                   24.56

103              100                  21.5

请编写程序,计算出当日商品的总销售款sum以及每件商品的平均价格。要求用静态数据成员和静态成员函数。

#include<iostream>

#include<string>

usingnamespace std;

classProduct

{

public:

       Product(int m, int q, floatp):num(m),quantity(q),price(p) {}

       Product();

    void total();   //所有商品加起来总销售数量和销售款

       static float average();   //静态成员函数,求平均价格

       static void display();   //静态成员函数,显示总销售款和平均价格

 

private:

       int num;     //销售员

       int quantity;  //销售数量

       float price;   //销售价格

    static float discount;  //商店统一折扣

       static float sum;    //总销售款

       static int n;   // 总销售数量

 

};

floatProduct::discount=0.95;

floatProduct::sum=0;

intProduct::n=0;

void Product::total()

{

       if(quantity<=10)

              sum+=quantity*price*discount;

       else

              sum+=quantity*price*0.98*discount;

         n+=quantity;

}

floatProduct::average()

{

       return sum/n;

}

voidProduct::display()

{

       cout<<"总销售款"<<sum<<endl;

       cout<<"平均价格"<<Product::average()<<endl;

}

intmain()

{

       Producta[3]={Product(101,5,23.5),Product(102,12,24.56),Product(103,100,21.5)};

       for(int i=0;i<3;i++)

              a[i].total();

       Product::display();

       system("pause");

       return 0;

}

7. 编写程序对用户数据进行管理,要求按姓名的字典顺序对用户信息进行排序。试定义表示用户信息的类person和处理用户信息的类compute实现上述功能。具体要求如下:

1)定义类person,其成员如下:

(a) 私有成员:charname[10],num[10]: 分别保存用户的姓名和电话号码。

2)定义类compute,类compute必须声明为person的友元类。其成员如下:

(a) 私有成员:personpn[3]: 表示3个用户。

(b)公用成员函数:

l Voidsetdata(): 通过键盘输入3个用户的数据。

l Voidsort(): 将数组pn表示的用户信息按姓名排序。

l Voidprint(): 按照指定格式输出用户信息。

在主函数中定义一个compute对象,再通过键盘输入每个用户的基本信息,调用相关成员函数完成对类computeperson进行测试。

#include<iostream>

#include<string>

using namespace std;

string min_s(string a,string b)

{

   if(a<b)  return a;

   elsereturn b;

}

class compute;  //声明compute

class person    //定义person

{ public:

friend class compute;

private: string name, num;

};

 

class compute   //声明compute

{public:

void setdata();

void sort();

void print();

 private:

      person pn[3];

};

void compute::setdata()

{

   cout<<"请输入用户的姓名和号码:"<<endl;

   for(inti=0;i<3;i++)

   {

          cin>>pn[i].name>>pn[i].num;

   }

}

void compute::sort()

{

   for(inti=0;i<2;i++)

          for(intj=i+1;j<3;j++)

          if(pn[i].name>pn[j].name)

          {

                 persontmp;

                 tmp=pn[i];

                 pn[i]=pn[j];

                 pn[j]=tmp;

          }

}

void compute::print()

{

   cout<<"排序后的用户信息:"<<endl;

   for(inti=0;i<3;i++)

          cout<<pn[i].name<<"  "<<pn[i].num<<endl;

}

int main()

{

   computea;

   a.setdata();

   a.sort();

   a.print();

   system("pause");

   return0;

}

 

8. 利用模板类,实现6个整数的比较大小、6个浮点型数据比较大小、6个字符串比较大小,并排序输出。成员函数主要有(1)输入数据的函数input(2) 排序函数;(3) 输出数据的函数output

#include<iostream>

#include<string>

using namespace std;

template<class T>

class compare

{

private:

   T a[6];

public:

   void  input()

   {

          /*if(T==int)

                 cout<<"请输入6个整数:"<<endl;

          if(T==float)

                 cout<<"请输入6个实数:"<<endl;

          if(T==string)

                 cout<<"请输入6个字符串:"<<endl;*/

          for(inti=0;i<6;i++)

                 cin>>a[i];

   }

   void sort()

   {

          for(inti=0;i<5;i++)

                 for(intj=i+1;j<6;j++)

                        if(a[i]>a[j])

                        {

                               Tt;

                               t=a[i];

                               a[i]=a[j];

                               a[j]=t;

                        }

   }

   void output()

   {

          /*if(T==int)

                 cout<<"6个整数排序后:"<<endl;

          if(T==float)

                 cout<<"6个实数排序后:"<<endl;

          if(T==string)

                 cout<<"6个字符串排序后:"<<endl;*/

          for(inti=0;i<6;i++)

                 cout<<a[i]<<"";

              cout<<endl;

   }

};

   int main()

   {

          compare<int>a;

          cout<<"请输入6个整数:"<<endl;

          a.input();

          a.sort();

          cout<<"6个整数排序后:"<<endl;

          a.output();

          compare<float>b;

          cout<<"请输入6个实数:"<<endl;

          b.input();

          b.sort();

                 cout<<"6个实数排序后:"<<endl;

          b.output();

          compare<string>c;

          cout<<"请输入6个字符串:"<<endl;

          c.input();

          c.sort();

          cout<<"6个字符串排序后:"<<endl;

          c.output();

          system("pause");

          return0;

   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值