cpp一轮复习

const char * months[12] = {"January","February","March","April","May","June","July","August","September","October","November","December"};
        
        int m;
        cin >> m;
        if(m >= 1 && m <= 12)
            cout << months[m-1] <<endl;
        else 
            cout << "error" << endl;

 int cmp(char* sp, char* tp)
{
    if (strlen(S) == strlen(T))
    {
        int count = 0;
        while ((*sp != *tp) && (*sp != '\0'))
        {
            if (*sp > *tp)
                count++;
            sp++;
            tp++;
        }
        if (count == 0 || count == (strlen(T) / 2))
            return 0;
        else if (count > (strlen(T) / 2))
            return 1;
        else
            return -1;
    }
    else if(strlen(S) > strlen(T))
        return 1;
    else
        return -1;
}

void sort(int& a, int& b, int& c) {
    if (a < b)
        swap(a, b);
    if (a < c)
        swap(a, c);
    if (b < c)
        swap(b, c);
}

int main()
{
    int t, a, b, c;
    cin >> t;
    while (t--)
    {
        cin >> a >> b >> c;
        sort(a, b, c);
        cout << a << " " << b << " " << c << endl;
    }
}

void find(int* num, int n, int& minIndex, int& maxIndex)
{
    for (int i = 0; i < n; i++)   
    {
        if (num[i] > num[maxIndex])  //比较后将最大值替换
        {
            maxIndex = i;
        }
        if (num[i] < num[minIndex])  //比较后将最小值替换
        {
            minIndex = i;
        }
    }
}
int main()
{
    int t;
    cin >> t;
    for (int i = 0; i < t; i++)
    {
        int n,max=0,min=0;  //默认所比较的数组中第一项是最大或者最小项
        cin >> n;
        int* num = new int[n];
        for (int j=0; j < n; j++)
        {
            cin >> num[j];
        }
        find(num, n, min, max);
        cout << "min=" << num[min] << " " << "minindex=" << min << endl;
        cout << "max=" << num[max] << " " << "maxindex=" << max << endl;
 
    }
    return 0;

 

分数类(类与构造)

求两数a、b的最大公约数可采用辗转相除法,又称欧几里得算法,其步骤为:

1. 交换a, b使a > b;
2. 用a除b得到余数r,若r=0,则b为最大公约数,退出.
3. 若r不为0,则用b代替a, r代替b,此时a,b都比上一次的小,问题规模缩小了;
4. 继续第2步。

注意:如果分母是1的话,也按“分子/1”的方式输出。

class CFraction
{
private:
    int fz; int fm;
public:
    CFraction(int fz_val, int fm_val);
    CFraction add(const CFraction& r);
    CFraction sub(const CFraction& r);
    CFraction mul(const CFraction& r);
    CFraction div(const CFraction& r);
    int getGCD(int a,int b);   // 求对象的分子和分母的最大公约数
    //void print();
};
 
CFraction::CFraction(int fz_val, int fm_val)//分子分母
{
    fz = fz_val;
    fm = fm_val;
}
CFraction CFraction::add(const CFraction& r)//加
{
    int a = 0,b=0;
    a = fz * r.fm+r.fz*fm;
    b = fm * r.fm;
    getGCD(a,b); 
    return r;
    
}
CFraction CFraction::sub(const CFraction& r)//减
{
    int a = 0, b = 0;
    a = fz * r.fm -r.fz * fm;
    b = fm * r.fm;
    getGCD(a, b);
    return r;
    
}
CFraction CFraction::mul(const CFraction& r)//乘
{
    int a = 0, b = 0;
    a = fz * r.fz ;
    b = fm * r.fm;
     getGCD(a, b); 
     return r;
}
CFraction CFraction::div(const CFraction& r)//除
{
    int a = 0, b = 0;
    a = fz * r.fm;
    b = fm * r.fz;
    getGCD(a, b);
    return r;
}
 
int CFraction::getGCD(int a,int b)
{
    int fza = a;
    int fmb = b;
    int swap=0,r=0,fzo=0,fmo=0,y=0,flage=0;//y最大公约数
    if (a < b)//交换
    {
        swap = a;
        a = b;
        b = swap;
        swap = 0;
        
 
    }
begin:
    r = a % b;
    if (r == 0)
    {
        y = b;
        if (y < 0)
        {
            y = y * (-1);
        }
    }
    else
    {
       a = b;
       b = r;
       goto begin;
    }
    fzo = fza / y;
    fmo = fmb / y;
 
    
    cout << fzo << '/' << fmo << endl;
    
 
    return 0;
}
 
int main()
{
    int t = 0,a=0,b=0;
    char m;
    cin >> t;
    while (t--)
    {
        cin >> a >> m>>b;
        CFraction p1(a, b);
        cin >> a>> m >>b;        
        CFraction p2(a, b);
        p1.add(p2);
        p1.sub(p2);
        p1.mul(p2);
        p1.div(p2);
        cout << endl;
    }
    return 0;
}

class Robot {
private:
    char* name;
    int hp;
    int ce;
    int df;
    char type;
    int lv;

public:
    Robot(const char* n, char t, int l)
        : type(t), lv(l)
    {
        name = new char[strlen(n) + 1];
        strcpy(name, n);
        setStats();
    }

    ~Robot()
    {
        delete[] name;
    }

    void print()
    {
        cout << name << "--" << type << "--" << lv << "--" << hp << "--" << ce << "--" << df << endl;
    }

    bool transform(char t)
    {
        if (type == t)
            return false;
        type = t;
        setStats();
        return true;
    }

private:
    void setStats()
    {
        switch (type) {
        case 'N':
            hp = 5 * lv;
            ce = 5 * lv;
            df = 5 * lv;
            break;
        case 'A':
            hp = 5 * lv;
            ce = 10 * lv;
            df = 5 * lv;
            break;
        case 'D':
            hp = 5 * lv;
            ce = 5 * lv;
            df = 10 * lv;
            break;
        case 'H':
            hp = 50 * lv;
            ce = 5 * lv;
            df = 5 * lv;
            break;
        }
    }
};

int main()
{
    char n[20], type;
    int t, hp, ce, df, lv, num = 0;

    cin >> t;

    while (t--) {
        cin >> n >> type >> lv;

        Robot r1(n, type, lv);

        cin >> type;

        num += r1.transform(type);

        r1.print();
    }

    cout << "The number of robot transform is " << num;

    return 0;
}

class Phone {
    int number = 0;
    int state = 0;
    char type = 0;
    char* name = nullptr;

public:
    Phone() {};

    void setPhone();
    int search(int num);
    void print(int n);
    ~Phone();
};

void Phone::setPhone() {
    char nam[10];
    cin >> number >> type >> state >> nam;
    name = new char[strlen(nam) + 1];
    strcpy(name, nam);
    cout << number << " constructed." << endl;
}

int Phone::search(int num) {
    return (number == num ? 1 : 0);
}

void Phone::print(int n) {
    cout << "Phone=" << n << "--Type=" << type;
    if (state) {
        cout << "--State=use--Owner=";
    }
    else {
        cout << "--State=unuse--Owner=";
    }
    cout << name << endl;
}

Phone::~Phone() {
    cout << number << " destructed." << endl;
}

int main() {
    int time;
    Phone p[3];
    for (int i = 0; i < 3; i++) {
        p[i].setPhone();
    }
    cin >> time;
    while (time--) {
        int n, flag = 0;
        cin >> n;
        for (int i = 0; i < 3; i++) {
            flag = p[i].search(n);
            if (flag) {
                p[i].print(n);
                break;
            }
        }
        if (!flag) {
            cout << "wrong number." << endl;
        }
    }
    return 0;
}
using namespace std;

//创建一个bankaccount类
class BankAccount {
private:
    double balance{};//余额
    long long number;//账号
    char type;//账户类型
    double rate;//利率

public:
    //构造函数(有参)
    BankAccount(long long number, char type, double balance) {
        this->number = number;
        this->type = type;
        this->rate = 0.005;
        this->balance = balance;
    }
    //拷贝构造函数
    BankAccount(const BankAccount &account) {
        //通过拷贝构造来创建一个定期账户,信息与活期账户基本相同,不同之处包括:定期账户号码是活期账户号码加50000000(7个0);利率是定期利率。
        this->number = account.number + 50000000;
        this->type = account.type;
        this->rate = 0.015;
        this->balance = account.balance;
    }
    // 实现计息操作,根据利率计算利息,并把利息增加到余额中,并做相关信息输出。
    void addInterest() const {
        //输出格式示例:Account=12345678(账号)--sum=10050(总和)
        cout << "Account=" << number << "--sum=" << balance + balance * rate << endl;
    }
    //  实现查询操作,输出账户的全部信息。
    void display() const {
        //输出格式示例:Account=62345678(账号)--Person(类型)--sum=10000(总和)--rate=0.015
        //对于type,如果是'P',输出"Person",如果是'E',输出"Enterprise"。
        cout << "Account=" << number << "--";
        if (type == 'P') cout << "Person";
        else cout << "Enterprise";
        cout << "--sum=" << balance << "--rate=" << rate << endl;
    }
};

int main(){
    int t;
    cin >> t;
    while (t--) {
        long long number;
        char type;
        double balance;
        cin >> number >> type >> balance;
        BankAccount account(number, type, balance);
        BankAccount account2(account);
        //定义操作符C表示计息操作,P表示查询操作
        char op;
        cin >> op;
        if (op == 'C') account.addInterest();
        else if (op == 'P') account.display();

        cin >> op;
        if (op == 'C') account2.addInterest();
        else if (op == 'P') account2.display();

    }
    return 0;
}
class Television {
private:
    //包含音量、模式(分为TV和DVD两种)、频道号等属性。
    int volume;
    string mode;
    int channel;
public:
    //电视机操作包括打印、相关静态函数、属性的获取和设置
    Television() {
        volume = 0;
        mode = "TV";
        channel = 0;
        tvNum++;
    }

    Television(int v, string m, int c) {
        volume = v;
        mode = m;
        channel = c;
        if (m == "TV") {
            tvNum++;
        } else {
            channel = 99;
            dvdNum++;
        }
    }

    ~Television() {
        if (mode == "TV") {
            tvNum--;
        } else {
            dvdNum--;
        }
    }

    //打印电视机信息,格式示例:--TV模式--频道11--音量70
    void print() {
        cout << "--" << mode << "模式--频道" << channel << "--音量" << volume << endl;
    }

    //友元函数:设计遥控器函数,该函数将通过友元方法对电视机进行控制。函数的参数包括电视机对象、模式、变化音量、频道号,无返回值。
    friend void remoteControl(Television &tv, int m, int v, int c);


    static int tvNum;
    static int dvdNum;
};

int Television::tvNum = 0;
int Television::dvdNum = 0;

//设计遥控器函数,该函数将通过友元方法对电视机进行控制。函数的参数包括电视机对象、模式、变化音量、频道号,无返回值。
//我们需要在遥控器函数中对电视机对象进行模式设置,如果设置为DVD模式,则频道号参数一定是99;如果设置TV模式,则要把频道号设置相应的值。同时,我们需要根据变化音量进行调整,超过范围则音量不再变化。最后,还需要更新当前播放电视和播放DVD的电视机数量以及调用电视机对象的打印方法输出电视相关信息。
void remoteControl(Television &tv, int m, int v, int c) {

    if (m == 1) {
        if(tv.mode=="DVD"){
            tv.dvdNum--;
            tv.tvNum++;
        }
        tv.mode = "TV";
        tv.channel = c;
        if (tv.volume + v > 100) {
            tv.volume = 100;
        } else if (tv.volume + v < 0) {
            tv.volume = 0;
        } else {
            tv.volume += v;
        }
    } else {
        if(tv.mode=="TV"){
            tv.tvNum--;
            tv.dvdNum++;
        }
        tv.mode = "DVD";
        tv.channel = 99;
        if (tv.volume + v > 100) {
            tv.volume = 100;
        } else if (tv.volume + v < 0) {
            tv.volume = 0;
        } else {
            tv.volume += v;
        }
    }

    tv.print();
}

//第一行输入n,表示有n台电视台
//需要用动态数组方法创建n台电视机,从1开始编号,频道号为编号,音量初始为50,模式为TV,然后通过遥控器函数对电视机进行控制。
//第二行输入t,表示将执行t次遥控操作

int main() {
    int n, t;
    cin >> n;
    Television *tv = new Television[n];
    for (int i = 0; i < n; i++) {
        //从1开始编号,频道号为编号,音量初始为50,模式为TV,
        tv[i] = Television(50, "TV", i + 1);
    }
    cin >> t;
    for (int i = 0; i < t; i++) {
        //输入电视机编号、模式、变化音量、频道号
        int num, m, v, c;
        cin >> num >> m >> c >> v;
        cout<<"第"<<num<<"号电视机";
        remoteControl(tv[num - 1], m, v, c);
        //输出television信息

    }
    cout << "播放电视的电视机数量为" << Television::tvNum << endl;
    cout << "播放DVD的电视机数量为" << Television::dvdNum << endl;
    delete[] tv;
    return 0;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值