oj平台做题汇总3

来源:互联网 发布:2017中国最大数据公司 编辑:程序博客网 时间:2024/05/04 13:18
//定义一个Teacher(教师)类(教师号,姓名,性别,薪金)和一个Student(学生)类//(学号,姓名,性别,成绩),二者有一部分数据成员是相同的,num(号码),name(姓名),sex(性别)。//编写程序,将一个Student对象(学生)转换为Teacher(教师)类,只将以上3个相同的数据成员移植过去。//可以设想为: 一位学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,//应当保留并成为其教师数据的一部分。#include <iostream>#include <iomanip>using namespace std;class Student{public:    Student(){}    Student(int n,string na,char s,float sc):num(n),name(na),sex(s),score(sc){}    void display()    {        cout<<"num:"<<num<<endl;        cout<<"name:"<<name<<endl;        cout<<"sex:"<<sex<<endl;        cout<<"score:"<<score<<endl;    }    int get_num()    {        return num;    }    string get_name()    {        return name;    }    char get_sex()    {        return sex;    }private :    int num;    string name;    char sex;    float score;};class Teacher{public:    Teacher(){}    Teacher(int n,string na,char s,float p):num(n),name(na),sex(s),pay(p){}    Teacher(Student &s)    {        num=s.get_num();        name=s.get_name();        sex=s.get_sex();    }    void display()    {        cout<<"num:"<<num<<endl;        cout<<"name:"<<name<<endl;        cout<<"sex:"<<sex<<endl;        cout<<"pay:"<<pay<<endl;    }    void setpay(double p)    {        pay=p;    }private :    int num;    string name;    char sex;    float pay;};int main(){    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    int num;    char name[20];    char sex;    float score;    float pay;    cin>>num>>name>>sex>>pay;    Teacher teacher1(num,name,sex,pay);    cin>>num>>name>>sex>>score;    Student student1(num,name,sex,score);    cout<<"student1:"<<endl;    student1.display();    Teacher teacher2=Teacher(student1);    teacher2.setpay(1500);    cout<<"teacher2:"<<endl;    teacher2.display();    return 0;}
//请编写程序,处理一个复数与一个double数相加的运算,//结果存放在一个double型的变量d1中,输出d1的值,再以复数形式输出此值。//定义Complex(复数)类,在成员函数中包含重载类型转换运算符://operator double() { return real; }#include <iostream>#include <iomanip>using namespace std;class Complex{public:    Complex();    Complex(double r);    Complex(double r,double i);    operator double();    void display();private:    double real;    double imag;};//***********Complex::Complex(){}Complex::Complex(double r){    real=r;    imag=0;}Complex::Complex(double r,double i){    real=r;    imag=i;} Complex::operator double() { return real; } void Complex::display() {     cout<<"("<<real<<", "<<imag<<")"<<endl; }//**************int main(){    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    double real,imag;    cin>>real>>imag;    Complex c1(real,imag);    double d1;    cin>>d1;    d1=d1+c1;    cout<<"d1="<<d1<<endl;    Complex c2=Complex(d1);    cout<<"c2=";    c2.display();    return 0;}

//有两个矩阵a和b,均为2行3列。求两个矩阵之和。重载运算符“+”,使之能用于矩阵相加(如c=a+b)。//重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。#include <iostream>using namespace std;class Matrix{public:    Matrix();    friend Matrix operator+(Matrix &,Matrix &);    friend ostream& operator<<(ostream&,Matrix&);    friend istream& operator>>(istream&,Matrix&);private:    int mat[2][3];};//*****************Matrix::Matrix(){}Matrix operator+(Matrix &m1,Matrix &m2){    Matrix m;    int i,j;    for(i=0;i<2;i++)    {        for(j=0;j<3;j++)        {            m.mat[i][j]=m1.mat[i][j]+m2.mat[i][j];        }    }    return m;}ostream& operator<<(ostream&out,Matrix&m){    int i,j;    for(i=0;i<2;i++)    {        for(j=0;j<2;j++)        {            out<<m.mat[i][j]<<" ";        }        out<<m.mat[i][2]<<endl;    }    return out;}istream& operator>>(istream&in,Matrix&m){    int i,j;    for(i=0;i<2;i++)    {        for(j=0;j<3;j++)        {            in>>m.mat[i][j];        }    }    return in;}/* C++代码 */int main(){    Matrix a,b,c;    cin>>a;    cin>>b;    c=a+b;    cout<<c<<endl;    return 0;}

//定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。//参加运算的两个运算量可以都是类对象,也可以其中有一个是整数,顺序任意。//例如,c1+c2,i+c1,c1+i均合法(设i为整数,c1,c2为复数)。编写程序,分别求两个复数之和、整数和复数之和。#include <iostream>#include <iomanip>using namespace std;class Complex{public:    Complex()    {        real=0;        imag=0;    }    Complex(double r,double i)    {        real=r;        imag=i;    }    Complex operator+(Complex &c2);    Complex operator+(int &i);    friend Complex operator+(int&,Complex &);    void display();private:    double real;    double imag;};//*****************Complex Complex::operator+(Complex &c2){    return Complex(this->real+c2.real,this->imag+c2.imag);}Complex Complex::operator+(int &i){    return Complex(this->real+i,this->imag);}Complex operator+(int&i,Complex &c){    return Complex(c.real+i,c.imag);}void Complex::display(){    cout<<"("<<real<<","<<imag<<"i)"<<endl;}/* C++代码 */int main(){    double real,imag;    cin>>real>>imag;    Complex c1(real,imag);    cin>>real>>imag;    Complex c2(real,imag);    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    Complex c3=c1+c2;    cout<<"c1+c2=";    c3.display();    int i;    cin>>real>>imag;    cin>>i;    c3=Complex(real,imag)+i;    cout<<"c1+i=";    c3.display();    cin>>i;    cin>>real>>imag;    c1=Complex(real,imag);    c3=i+c1;    cout<<"i+c1=";    c3.display();    return 0;}

//定义一个复数类Complex,重载运算符“+”,“-”,“*”,“/”,//使之能用于复数的加、减、乘、除。运算符重载函数作为Complex类的成员函数。编写程序,分别求两个复数之和、差、积和商。#include <iostream>#include <iomanip>using namespace std;class Complex{public:    Complex();    Complex(double r,double i);    Complex operator+(Complex &c2);    Complex operator-(Complex &c2);    Complex operator*(Complex &c2);    Complex operator/(Complex &c2);    void display();private:    double real;    double imag;};/* C++代码 */Complex::Complex(){}Complex::Complex(double r,double i){    real=r;    imag=i;}Complex Complex::operator+(Complex &c2){    return Complex(this->real+c2.real,this->imag+c2.imag);}Complex Complex::operator-(Complex &c2){    return Complex(this->real-c2.real,this->imag-c2.imag);}Complex Complex::operator*(Complex &c2){    return Complex(this->real*c2.real-this->imag*c2.imag,this->imag*c2.real+this->real*c2.imag);}Complex Complex::operator/(Complex &c2){    return Complex((this->real*c2.real+this->imag*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag),(this->imag*c2.real-this->real*c2.imag)/(c2.real*c2.real+c2.imag*c2.imag));}void Complex::display(){    cout<<"("<<real<<","<<imag<<"i)"<<endl;}//****************int main(){    double real,imag;    cin>>real>>imag;    Complex c1(real,imag);    cin>>real>>imag;    Complex c2(real,imag);    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    Complex c3=c1+c2;    cout<<"c1+c2=";    c3.display();    c3=c1-c2;    cout<<"c1-c2=";    c3.display();    c3=c1*c2;    cout<<"c1*c2=";    c3.display();    c3=c1/c2;    cout<<"c1/c2=";    c3.display();    return 0;}

//定义一个复数类Complex,重载运算符“+”,使之能用于复数的加法运算。//将运算符函数重载为非成员、非友元的普通函数。编写程序,求两个复数之和。#include <iostream>#include <iomanip>using namespace std;class Complex{public:    Complex();    Complex(double r,double i);    double get_real();    double get_imag();    void display();private:    double real;    double imag;};//****************Complex::Complex(){}Complex::Complex(double r,double i){    real=r;    imag=i;}double Complex::get_real(){    return real;}double Complex::get_imag(){    return imag;}void Complex::display(){    cout<<"("<<real<<","<<imag<<"i)"<<endl;}Complex operator +(Complex &c1,Complex &c2){    return Complex(c1.get_real()+c2.get_real(),c1.get_imag()+c2.get_imag());}/* C++代码 */int main(){    double real,imag;    cin>>real>>imag;    Complex c1(real,imag);    cin>>real>>imag;    Complex c2(real,imag);    Complex c3=c1+c2;    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    c3.display();    return 0;}
<pre name="code" class="cpp">//声明一个类模板,利用它分别实现两个整数、浮点数和字符的比较,//求出大数和小数。说明:在类模板外定义各成员函数。

#include <iostream>#include <iomanip>using namespace std;template<class numtype>class Compare{public:    Compare(numtype a,numtype b);    numtype max();    numtype min();private:    numtype x,y;};//****************template<class numtype>Compare<numtype>::Compare(numtype a,numtype b){    x=a;    y=b;}template<class numtype>numtype Compare<numtype>::max(){    return (x>y)?x:y;}template<class numtype>numtype Compare<numtype>::min(){    return (x<y)?x:y;}/* C++代码 */int main(){    int i1,i2;    cin>>i1>>i2;    Compare<int> cmp1(i1,i2);    cout<<cmp1.max()<<" "<<cmp1.min()<<endl;    float f1,f2;    cin>>f1>>f2;    Compare<float> cmp2(f1,f2);    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    cout<<cmp2.max()<<" "<<cmp2.min()<<endl;    char c1,c2;    cin>>c1>>c2;    Compare<char> cmp3(c1,c2);    cout<<cmp3.max()<<" "<<cmp3.min()<<endl;    return 0;}

//设计一个日期类和时间类,编写display函数用于显示日期和时间。//要求:将Time类声明为Date类的友元类,通过Time类中的display函数引用Date类对象的私有数据,//输出年、月、日和时、分、秒。

#include <iostream>using namespace std;class Time;class Date{private:   int year,month,day;public:    Date(int y,int m,int d):year(y),month(m),day(d){}    friend class Time;};class Time{private:   int hour,minute,second;public:   Time(int h,int m,int s):hour(h),minute(m),second(s){}   void display(Date &d)   {       cout<<d.year<<"/"<<d.month<<"/"<<d.day<<endl;       cout<<hour<<":"<<minute<<":"<<second<<endl;   }};int main(){    int year,month,day;    cin>>year>>month>>day;    Date d1(year,month,day);    int hour,minute,second;    cin>>hour>>minute>>second;    Time t1(hour,minute,second);    t1.display(d1);    return 0;}

//商店销售某一商品,每天公布统一的折扣(discount)。同时允许销售人员在销售时灵活掌握售价(price),在此基础上,//一次购10件以上者,//还可以享受9.8折优惠。现已知当天m个销货员销售情况为//         销货员号(num)            销货件数(quantity)       销货单价(price)////               101                                              5                            23.5////               102                                            12                            24.56////               103                                           100                           21.5////请编写程序,计算出当日此商品的总销售款sum以及每件商品的平均售价。要求用静态数据成员和静态成员函数。//(提示: 将折扣discount,总销售款sum和商品销售总件数n声明为静态数据成员,再定义静态成员函数average(求平均售价)//和display(输出结果)。

#include <iostream>#include <iomanip>using namespace std;class Product{private:   static int n;//总销售件数   static float sum;//总销售额   static float discount;   int num;//售货员号   float price;//个人销售额   int quantity;//个人销售件数public:   Product(){}   Product(int n,int q,float p):num(n),quantity(q),price(p){}   static float average();   static void display();   void total();};float Product::average(){    return (sum/n);}void Product::total(){    n+=quantity;    if(quantity<=10)    {        sum+=(price*(1-discount)*quantity);    }    else    {        sum+=(price*(1-discount)*quantity*0.98);    }}void Product::display(){    cout<<sum<<endl;    cout<<average()<<endl;}//***********float Product::discount=0.05;float Product::sum=0;int Product::n=0;int main(){    const int NUM =10;    Product Prod[10];    int m,i;    cin>>m;    int num;    int quantity;    float price;    for(i=0; i<m; i++)    {        cin>>num>>quantity>>price;        Product temp(num,quantity,price);        Prod[i]=temp;    }    for(i=0; i<m; i++)       Prod[i].total();    cout<<setiosflags(ios::fixed);    cout<<setprecision(2);    Product::display();    return 0;}


                                             
0 0