精华内容
下载资源
问答
  • C++题库

    2021-10-11 20:36:58
    C++知识点题库

    1、求最大值

    题目描述:输入两个整数,比较大小并输出“max=”,之后输出较大的值。

    代码实现

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int num1, num2;
        cin>>num1>>num2;
        num1 > num2 ? cout<<num1 : cout<<num2;
        return 0;
    }
    
    

    执行结果:在这里插入图片描述

    2、求圆面积

    题目描述:定义一个circle圆类,有浮点型的半径属性和计算面积行为。PI值定为常量3.14。从键盘接收一个半径值并创建相应的circle对象,输出这个圆的面积。

    代码实现

    #include <iostream>
    
    using namespace std;
    
    const float PI = 3.14;
    
    class circle{
    
    
    public:
        circle(float a)
        {
            r = a;
        }
        void area()
        {
            cout<<PI*r*r<<endl;
        }
    private:
        float r;
    };
    
    int main()
    {
        float r;
        cin>>r;
        circle crl(r);
        crl.area();
        return 0;
    }
    
    

    执行结果
    在这里插入图片描述

    3、编写重载函数来打印字符串

    题目描述:编写函数 print_spaced 来打印字符串,要求打印出的字符串每个字母之间都有一个空格。要求编写两个同名函数,一个支持字符数组输入,另一个支持string类型输入。然后编写main函数测试这两个函数,第一个使用字符数组输入,第二个使用string类型输入。
    函数原型为:void print_spaced(char s[]) ; void print_spaced(string s) ;

    代码实现

    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    void print_spaced(char s[]);
    void print_spaced(string s);
    
    void print_spaced(char s[])
    {
        int i = 0;
        while(s[i] != '\0')
        {
            cout<<s[i];
    
            if((i != strlen(s)-1))
            {
                cout<<" ";
            }
            i++;
        }
        cout<<endl;
    }
    
    void print_spaced(string s)
    {
        for(int i = 0; i < s.length(); i++)
        {
            cout<<s[i];
    
            if((i != s.length()-1))
            {
                cout<<" ";
            }
        }
    }
    
    
    int main()
    {
    
        char s1[101];
        string str;
        string str1;
    
        cin>>s1;
        print_spaced(s1);
    
        cin>>str;
        print_spaced(str);
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    4、设计带构造函数的Dog类

    题目描述:设计一个Dog类,包含name、age、sex和weight等属性,在有参数的构造函数中对数据成员进行初始化。
    公有成员函数有:GetName()、GetAge()、GetSex()和GetWeight()可获取名字、年龄、性别和体重。编写成员函数speak() 显示狗的叫声(Arf!Arf!)。编写主函数,输入狗的名字、年龄、性别和体重;声明Dog对象并用输入的数据通过构造函数初始化对象,通过成员函数获取狗的属性并显示出来。

    代码实现

    #include <iostream>
    
    using namespace std;
    
    
    class Dog{
    
    public:
        Dog(string names, int ages, string sexs, float weights)
        {
            name = names;
            age = ages;
            sex = sexs;
            weight = weights;
        }
    
        string GetName();
    
        int GetAge();
    
        string GetSex();
    
        float GetWeight();
    
        void speak();
    
    
    private:
        string name;
        int age;
        string sex;
        float weight;
    
    };
    
    string Dog::GetName()
    {
        return name;
    }
    
    int Dog::GetAge()
    {
       return age;
    }
    
    string Dog::GetSex()
    {
        return sex;
    }
    
    float Dog::GetWeight()
    {
        return weight;
    }
    
    void Dog::speak()
    {
        cout<<"Arf!Arf!"<<endl;
    }
    
    int main()
    {
        string name;
        int age;
        float weight;
        string sex;
    
        cin>>name>>age>>sex>>weight;
    
        Dog dog(name, age, sex, weight);
        cout<<dog.GetName()<<endl;
        cout<<dog.GetAge()<<endl;
        cout<<dog.GetSex()<<endl;
        cout<<dog.GetWeight()<<endl;
        dog.speak();
    
        return 0;
    }
    

    运行结果
    在这里插入图片描述

    5、定义一个带重载构造函数的日期类

    题目描述:定义一个带重载构造函数的日期类Date,数据成员有年、月、日;成员函数包括:一个带参数的构造函数Date(int,int,int),一个不带参数的构造函数(设置默认值为1900-1-1),一个按“年-月-日”格式显示日期的函数void show(),一个对数据成员赋值的函数void init(int,int,int)。
    主函数中对类的测试要求:

    1. 分别使用两个不同的重载构造函数创建两个日期类对象(必须为d1,d2,d2初始值为2100-12-12);
    2. 按“年-月-日”格式分别显示两个对象的值;
    3. 输入数据,用init函数为d1赋值;
      2.按“年-月-日”格式显示对象d1的值;

    代码实现

    #include <iostream>
    
    using namespace std;
    
    
    class Date{
    
    public:
        Date(int, int, int);
    
        Date();
    
        void show();
    
        void init(int,int,int);
    
    private:
        int year;
        int mouth;
        int day;
    };
    
    Date::Date()
    {
        year = 1900;
        mouth = 1;
        day = 1;
    }
    
    Date::Date(int years, int mouths, int days)
    {
        year = years;
        mouth = mouths;
        day = days;
    }
    
    void Date::show()
    {
        cout<<year<<"-"<<mouth<<"-"<<day<<endl;
    }
    
    void Date::init(int years, int mouths, int days)
    {
        year = years;
        mouth = mouths;
        day = days;
    }
    
    int main()
    {
        int y;
        int m;
        int d;
    
        Date d1;
        Date d2(2100, 12, 12);
        d1.show();
        d2.show();
    
        cin>>y>>m>>d;
    
        d1.init(y, m, d);
    
        d1.show();
    
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    6、 C++第三章——指针,动态生成Person类的对象

    题目描述:编写Person类,数据成员为姓名(20字符长度)、年龄(int)和性别(char)。
    编写无参数的构造函数,其中姓名赋值为“XXX”,年龄0,性别m;
    编写析构函数,在其中输出字符串“Now destroying the instance of Person”;
    编写Register成员函数,为数据成员赋值;
    编写showme成员函数,显示姓名、年龄和性别。

    编写主函数:
    用Person类创建2个指针,p1和 p2;
    用new创建两个Person对象,分别将指针赋值给p1,p2;
    用showme成员函数显示p1,p2所指对象的值;
    再输入一组“姓名、年龄和性别”值,用成员函数Register为p1的成员赋值;
    将p1所指对象的值赋值给p2所指对象;
    用showme显示p1、p2所指对象的值。
    删除动态对象。

    代码实现

    #include <iostream>
    #include <string.h>
    
    using namespace std;
    
    
    class Person{
    
    public:
        Person();
        ~Person();
        void Register(char names[20], int ages, char sexs);
        void showme();
    
    
    private:
        char name[20];
        int age;
        char sex;
    };
    
    Person::Person()
    {
        strcpy(name, "XXX");
        age = 0;
        sex = 'm';
    }
    
    Person::~Person()
    {
        cout<<"Now destroying the instance of Person"<<endl;
    }
    
    void Person::Register(char names[20], int ages, char sexs)
    {
        //将字符串names 赋值给name
        memcpy(name, names, strlen(names));
        age = ages;
        sex = sexs;
    }
    
    void Person::showme()
    {
        cout<<name<<" "<<age<<" "<<sex<<endl;
    }
    
    
    int main()
    {
        char name[20];
        int ages;
        char sexs;
        Person *p1, *p2;
        p1 = new Person();
        p2 = new Person();
        cout<<"person1:";
        p1->showme();
        cout<<"person2:";
        p2->showme();
    
    
        cin>> name >> ages >> sexs;
    
        p1->Register(name, ages, sexs);
    
        cout<<"person1:";
        p1->showme();
        *p2 = *p1;
    
        cout<<"person2:";
        p2->showme();
    
        delete p1;
        delete p2;
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    7、编写一个小小的计算器,能够计算两个浮点数的加、减、乘、除。

    每行是一个测试用例,每行的内容为:操作数1 运算符 操作数2,操作数为浮点数,运算符为+、-、*、/,操作数和运算符之间有一个空格隔开。
    对每个测试用例,输出一行计算结果,保留两位小数的精度。如果除法遇到操作数2为0,输出“Divide by zero."。

    代码实现

    #include <iostream>
    #include <iomanip>
    //需导入iomanip库 才能使用cout<< fixed <<setprecision(2);
    
    using namespace std;
    
    class Calculator{
    
    public:
        Calculator(double inum1, char ioper, double inum2)
        {
            num1 = inum1;
            oper = ioper;
            num2 = inum2;
        }
    
        void calculate()
        {
            cout<< fixed <<setprecision(2);
            switch(oper)
            {
    
                case '+' :
                    cout<< num1 + num2 <<endl;
                    break;
                case '-':
                    cout<< num1 - num2 <<endl;
                    break;
                case '*':
                    cout<< num1 * num2  <<endl;
                    break;
                case '/':
                    if(num2 == 0)
                    {
                        cout<< "Divide by zero." <<endl;
                        break;
                    }
                    cout<< num1 / num2 <<endl;
                    break;
                default:
                    cout<<"你输入有误" <<endl;
            }
    
        }
    
    private:
        double  num1, num2;
        char oper;
    
    };
    
    int main()
    {
    
        double  num1, num2;
        char oper;
    
    
        cin>>num1>>oper>>num2;
        Calculator cal(num1, oper, num2);
        cal.calculate();
    
        cin>>num1>>oper>>num2;
        Calculator cal2(num1, oper, num2);
        cal2.calculate();
    
        cin>>num1>>oper>>num2;
        Calculator cal3(num1, oper, num2);
        cal3.calculate();
    
        cin>>num1>>oper>>num2;
        Calculator cal4(num1, oper, num2);
        cal4.calculate();
    
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    8、设计一个多功能的MyTime类

    题目描述:设计一个多功能的MyTime类,设计多个重载的构造函数,可以设置时间,进行时间的加减运算,按各种可能的格式(24小时制、12小时制)输出时间。

    注意:

    (1)请考虑设置的时间的合理性(时0-23; 分0-59;秒0-59)。

    (2)12小时制中,12:00:00前为AM, 12:00:00及以后为PM

    (3)加减运算的加数、减数是一个时间的长度,单位为“时、分、秒”

    (4)构造函数:没参数时,设置时间为0时 0分 0秒;有参数时,设置成给定的时、分、秒。

    在主函数中

    (1)声明两个对象t1,t2,并通过构造函数初始化它们(t2初始化为为8:10:30)

    (2)显示按12、14小时制显示t1、t2的时间。

    (3)再设置t1的时间,数据由用户输入。

    (4)再输入待加减的时间。

    (5)t1加输入的时间,并按12小时和24小时制显示。

    (6)t2减输入的时间,并按12小时和24小时制显示。

    输入格式:

    第一行为t1的时间,第二行为待加减的时间

    输出格式

    显示按12、14小时制显示t1、t2的初始时间

    t1加输入的待加减的时间按12小时和24小时制显示。

    t2减输入的待加减的时间按12小时和24小时制显示

    输入样例:

    11 30 30

    5 15 20

    输出样例:

    00:00:00 AM

    00:00:00

    08:10:30 AM

    08:10:30

    04:45:50 PM

    16:45:50

    02:55:10 AM

    02:55:10

    代码实现

    #include<iostream>
    using namespace std;
    class MyTime
    {
    private:
        int hour;
        int minute;
        int second;
    public:
        MyTime()
        {
            hour = 0;
            minute = 0;
            second = 0;
        }
        MyTime(int _hour, int _minute, int _second)
        {
            hour = _hour;
            minute = _minute;
            second = _second;
        }
        void SetTime(int _hour, int _minute, int _second)
        {
            hour = _hour;
            minute = _minute;
            second = _second;
        }
        void addTime(int h,int m,int s)
        {
            hour += h;
            minute += m;
            second += s;
            if(second>=60)
            {
                second = second -60;
                minute = minute + 1;
            }
            if(minute>=60)
            {
                minute = minute - 60;
                hour = hour + 1;
            }
            if(hour>=24)
            {
                hour = hour -24;
            }
        }
        void reduceTime(int _h,int _m,int _s)
        {
            if(second<_s)
            {
                second += 60;
                minute --;
            }
            if(minute<_m)
            {
                minute += 60;
                hour --;
            }
            if(hour<_h)
            {
                hour = hour + 24;
            }
            hour -= _h;
            minute -= _m;
            second -= _s;
        }
        void print_12()
        {
            int tempHour;
            hour>=12?tempHour=hour-12:tempHour=hour;
            if(tempHour<10){
                cout<<'0';
            }
            cout<<tempHour<<':';
            if(minute<10){
                cout<<'0';
            }
            cout<<minute<<':';
            if(second<10){
                cout<<'0';
            }
            cout<<second;
            if(hour>12||((hour==12)&&((minute>0)||(second>0)))){
                cout<<" "<<"PM"<<endl;
            }else{
                cout<<" "<<"AM"<<endl;
            }
        }
        void print_24()
        {
            if(hour<10){
                cout<<'0';
            }
            cout<<hour<<':';
            if(minute<10){
                cout<<'0';
            }
            cout<<minute<<':';
            if(second<10){
                cout<<'0';
            }
            cout<<second<<endl;
        }
    };
    
    
    int main()
    {
        MyTime t1;
        MyTime t2(8,10,30);
        t1.print_12();
        t1.print_24();
        t2.print_12();
        t2.print_24();
        int h1,m1,s1,h2,m2,s2;
        cin>>h1>>m1>>s1;
        t1.SetTime(h1, m1, s1);
        cin>>h2>>m2>>s2;
        t1.addTime(h2,m2,s2);
        t2.reduceTime(h2, m2, s2);
        t1.print_12();
        t1.print_24();
        t2.print_12();
        t2.print_24();
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    9、面向对象之存折类

    题目描述:请定义“存折”类,及其相关的客户端代码。请注意编写正确的构造函数。存折类的基本情况如下:
    Type name:AccountType
    Domain:
    Id,name,balance;
    Operations:
    Deposit, 存钱操作;
    Withdraw,取钱操作;
    getBalance,获取余额操作;
    WriteAccount,打印帐户信息;
    Input:
    13001 peter 0
    1200 //存的钱
    500 //取的钱
    Output:
    13001 peter 700

    代码实现

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class AccountType{
    
    public:
        AccountType(int, string, int );
        //存钱操作
        void Deposit(int ibalance);
        //取钱操作
        int Withdraw(int ibalance);
        //获取余额操作
        int getBalance();
        //打印帐户信息
        void WriteAccount();
    
    
    private:
        int id;
        string name;
        int balance;
    
    };
    AccountType::AccountType(int iid, string iname, int ibalance)
    {
        id = iid;
        name = iname;
        balance = ibalance;
    }
    
    
    //存钱操作
    void AccountType::Deposit(int ibalance)
    {
        balance += ibalance;
    }
    //取钱操作
    int AccountType::Withdraw(int ibalance)
    {
        balance -= ibalance;
        return balance;
    }
    //获取余额操作
    int AccountType::getBalance()
    {
        return balance;
    }
    //打印帐户信息
    void AccountType::WriteAccount()
    {
        cout<< id <<" "<< name <<" "<< balance;
    }
    
    
    int main(int argc, char* argv[]){
        int id;
        string name;
        int balance;
    
        cin>> id >> name >> balance;
        AccountType accountType(id, name, balance);
    
        cin>>balance;
        accountType.Deposit(balance);
    
        cin>>balance;
        accountType.Withdraw(balance);
    
        accountType.getBalance();
    
        accountType.WriteAccount();
        return 0;
    }
    

    运行结果在这里插入图片描述

    10.User类

    题目描述
    设计并实现一个用户类User,并在主函数中使用和测试这个类。每一个用户有用户名(name),密码(passwd),联系邮箱(email)三个属性。 支持设置用户信息setInfo()。允许设置信息时密码默认为6个1,联系邮箱默认为空串。 支持打印用户信息printInfo()。打印用户名、密码、联系邮箱。其中,密码以6个*方式显示。 支持修改邮箱changeEmail()。支持修改密码changePassword()。在修改密码前,要求先输入旧密码,验证无误后,才允许修改。 如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。 在main()函数中创建User类对象,测试User类的各项操作(设置用户信息,修改邮箱,修改密码,打印用户信息)。

    代码实现

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    class User{
    
    public:
    
        //设置用户信息
        //允许设置信息时密码默认为6个1,联系邮箱默认为空串。
        void setInfo(string name, string passwd = "111111", string email = "");
    
        //打印用户名、密码、联系邮箱。
        //其中,密码以6个*方式显示
        void printInfo();
    
        //支持修改邮箱
        void changeEmail(string email);
    
        //支持修改密码
        //在修改密码前,要求先输入旧密码,验证无误后,才允许修改。
        //如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。
        bool changePassword(string new_passwd, string old_passwd);
    
    
    
    private:
        string m_name;
        string m_passwd;
        string m_email;
    };
    
    
    //设置用户信息
    //允许设置信息时密码默认为6个1,联系邮箱默认为空串。
    void User::setInfo(string name, string passwd , string email)
    {
        m_name = name;
        m_passwd = passwd;
        m_email = email;
    }
    
    //打印用户名、密码、联系邮箱。
    //其中,密码以6个*方式显示
    void User::printInfo()
    {
        cout<<"用户名:"<< m_name << " 密码:" << "******" <<" 邮箱:" << m_email<<endl;
    }
    
    //支持修改邮箱
    void User::changeEmail(string email)
    {
        m_email = email;
    }
    
    //支持修改密码
    //在修改密码前,要求先输入旧密码,验证无误后,才允许修改。
    //如果输入旧密码时,连续三次输入错误,则提示用户稍后再试,暂时退出修改密码程序。
    bool User::changePassword(string new_passwd, string old_passwd)
    {
        if(old_passwd != m_passwd)
        {
            for(int i = 2; i > 0; i--)
            {
                cout<<"请重新输入原密码你还有"<< i <<"次机会"<<endl;
                cin>>old_passwd;
                if(old_passwd == m_passwd)
                {
                    m_passwd = new_passwd;
                    return true;
                }
            }
            return false;
        }
        m_passwd = new_passwd;
        return true;
    }
    
    
    
    
    int main()
    {
        User user;
        user.setInfo("Tom");
        user.printInfo();
    
        user.setInfo("Tom", "111111", "tom@163.com");
        user.printInfo();
    
        user.changeEmail("js@163.com");
        user.printInfo();
    
        if(!user.changePassword("222222", "000000"))
        {
            cout<<"修改密码失败!";
        }
    
    
        return 0;
    }
    
    

    运行结果1:
    在这里插入图片描述
    运行结果2
    在这里插入图片描述

    11.定义一个图书类Book 对象数组应用

    题目描述
    定义一个图书类Book,
    数据成员包含name(书名)、author(作者)、price(定价),
    为该类定义构造函数,
    并提供各数据成员的getXXX()和setXXX()函数。
    在main函数中创建图书对象数组,
    将对应输入值依次输出。

    输入:
    5
    谭浩强 C语言教程 55.55
    谭浩强 C++教程 33.44
    李春葆 数据结构 35.80
    李春版 数据结构java版本 45.7
    李春版 数据结构python版本 39.9

    输出:
    name=谭浩强,author=C语言教程,price=55.55
    name=谭浩强,author=C++教程,price=33.44
    name=李春葆,author=数据结构,price=35.8
    name=李春版,author=数据结构java版本,price=45.7
    name=李春版,author=数据结构python版本,price=39.9

    代码实现

    #include <iostream>
    #include <string>
    using namespace std;
    
    class Book{
    
    public:
        Book()
        {
    
        }
        Book(string _name, string _author, float _price);
        
        string getName();
        
        string getAuthor();
        
        float getPrice();
        
        void setName(string _name);
        
        void setAuthor(string _author);
        
        void setPrice(float _price);
        
    private:
        string name;
        string  author;
        float price;
    
    };
    
    Book::Book(string _name, string _author, float _price)
    {
        name = _name;
        author = _author;
        price = _price;
    }
     string Book::getName()
     {
         return name;
     }
     string Book::getAuthor()
     {
         return author;
     }
     float Book::getPrice()
     {
         return price;
     }
     void Book::setName(string _name)
     {
         name = _name;
     }
     void Book::setAuthor(string _author)
     {
         author = _author;
     }
     void Book::setPrice(float _price)
     {
         price = _price;
     }
    
    
    int main()
    {
        int i;
        string name;
        string author;
        float price;
        cin>>i;
        Book book[i];
        for(int j = 0; j<i; j++)
        {
    
            cin>>name>>author>>price;
            book[j].setName(name);
            book[j].setAuthor(author);
            book[j].setPrice(price);
        }
    
        for(int j = 0; j<i; j++)
        {
            cout<<"name="<< book[j].getName() <<",author="<< book[j].getAuthor()<<",price="<< book[j].getPrice()<<endl;
        }
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    12.定义一个交通工具的类

    题目描述
    定义一个交通工具(Vehicle)的类,
    其中有数据成员:
    速度(speed),体积(volume)等等,
    其中有成员函数:
    构造函数
    析构函数
    显示速度和体积值(show()),
    设置速度(setSpeed(int speed)),
    加速speedUp(int upspeed),减速speedDown(int downspeed)等等。

    在main函数中创建一个交通工具对象,通过成员函数设置speed, volume的值,并且通过成员函数打印出来。

    另外,调用加速,减速的方法对速度进行改变。

    输入
    5 //循环次数
    33 //加速度
    22 //减速度

    输出
    Vehicle is running!
    speed = 11 volume = 1
    ~Vehicle is running!
    Vehicle is running!
    speed = 12 volume = 2
    ~Vehicle is running!
    Vehicle is running!
    speed = 13 volume = 3
    ~Vehicle is running!
    Vehicle is running!
    speed = 14 volume = 4
    ~Vehicle is running!
    Vehicle is running!
    speed = 15 volume = 5
    ~Vehicle is running!

    代码实现

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class Vehicle{
    
    public:
        Vehicle();
    
        ~Vehicle();
    
        void show();
    
        void setSpeed(int speed);
    
        void setVolume(int volume);
    
        void speedUp(int upspeed);
    
        void speedDown(int downspeed);
    
    private:
        int m_speed;
        int m_volume;
    
    };
    
    Vehicle::Vehicle()
    {
        m_speed = 0;
        m_volume = 0;
    }
    Vehicle::~Vehicle()
    {
    
    }
    
    void Vehicle::show()
    {
        cout<<"Vehicle is running!"<<endl;
        cout<<"speed = "<< m_speed <<" volume = "<< m_volume <<endl;
        cout<<"~Vehicle is running!"<<endl;
    }
    
    void Vehicle::setSpeed(int speed)
    {
        m_speed = speed;
    }
    
    void Vehicle::setVolume(int volume)
    {
        m_volume = volume;
    }
    
    void Vehicle::speedUp(int upspeed)
    {
        m_speed += upspeed;
    }
    
    void Vehicle::speedDown(int downspeed)
    {
        m_speed -= downspeed;
    }
    
    
    int main()
    {
        int j;
        int upspeed;
        int downspeed;
        int speed;
        cin>> j >> upspeed >> downspeed;
    
        Vehicle vehicle[j];
    
        for (int i = 0; i < j; i++)
        {
            vehicle[i].setSpeed(i);
            vehicle[i].setVolume(i+1);
            vehicle[i].speedUp(upspeed);
            vehicle[i].speedDown(downspeed);
            vehicle[i].show();
        }
    
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    13、统计学生总成绩和平均成绩(静态成员变量)

    问题描述
    编写一个程序,已有若干学生的数据,包括学号、姓名、成绩。
    要求输入这些学生的基础信息(学号、姓名、成绩),
    输出学生的:总人数、总成绩、平均成绩。

    要求:学生总人数、总成绩、平均成绩使用静态成员变量定义。
    输入

    3 //总人数
    1001 user01 11.11 //学号、姓名、成绩
    1002 user02 22.33
    1003 user03 55.55

    输出
    count = 3,total_score = 88.99,s_avg_score = 29.6633

    代码实现

    #include <iostream>
    
    using namespace std;
    
    //编写一个程序,已有若干学生的数据,包括学号、姓名、成绩。
    //要求输入这些学生的基础信息(学号、姓名、成绩),
    //输出学生的:总人数、总成绩、平均成绩。
    //
    //
    //要求:学生总人数、总成绩、平均成绩使用静态成员变量定义。
    class School
    {
    public:
        School();
        School(int, string , float);
        void show();
        static int total_people;
        static float total_score;
        static float avg;
    
    
    private:
        int m_sno;
        string m_sname;
        float m_score;
    
    };
    School::School()
    {
    
    }
    
    School::School(int sno, string sname, float score)
    {
        m_sno = sno;
        m_sname = sname;
        m_score = score;
        ++total_people;
        total_score = total_score + m_score;
        avg = total_score/total_people;
    }
    void School::show()
    {
        cout<<"count = "<< total_people <<",total_score = "<< total_score << ",s_avg_score = " << avg <<endl;
    }
    
    int School::total_people = 0;
    float School::total_score = 0.0;
    float School::avg = 0.0;
    
    int main()
    {    int m_sno;
        string m_sname;
        float m_score;
        int n = 0;
        int sno;
        string sname;
        float score;
    
        cin>>n;
        School school[n];
        for(int i = 0; i < n; i++)
        {
            cin>>sno>>sname>>score;
            school[i] = {sno, sname, score};
            if(i == (n-1))
            {
                school[i].show();
            }
        }
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    14、按要求构建stock类(this应用)

    问题描述
    构建一个类Stock。
    Stock 包含三个成员:
    (1)字符数组 stockcode[]
    (2)整形数据类型 quan
    (3)双精度数据成员 price
    构造函数包含三个参数:
    (1)字符数组 na[]
    (2) q
    (3)p
    当定义 Stock 对象时,对象的第一个字符串参数复制给数据成员 stockcode
    第2、3个参数复制给:quan、price。
    未设置第2、3个参数时,quan的值是:1000,price值:8.98

    成员函数print 没有形参,需要使用 this 指针,显示对象成员的内容。

    要求输入、输出如下样例所示。

    输入
    3
    yang 0 0.00 //如果输入0和0.00 调用默认值
    wang 1111 11.11
    zhou 3333 33.33

    输出
    yang,1000,8.98
    wang,1111,11.11
    zhou,3333,33.33

    代码实现

    #include <iostream>
    #include <string.h>
    
    using namespace std;
    //
    //构建一个类Stock。
    //Stock 包含三个成员:
    //(1)字符数组 stockcode[]
    //(2)整形数据类型 quan
    //(3)双精度数据成员 price
    //构造函数包含三个参数:
    //(1)字符数组 na[]
    //(2) q
    //(3)p
    //当定义 Stock 对象时,对象的第一个字符串参数复制给数据成员 stockcode
    //第2、3个参数复制给:quan、price。
    //未设置第2、3个参数时,quan的值是:1000,price值:8.98
    //
    //成员函数print 没有形参,需要使用 this 指针,显示对象成员的内容。
    
    //
    //要求输入、输出如下样例所示。
    
    
    class Stock
    {
    public:
        Stock();
        Stock(char na[], int q = 1000, double p = 8.98);
        void prinf();
    
    
    private:
        char stockcode[20];
        int quan;
        double price;
    
    };
    
    Stock::Stock()
    {
    
    }
    
    Stock::Stock(char na[20], int q, double p)
    {
        strcpy(stockcode, na);
        quan = q;
        price = p;
    }
    
    void Stock::prinf()
    {
        cout<<this->stockcode<<","<<this->quan<<","<<this->price<<endl;
    }
    
    int main()
    {
        int n = 0;
    
        cin>>n;
    
        char stockcode[20];
        int quan;
        double price;
    
    
        Stock stock[n];
        for(int i = 0; i < n; i++)
        {
            cin>> stockcode >> quan >> price;
    
    
            if(quan == 0 && price == 0.00)
            {
                stock[i] = {stockcode};
                continue;
            }
            stock[i] = {stockcode, quan, price};
        }
    
        for(int i = 0; i < n; i++)
        {
            stock[i].prinf();
        }
    
        return 0;
    }
    

    运行结果
    在这里插入图片描述

    15、友元函数的应用

    问题描述
    1、定义名为:Time 的时间类,
    共有三个数据成员:时、分、秒。
    通过构造函数实现初始化。
    通过打印函数display实现成员打印。

    2、定义名为:Date的日期类。
    共有三个数据成员:年、月、日。
    定义:Time 时间类的成员函数display 为Date日期类的友元函数。
    在该友元函数中实现实现对Date数据成员的打印以及实现对原Time 自身数据成员的访问。

    3、输入:分两批次。
    第一次输入:时、分、秒。当时(0-24)、分(0-59)、秒(0-59)越界时,会提示“时间输入错误!!”,程序返回。
    当正确后,则继续第二次输入。
    第二次输入:月、天、年。当月(1-12)、天(1-31)越界时,会提示“日期输入错误!!”,程序返回。
    当正确后,则继续调用display 打印输出信息。

    输入
    11 59 59
    10 20 2121

    输出
    2121-10-20 11:59:59

    输入
    25 59 59

    输出
    时间输入错误!!

    代码实现

    #include <iostream>
    
    using namespace std;
    
    class Date;
    class Time
    {
    public:
        Time(int, int, int );
        void display(Date &dayD);
    
    private:
       int m_hour;
       int m_minute;
       int m_second;
    };
    
    Time::Time(int hour, int minute, int second)
    {
        m_hour = hour;
        m_minute = minute;
        m_second = second;
    }
    
    
    class Date
    {
    public:
        Date(int year,int mouth, int day);
        friend void Time::display(Date &dayD);
    
    private:
        int m_year;
        int m_mouth;
        int m_day;
    };
    
    Date::Date(int year,int mouth, int day)
    {
        m_year = year;
        m_mouth = mouth;
        m_day = day;
    }
    
    
    void Time::display(Date &dayD)
    {
    
        if(dayD.m_mouth <= 12 && dayD.m_mouth >= 0 && dayD.m_day <= 31 && dayD.m_day >= 1)
        {
            cout<<dayD.m_year<<"-"<<dayD.m_mouth<<"-"<<dayD.m_day<<" "<<m_hour<<":"<<m_minute<<":"<<m_second<<endl;
        }
        else
        {
            cout<<"日期输入错误!!"<<endl;
        }
    }
    
    
    int main()
    {
        int hour;
        int minute;
        int second;
        int year;
        int mouth;
        int day;
        cin>>hour>>minute>>second;
        Time time(hour, minute, second);
        if(hour <24 && hour >=0 && minute <= 59 && minute >= 0 && second <= 59 && second >= 0)
        {
            cin>>mouth>>day>>year;
            Date date(year, mouth, day);
            time.display(date);
        }
        else
        {
            cout<<"时间输入错误!!"<<endl;
        }
    
        return 0;
    }
    
    

    运行结果1
    在这里插入图片描述
    运行结果2
    在这里插入图片描述

    16、类的组合应用

    问题描述
    1、定义一个ponit 类,有两个成员变量m_x,m_y;
    有两个成员方法getx() gety()
    通过构造函数实现成员变量的初始化。

    1. 定义一个line 线类,有三个成员变量,其中两个是point 类的对象 m_pp1, m_pp2. 另外一个是double 类型的m_len

      通过构造函数的初始化成员列表的方式实现对 m_pp1, m_pp2 的初始化,
      并且通过计算公式的方式,求解m_len , m_len 的求解方法= 根号下(两个类成员变量的x之差的平方+两个类成员变量的y之差的平方)

      line 类有个成员函数 getLen(),用于返回 m_len

    输入
    4 5 //point 类对象1的两个成员
    5 6 //point 类对象2的两个成员

    输出
    The result is:1.41421

    代码实现

    #include <iostream>
    #include <math.h>
    
    using namespace std;
    
    
    class Ponit
    {
    public:
    
        Ponit(double x, double y);
        double getX();
        double getY();
    
    private:
        double m_x;
        double m_y;
    };
    
    Ponit::Ponit(double x, double y)
    {
        m_x = x;
        m_y = y;
    }
    double Ponit::getX()
    {
        return m_x;
    }
    double Ponit::getY()
    {
         return m_y;
    }
    
    class line
    {
    public:
        line(double x1, double y1, double x2, double y2);
        double getLine();
    
    private:
        Ponit m_pp1;
        Ponit m_pp2;
        double m_len;
    };
    
    line::line(double x1, double y1, double x2, double y2):m_pp1(x1, y1), m_pp2(x2, y2)
    {
        m_len = sqrt(pow((m_pp1.getX() - m_pp2.getX()), 2) + pow((m_pp1.getY() - m_pp2.getY()), 2) );
    }
    
    double line::getLine()
    {
        return m_len;
    }
    
    int main()
    {
        double a, b, c, d;
        cin>>a>>b;
        cin>>c>>d;
        line lin(a, b, c, d);
        cout<<"The result is:"<<lin.getLine();
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    17、派生与继承之联想电脑

    问题描述
    1、定义一个电脑 Computer 类,
    一个成员变量:m_name
    两个成员函数:setName(string name)、getName()

    2、定义一个联想电脑类:LenovoComputer
    一个成员变量:m_price
    三个成员函数:setPrice(string price)、getPrice()、printInfo()

    输入:电脑台数,比如:10台。
    输出:电脑信息如下
    name = Thinkpad-000, price = 1000
    name = Thinkpad-001, price = 1001
    name = Thinkpad-002, price = 1002
    name = Thinkpad-003, price = 1003
    name = Thinkpad-004, price = 1004
    name = Thinkpad-005, price = 1005
    name = Thinkpad-006, price = 1006
    name = Thinkpad-007, price = 1007
    name = Thinkpad-008, price = 1008
    name = Thinkpad-009, price = 1009

    price 计算方法:第1台,1000, 第2台:1000+1,依次类推。
    name 名称组合生成方式:前缀”Thinkpad-“,中间0需要结合循环实现,最后是循环自增id。

    输入
    15

    输出
    name = Thinkpad-000, price = 1000
    name = Thinkpad-001, price = 1001
    name = Thinkpad-002, price = 1002
    name = Thinkpad-003, price = 1003
    name = Thinkpad-004, price = 1004
    name = Thinkpad-005, price = 1005
    name = Thinkpad-006, price = 1006
    name = Thinkpad-007, price = 1007
    name = Thinkpad-008, price = 1008
    name = Thinkpad-009, price = 1009
    name = Thinkpad-010, price = 1010
    name = Thinkpad-011, price = 1011
    name = Thinkpad-012, price = 1012
    name = Thinkpad-013, price = 1013
    name = Thinkpad-014, price = 1014

    代码实现

    #include <iostream>
    #include <string>
    #define max 100
    
    using namespace std;
    
    
    class Computer{
    
    public:
        void setName(string name);
        string getName();
    
    private:
        string m_name;
    
    };
    
    string Computer::getName()
    {
        return m_name;
    }
    
    void Computer::setName(string name)
    {
        m_name = name;
    }
    
    class LenovoComputer:public Computer{
    
    public:
        void setPrice(string price);
        string getPrice();
        void printInfo();
    
    private:
        string m_price;
    
    };
    
    void LenovoComputer::setPrice(string price)
    {
        m_price = price;
    }
    
    string LenovoComputer::getPrice()
    {
        return m_price;
    }
    
    void LenovoComputer::printInfo()
    {
        cout<<"name = Thinkpad-"<< getName() <<", price = "<<m_price<<endl;
    }
    
    //int ---> string
     string to_Strings(int n)
    {
        int m = n;
        char s[max];
         char ss[max];
         int i=0,j=0;
         if (n < 0)// 处理负数
         {
             m = 0 - m;
             j = 1;
             ss[0] = '-';
         }
         while (m>0)
         {
             s[i++] = m % 10 + '0';
             m /= 10;
         }
         s[i] = '\0';
         i = i - 1;
         while (i >= 0)
         {
             ss[j++] = s[i--];
         }
         ss[j] = '\0';
         return ss;
    }
    
    //输出001 002 003
    string addzero(int x)
    {
        if(x == 0)
        {
            return "000";
        }
        if (x<10)
        {
            return "00"+to_Strings(x);
        }
        else if (x<100)
        {
            return "0"+to_Strings(x);
        }
    }
    
    int main()
    {
        int n;
        cin>>n;
        LenovoComputer lc;
        for(int i = 0; i < n; i++)
        {
    
            lc.setName(addzero(i));
            lc.setPrice(to_Strings(1000+i));
            lc.printInfo();
        }
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    18、矩形类继承实现

    问题描述
    1、定义一个Point类:
    包含:两个私有成员:m_x, m_y;
    包含:三个成员函数:Move(float xOff, float yOff),GetX(),GetY()

    2、定义一个Rectangle继承自Point类
    包含:两个私有成员 m_width, m_height;
    包含:三个成员函数:GetHeight()、GetWidth()、printInfo()

    要求:通过构造函数实现初始化。
    输入:矩形个数。如 5
    输出:矩形信息。举例如下:

    X: 5,Y: 5, GetWidth: 20, GetHeight: 10
    X: 6,Y: 6, GetWidth: 21, GetHeight: 11
    X: 7,Y: 7, GetWidth: 22, GetHeight: 12
    X: 8,Y: 8, GetWidth: 23, GetHeight: 13
    X: 9,Y: 9, GetWidth: 24, GetHeight: 14

    注意:X,Y width,height的初始值分别为:2,3, 20,10
    后面值的变化是根据循环变量i递增的。

    需要先执行 Move 函数使得X,Y变成:2+3, 3+2

    输入
    5

    输出
    X: 5,Y: 5, GetWidth: 20, GetHeight: 10
    X: 6,Y: 6, GetWidth: 21, GetHeight: 11
    X: 7,Y: 7, GetWidth: 22, GetHeight: 12
    X: 8,Y: 8, GetWidth: 23, GetHeight: 13
    X: 9,Y: 9, GetWidth: 24, GetHeight: 14

    代码实现

    
    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class Point{
    
    public:
        Point(float x, float y);
        void  Move(float xOff, float yOff);
        float GetX();
        float GetY();
    
    private:
        float m_x = 2;
        float m_y = 3;
    };
    
    Point::Point(float x, float y)
    {
        m_x = x;
        m_y = y;
    }
    void Point::Move(float xOff, float yOff)
    {
        m_x = xOff + 3;
        m_y = yOff + 2;
    }
    
    float Point::GetX()
    {
        return m_x;
    }
    
    float Point::GetY()
    {
        return m_y;
    }
    
    
    class Rectangle:public Point{
    public:
        Rectangle(float x, float y, float width, float height);
        float GetWidth();
        float GetHeight();
        void printInfo();
    
    private:
        float m_width;
        float m_height;
    
    };
    //父类构造函数必须在子类中初始化
    Rectangle::Rectangle(float x = 2, float y = 3,float width = 20, float height = 10):Point(x, y)
    {
        m_width = width;
        m_height = height;
    }
    
    float Rectangle::GetWidth()
    {
        return m_width;
    }
    
    float Rectangle::GetHeight()
    {
        return m_height;
    }
    
    void Rectangle::printInfo()
    {
        cout<<"X: "<< GetX()<<",Y: "<< GetY() <<", GetWidth: "<< GetWidth() <<", GetHeight: "<< GetHeight() <<endl;
    }
    
    
    int main()
    {
    
        int n;
        cin>>n;
        for(int i = 0; i < n; i++)
        {
            Rectangle rectangle(2+i, 3+i, 20+i, 10+i);
            rectangle.Move(rectangle.GetX(), rectangle.GetY());
            rectangle.printInfo();
        }
    
        return 0;
    }
    
    
    
    

    运行结果
    在这里插入图片描述

    19、第四章-派生类及继承实现之多重继承

    问题描述
    1、设计时间类:MyTime
    包含数据成员:时、分、秒
    包含成员函数:display()

    2、设计日期类:MyDate
    包含数据成员:年、月、日
    包含成员函数:display()

    3、设计childName 类派生自:MyTime、MyDate类,
    其也有类:display()
    要求1:定义childName 对象,实现对象的输出操作。
    要求2:初始化借助 调用基类初始化成员列表实现。

    输入
    薛之谦 2000 1 1 12 05 05

    输出
    MyTime is running!
    MyDate is running!
    Birthtime is running!
    姓名:薛之谦 , 出生日期和时间为:
    出生年月:2000年1月1日
    出生时间:12时5分5秒
    ~Birthtime is running!
    ~MyDate is running!
    ~MyTime is running!

    代码实现

    #include<iostream>
    #include <string>
    
    using namespace std;
    
    //时间类
    class MyTime
    {
    
    public:
    
        MyTime(int, int , int);
    
        void display();
    
        ~MyTime();
    
    private:
        int m_hour;
        int m_minute;
        int m_second;
    
    };
    
    MyTime::MyTime(int hour, int minute, int second)
    {
    
        cout<<"MyTime is running!"<<endl;
    
        m_hour = hour;
        m_minute = minute;
        m_second = second;
    }
    void MyTime::display()
    {
        //出生时间:12时18分25秒
        cout<<"出生时间:"<< m_hour << "时" << m_minute << "分" << m_second << "秒"<<endl;
    
    }
    
    MyTime::~MyTime()
    {
        cout<<"~MyTime is running!"<<endl;
    }
    
    
    //日期类
    class Date{
    
    public:
    
        Date(int, int, int);
    
        void display();
    
        ~Date();
    
    private:
        int m_year;
        int m_mouth;
        int m_day;
    };
    
    
    Date::Date(int year, int mouth, int day)
    {
        cout<<"MyDate is running!"<<endl;
        m_year = year;
        m_mouth = mouth;
        m_day = day;
    }
    
    void Date::display()
    {
       //出生年月:1981年11月15日
       cout<<"出生年月:"<< m_year <<"年"<< m_mouth <<"月"<< m_day <<"日"<<endl;
    }
    
    Date::~Date()
    {
        cout<<"~MyDate is running!"<<endl;
    }
    
    class ChildName:public MyTime, public Date
    {
    public:
    
        ChildName(int hour, int minute, int second, int year, int mouth, int day, string);
    
        void display();
    
        ~ChildName();
    
    private:
        string m_name;
    
    };
    
    ChildName::ChildName(int hour, int minute, int second, int year, int mouth, int day, string name):MyTime(hour, minute, second), Date(year, mouth, day)
    {
        cout<<"Birthtime is running!"<<endl;
        m_name = name;
    }
    
    ChildName::~ChildName()
    {
        cout<<"~Birthtime is running!"<<endl;
    }
    
    void ChildName::display()
    {
        cout<<"姓名:"<<m_name<<", 出生日期和时间为:"<<endl;
        Date::display();
        MyTime::display();
    }
    
    
    int main()
    {
        int hour;
        int minute;
        int second;
        int year;
        int mouth;
        int day;
        string name;
    
        //输入姓名 出生日期 出生时间
        cin>> name >> year >> mouth >> day >> hour >> minute >> second;
        //初始化
        ChildName childName(hour, minute, second, year, mouth, day, name);
        //输出
        childName.display();
        return 0;
    }
    
    
    

    运行结果
    在这里插入图片描述

    20、第四章-派生类及继承实现之虚函数

    问题描述
    基类area_info 有两个派生类:rectangle 矩形类和三角形类 triangle,让每个派生类都包含函数:area()。
    分别用来求解矩形的面积和三角形的面积。
    要求:1、使用构造函数实现初始化。
    2、输入值自己控制。
    3、使用基类指针访问虚函数的方式(运行时多态,没有讲到,需要预习)求解矩形面积和三角形面积。
    如下代码是开头部分,需要补充完善。

    #include <iostream>
    using namespace std;
    #include <string.h>
    
    class area_info
    {
    public:
        area_info(double r, double s)
        {
            m_height = r;
            m_width = s;
        }
        virtual double area() = 0;
    protected:
        double m_height;
        double m_width;
    };
    

    输入
    11.5 22.3

    输出
    正方形的面积为:256.45
    三角形的面积为:128.225

    代码实现

     #include<iostream>
    
    using namespace std;
    
    //基类area_info 有两个派生类:Rectangle 矩形类和三角形类 triangle,让每个派生类都包含函数:area()。
    //分别用来求解矩形的面积和三角形的面积。
    //要求:1、使用构造函数实现初始化。
    //2、输入值自己控制。
    //3、使用基类指针访问虚函数的方式(运行时多态,没有讲到,需要预习)求解矩形面积和三角形面积。
    //如下代码是开头部分,需要补充完善
    
    class Area_info
    {
    public:
        Area_info(double height,double width)
        {
            m_height = height;
            m_width = width;
    
        }
    
        virtual double area()=0;
    
     protected:
        double m_height;
        double m_width;
    
    };
    
    //矩形类
    class Rectangle:public Area_info
    {
    public:
    
        Rectangle(double height,double width):Area_info(height, width)
        {
    
        }
    
        double area()
        {
            return m_height * m_width;
        }
    };
    
    //三角形类
    class Triangle:public Area_info
    {
    public:
        Triangle(double height, double width):Area_info(height, width)
        {
    
        }
    
        double area()
        {
            return m_height*m_width/2;
        }
    };
    
    int main()
    {
        double height;
        double width;
    
        Area_info *ai;
        cin>>height>>width;
        Rectangle rectangle(height, width);
        Triangle triangle( height, width);
    
        ai = &rectangle;
        cout<<"正方形的面积为:"<<rectangle.area()<<endl;
    
        ai = &triangle;
        cout<<"三角形的面积为:"<<triangle.area()<<endl;
    }
    
    
    

    运行结果
    在这里插入图片描述

    21、实现一维数组的函数重载:

    问题描述
    实现一维数组的函数重载:

    main 函数定义如下:

    int main()
    {
        int  icnt = 0;
    
        cin >> icnt;
        g_n = icnt;
    
        int* pLeftArray = new int[icnt];
        int* pRightArray = new int[icnt];
    
        for(int i = 0; i < icnt; i++)
        {
            pLeftArray[i] = i;
            pRightArray[i] = i+1;
            cout << "pLeftArray[" << i << "] = " << pLeftArray[i];
            cout << ", pRightArray[" << i << "] = " << pRightArray[i] <<endl;
        }
    
        MyArray bArray(pLeftArray);
        MyArray cArray(pRightArray);
    
        MyArray rstArray = bArray+cArray;
    
        rstArray.printArray();
    
        return 0;
    }
    

    补全类的定义和重载函数的说明。

    输入
    10

    输出
    pLeftArray[0] = 0, pRightArray[0] = 1
    pLeftArray[1] = 1, pRightArray[1] = 2
    pLeftArray[2] = 2, pRightArray[2] = 3
    pLeftArray[3] = 3, pRightArray[3] = 4
    pLeftArray[4] = 4, pRightArray[4] = 5
    pLeftArray[5] = 5, pRightArray[5] = 6
    pLeftArray[6] = 6, pRightArray[6] = 7
    pLeftArray[7] = 7, pRightArray[7] = 8
    pLeftArray[8] = 8, pRightArray[8] = 9
    pLeftArray[9] = 9, pRightArray[9] = 10
    i = 0, m_iarray[0]= 1
    i = 1, m_iarray[1]= 3
    i = 2, m_iarray[2]= 5
    i = 3, m_iarray[3]= 7
    i = 4, m_iarray[4]= 9
    i = 5, m_iarray[5]= 11
    i = 6, m_iarray[6]= 13
    i = 7, m_iarray[7]= 15
    i = 8, m_iarray[8]= 17
    i = 9, m_iarray[9]= 19

    代码实现

    #include <iostream>
    
    using namespace std;
    
    int g_n = 0;
    
     class MyArray{
    
     public:
         MyArray(){};
         MyArray(int* arry);
         void printArray();
    
    
         int* m_arry = new int[g_n];
     };
    
     MyArray::MyArray(int* arry)
     {
         for(int i = 0; i < g_n; i++)
         {
             m_arry = arry;
         }
    
     }
     void MyArray::printArray()
     {
        for (int i = 0; i < g_n; i++)
        {
            cout << "i = " << i << ", m_iarray[" << i << "]= " <<m_arry[i]<<endl;
        }
     }
    
     MyArray operator+(MyArray mR1, MyArray mR2)
     {
         MyArray temp;
         for(int i = 0; i < g_n; i++)
         {
             temp.m_arry[i] = mR1.m_arry[i] + mR2.m_arry[i];
         }
         return temp;
     }
    
    int main()
    {
        int  icnt = 0;
    
        cin >> icnt;
        g_n = icnt;
    
        int* pLeftArray = new int[icnt];
        int* pRightArray = new int[icnt];
    
        for(int i = 0; i < icnt; i++)
        {
            pLeftArray[i] = i;
            pRightArray[i] = i+1;
            cout << "pLeftArray[" << i << "] = " << pLeftArray[i];
            cout << ", pRightArray[" << i << "] = " << pRightArray[i] <<endl;
        }
    
        MyArray bArray(pLeftArray);
        MyArray cArray(pRightArray);
    
        MyArray rstArray = bArray + cArray;
    
        rstArray.printArray();
    
        return 0;
    }
    
    
    

    运行结果
    在这里插入图片描述

    22、友元运算符重载

    问题描述
    结合如下主函数,补全类的定义,要求:使用友元运算符重载函数实现复数的加法运算符重载、减法运算符重载。

    int main()
    {
        int real_a = 0;
        int imag_a = 0;
        int real_b = 0;
        int imag_b = 0;
    
        cin >> real_a >> imag_a >> real_b >> imag_b;
    
    
        MyComplex compx_a(real_a, imag_a);
        MyComplex compx_b(real_b, imag_b);
        MyComplex compx_sum = compx_a + compx_b;
        compx_sum.getComplexRst();
    
        MyComplex compx_sub = compx_a - compx_b;
        compx_sub.getComplexRst();
    
        return 0;
    }
    

    输入
    11 22 33 44

    输出
    rst = 44+66i
    rst = -22-22i

    代码实现

    #include <iostream>
    
    using namespace std;
    
    class MyComplex
    {
    public:
        MyComplex(){};
        MyComplex(int ,int );
        void getComplexRst();
    
        int m_real = 0;
        int m_imag = 0;
    };
    MyComplex::MyComplex(int real, int imag)
    {
        m_real = real;
        m_imag = imag;
    }
    
    void MyComplex::getComplexRst()
    {
        if(m_imag > 0)
        {
            cout<<"rst = "<<m_real << "+" << m_imag <<"i"<<endl;
        }
        else
        {
            cout<<"rst = "<<m_real << m_imag <<"i"<<endl;
        }
    
    }
    
    MyComplex operator+(MyComplex om1, MyComplex om2)
    {
        MyComplex temp;
        temp.m_real = om1.m_real + om2.m_real;
        temp.m_imag = om1.m_imag + om2.m_imag;
        return temp;
    }
    
    MyComplex operator-(MyComplex om1, MyComplex om2)
    {
        MyComplex temp;
        temp.m_real = om1.m_real - om2.m_real;
        temp.m_imag = om1.m_imag - om2.m_imag;
        return temp;
    }
    
    
    int main()
    {
        int real_a = 0;
        int imag_a = 0;
        int real_b = 0;
        int imag_b = 0;
    
        cin >> real_a >> imag_a >> real_b >> imag_b;
    
    
        MyComplex compx_a(real_a, imag_a);
        MyComplex compx_b(real_b, imag_b);
        MyComplex compx_sum = compx_a + compx_b;
        compx_sum.getComplexRst();
    
        MyComplex compx_sub = compx_a - compx_b;
        compx_sub.getComplexRst();
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    23、虚基类的实现

    问题描述
    main()函数已经写好,需要完善类的定义。

    基类:base,base的子类:base01(实现变量+10),base02(实现变量+20), Derived 继承自:base01,base02。

    参考教材:P172 修改代码。

    需要借助:虚基类实现。

    int  main()
    {
        int ival = 0;
        cin >> ival;
    
        Derived obj(ival);
        return 0;
    }
    
    

    输入
    5

    输出
    base=5
    in base01(), m_a = 15
    in base02(), m_a = 35
    base01::m_a = 35
    base02::m_a = 35

    代码实现

    #include<iostream>
    
    using namespace std;
    
    class base
    {
    public:
        base() {}
        base(int ival)
        {
            a = ival;
            cout<<"Base="<<a<<endl;
        }
        int a;
    };
    
    class base01:virtual public base
    {
    public:
        base01() {}
        base01(int ival):base(ival)
        {
            a = a+10;
            cout<<"in Base01(), m_a = "<<a<<endl;
    
        }
        int b1;
    };
    
    class base02:virtual public base
    {
    public:
        base02() {}
        base02(int ival):base(ival)
        {
            a = a+20;
            cout<<"in Base02(), m_a = "<<a<<endl;
        }
        ~base02()
        {
    
        }
        int b2;
    };
    
    class Derived:public base01,public base02
    {
    public:
        Derived() {}
        Derived(int ival):base(ival),base01(ival),base02(ival)
        {
            cout<<"Base01::m_a = "<<a<<endl;
            cout<<"Base02::m_a = "<<a<<endl;
        }
        int d;
    
    };
    
    
    int  main()
    {
        int ival = 0;
        cin >> ival;
    
        Derived obj(ival);
        return 0;
    }
    
    
    

    运行结果
    在这里插入图片描述

    24、纯虚函数的应用

    问题描述
    Shape是一个父类,他的子类有:
    三角形类:Triangle
    矩形类:Rectangle
    圆形类:Circle

    要求如下:
    第一:Shape 类中定义纯虚函数 show 和 area;
    第二:area 用途:求解图形面积。
    show 用途:打印信息。
    第三:要求根据输出完善 核心代码实现,要求实现运行时多态。
    第四:main() 函数已经给出,需要写出剩余部分的实现。

    int main()
    {
        Shape *s;
        Circle mycircle(20);
        Rectangle myrect(3,4);
        Triangle mytriangle(6,8,10);
    
        s=&mytriangle;//动态多态
        s->show();
        cout<<"Triangle:"<<s->area()<<endl;
    
    
        s=&myrect;//动态多态
        s->show();
        cout<<"Rectangle Area:"<<s->area()<<endl;
    
    
        mycircle.show();//静态多态
        cout<<"Circle Area:"<<mycircle.area()<<endl;
    
        return 0;
    }
    

    输入

    输出
    a=6, b=8, c=10
    Triangle:24
    length=3, width=4
    Rectangle Area:12
    radius=20
    Circle Area:1256.64

    代码实现

    #include <iostream>
    #include <cmath>
    using namespace std;
    
    class Shape
    {
    public:
        Shape()
        {
    
        }
        Shape(double radius)
        {
            m_radius = radius;
        }
    
    
        Shape(double length, double width)
        {
            m_width = width;
            m_length = length;
        }
    
        Shape(double a, double b, double c)
        {
            m_a = a;
            m_b = b;
            m_c = c;
        }
    
        virtual double area() = 0;
    
        virtual void show() = 0;
    
    protected:
        double m_length;
        double m_width;
    
        double m_a;
        double m_b;
        double m_c;
    
        double m_radius;
    
        double m_result;
    
    };
    
    //圆形
    class Circle:public Shape
    {
    public:
    
        Circle(double radius):Shape(radius)
        {
    
        }
    
        double area();
    
        void show();
    
    };
    
    
    double Circle::area()
    {
        return 3.14159 * m_radius * m_radius;
    }
    
    void Circle::show()
    {
        cout<<"radius="<<m_radius<<endl;
    }
    
    
    //矩形
    class Rectangle:public Shape
    {
    public:
        Rectangle(double length, double width):Shape(length, width)
        {
    
        }
    
        virtual double area();
    
        virtual void show();
    
    };
    
    
    double Rectangle::area()
    {
        return m_length * m_width;
    }
    
    void Rectangle::show()
    {
        cout<<"length="<< m_length <<", width="<< m_width <<endl;
    }
    
    
    //三角形
    class Triangle:public Shape
    {
    public:
        Triangle(double a, double b, double c):Shape(a, b, c)
        {
    
        }
    
        double area();
    
        void show();
    
    };
    
    
    double Triangle::area()
    {
        return (m_a * m_b)/2;
    }
    
    void Triangle::show()
    {
        cout<<"a="<< m_a <<", b="<< m_b <<", c="<< m_c <<endl;
    }
    
    
    int main()
    {
        Shape *s;
        Circle mycircle(20);
        Rectangle myrect(3,4);
        Triangle mytriangle(6,8,10);
    
        s=&mytriangle;//动态多态
        s->show();
        cout<<"Triangle:"<<s->area()<<endl;
    
    
        s=&myrect;//动态多态
        s->show();
        cout<<"Rectangle Area:"<<s->area()<<endl;
    
    
        mycircle.show();//静态多态
        cout<<"Circle Area:"<<mycircle.area()<<endl;
    
        return 0;
    }
    
    
    
    

    运行结果

    在这里插入图片描述

    25、函数模块使用

    问题描述
    编写一个对具有n个元素的数组array[ ]求最小值的程序,要求将求最小值的函数设计成函数模板。

    main()函数参考如下:

    int main()
    {
        int iArray[MAX_SIZE]= {0};
        double dArray[MAX_SIZE] = {0.0};
        int icnt = 0;
        cin >> icnt;
    
        for(int i = 0; i < icnt; i++)
        {
            cin >> iArray[i];
        }
    
        for(int j = 0; j < icnt; j++)
        {
            cin >> dArray[j];
        }
    
        cout<<"a数组的最小值为:"
            <<GetMinVal(iArray,icnt)<< endl;
        cout<<"b数组的最小值为:"
            <<GetMinVal(dArray,icnt)<<endl;
    
        return 0;
    }
    

    输入
    5
    1 3 4 5 0
    1.2 3.5 4.8 9.2 0.3

    输出
    a数组的最小值为:0
    b数组的最小值为:0.3

    代码实现

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    const int MAX_SIZE = 10;
    
    template<typename T>
    T GetMinVal(T* arry, int arrySize)
    {
        int i = 0;
        T minSum = arry[i];
        for(i = 0; i < arrySize; i++)
        {
            if(arry[i] < minSum)
            {
                minSum = arry[i];
            }
        }
    
        return minSum;
    }
    
    
    int main()
    {
        int iArray[MAX_SIZE]= {0};
        double dArray[MAX_SIZE] = {0.0};
        int icnt = 0;
        cin >> icnt;
    
        for(int i = 0; i < icnt; i++)
        {
            cin >> iArray[i];
        }
    
        for(int j = 0; j < icnt; j++)
        {
            cin >> dArray[j];
        }
    
        cout<<"a数组的最小值为:"
            <<GetMinVal(iArray,icnt)<< endl;
        cout<<"b数组的最小值为:"
            <<GetMinVal(dArray,icnt)<<endl;
    
        return 0;
    }
    

    运行结果
    在这里插入图片描述

    26、综合题

    问题描述
    1、定义一个Person 类,
    包含成员函数:show() 用于输出基础信息
    成员变量:name,sex,age
    其中age 整形,其他string类型。

    2、定义一个Student类继承自Person 类,
    新增了id,date,score 三个变量
    其中score int 类型,其他string 类型。

    输入:
    第一行:人数 N
    第二行:待查找的成绩。
    第三行之后:N个学生的基础信息。

    输出:
    见下面。

    输入
    3
    480
    Mary 男 19 20170101001 2017.09.01 580
    Hunk 男 18 20210101002 2021.09.01 390
    Lucy 女 18 20210101003 2021.09.01 630

    输出
    第 1个同学的信息为:
    student’s id: 20170101001
    name: Mary
    sex: 男
    age: 19
    enrollment date: 2017.09.01
    enrollment score: 580
    第 2个同学的信息为:
    student’s id: 20210101002
    name: Hunk
    sex: 男
    age: 18
    enrollment date: 2021.09.01
    enrollment score: 390
    第 3个同学的信息为:
    student’s id: 20210101003
    name: Lucy
    sex: 女
    age: 18
    enrollment date: 2021.09.01
    enrollment score: 630
    分数为:480 不存在
    全班最高成绩为:630
    成绩最高同学的姓名为:Lucy

    代码实现

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    
    class Person
    {
    public:
        Person()
        {
    
        }
        Person(string, string, int );
    
        virtual void show() = 0;
    
    protected:
        string m_name;
        string m_sex;
        int m_age;
    
    };
    Person::Person(string name, string sex, int age)
    {
        m_name = name;
        m_sex = sex;
        m_age = age;
    }
    
    class Student:public Person
    {
    public:
        Student()
        {
    
        }
        Student(string name, string sex, int age, string id, string date, int score);
    
        void show();
    
        int getScore()
        {
            return m_score;
        }
    
        string getName()
        {
            return m_name;
        }
    
    private:
        string m_id;
        string m_date;
        int m_score;
    
    };
    
    
    Student::Student(string name, string sex, int age, string id, string date, int score):Person(name, sex, age)
    {
        m_id = id;
        m_date = date;
        m_score = score;
    }
    void Student::show()
    {
        cout<<"       student's id: "<< m_id <<endl;
        cout<<"              name: "<< m_name <<endl;
        cout<<"               sex: "<< m_sex <<endl;
        cout<<"               age: "<< m_age <<endl;
        cout<<"   enrollment date: "<< m_date <<endl;
        cout<<"  enrollment score: "<< m_score <<endl;
    
    }
    
    int main()
    {
        string name;
        string sex;
        int age;
        string id;
        string date;
        int score;
        //学生人数
        int n;
        //待查询学生成绩
        int search_score;
        int flag = -1;
        string flag_name;
    
        int top_score = 0;
        string top_name;
    
        cin>>n>>search_score;
    
        Student student[n];
    
        for(int i = 0; i < n; i++)
        {
            cin>> name >> sex >> age >> id >> date >>score;
    
            student[i] = {name, sex, age, id, date, score};
    
        }
    
        for(int i = 0; i < n; i++)
        {
            cout<<"第 "<< i+1 <<"个同学的信息为:"<<endl;
            student[i].show();
    
            //查找分数
            if(student[i].getScore() ==  search_score)
            {
                flag = 0;
                flag_name = student[i].getName();
    
            }
    
            //获取最高分
            if(student[i].getScore() > top_score)
            {
                top_score = student[i].getScore();
                top_name = student[i].getName();
            }
    
            if(i == n -1)
            {
    
                flag == 0 ? cout<<"分数为:"<< search_score <<" 存在!该学生姓名为:"<< flag_name <<endl : cout<<"分数为:"<< search_score <<" 不存在"<<endl;
                cout<<"全班最高成绩为:"<< top_score <<endl;
                cout<<"成绩最高同学的姓名为:"<< top_name <<endl;
    
            }
    
        }
    
    
        return 0;
    }
    
    
    

    运行结果
    在这里插入图片描述

    27、类模板实现

    问题描述
    1、定义一个类模板,实现输出最大值、最小值。
    输入:两个 int 类型值,或者两个 float,或者两个double类型值,类型自己定义。
    输出:两者中的最大值,两者中的最小值。

    输入
    33 55
    33.33 55.55
    33.3333 55.5555

    输出
    Min is:33
    Max is:55
    Min is:33.33
    Max is:55.55
    Min is:33.3333
    Max is:55.5555

    代码实现

    #include <iostream>
    
    using namespace std;
    
    template<typename T>
    class Compare
    {
    public:
        Compare(T a, T b)
        {
            m_x = a;
            m_y = b;
        }
        T Max()
        {
            return (m_x > m_y)? m_x : m_y;
        }
    
        T Min()
        {
            return (m_x < m_y)? m_x : m_y;
        }
    
    private:
        T m_x;
        T m_y;
    };
    
    int main()
    {
        int a, b;
        double x, y;
        double c, d;
    
        cin>>a>>b;
        cin>>x>>y;
        cin>>c>>d;
    
        Compare <int>compare(a, b);
        cout<<"Min is:"<<compare.Min()<<endl;
        cout<<"Max is:"<<compare.Max()<<endl;
    
    
        Compare <double>compare1(x, y);
        cout<<"Min is:"<<compare1.Min()<<endl;
        cout<<"Max is:"<<compare1.Max()<<endl;
    
    
        Compare <double>compare2(c, d);
        cout<<"Min is:"<<compare2.Min()<<endl;
        cout<<"Max is:"<<compare2.Max()<<endl;
    
    
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    28、函数模板

    问题描述
    用函数模板实现数据的从小到大排序。

    要求:
    1、使用刚讲过的 直接插入排序方法。
    2、用模板实现,模板支持不同的类型。

    主函数已经给出:

    int main()
    {
        int iArray[MAX_SIZE] = {0};
        float fArray[MAX_SIZE] = {0.0f};
    
        initArray(iArray, MAX_SIZE);
        initArray(fArray, MAX_SIZE);
    
        insertSort(iArray, MAX_SIZE);
        printArray(iArray, MAX_SIZE);
        insertSort(fArray, MAX_SIZE);
        printArray(fArray, MAX_SIZE);
    
        return 0;
    }
    

    输入
    10 9 8 7 6 5 4 3 2 100
    10.1 9.8 8.7 7.6 6.5 5.4 3.2 2.1 100.88 1.6

    输出
    ------------sort begin----------------
    pArray[0] = 2
    pArray[1] = 3
    pArray[2] = 4
    pArray[3] = 5
    pArray[4] = 6
    pArray[5] = 7
    pArray[6] = 8
    pArray[7] = 9
    pArray[8] = 10
    pArray[9] = 100
    ------------sort end-----------------
    ------------sort begin----------------
    pArray[0] = 1.6
    pArray[1] = 2.1
    pArray[2] = 3.2
    pArray[3] = 5.4
    pArray[4] = 6.5
    pArray[5] = 7.6
    pArray[6] = 8.7
    pArray[7] = 9.8
    pArray[8] = 10.1
    pArray[9] = 100.88
    ------------sort end-----------------

    代码实现

    #include <iostream>
    
    using namespace std;
    
    const int MAX_SIZE = 10;
    
    template<typename T>
    void initArray(T* arry, int sizes)
    {
        for(int i = 0; i < sizes; i++)
        {
            cin>>arry[i];
        }
    }
    
    template<typename T>
    void insertSort(T* arry, int sizes)
    {
        int i, j;
        T temp;
        for(i = 1; i < sizes; i++)
        {
            if(arry[i] < arry[i-1])
            {
                temp = arry[i];
                for(j = i; j > 0 ; j-- )
                {
                    if(arry[j - 1] > temp)
                    {
                        arry[j] = arry[j - 1];
                    }
                    else
                    {
                        break;
                    }
                }
                arry[j] = temp;
            }
        }
    
    }
    
    template<typename T>
    void printArray(T* arry, int sizes)
    {
        cout<<"------------sort begin----------------"<<endl;
        for(int i = 0; i < sizes; i++)
        {
            cout<<"pArray["<<i<<"] = "<<arry[i]<<endl;
        }
        cout<<"------------sort end-----------------"<<endl;
    }
    
    int main()
    {
        int iArray[MAX_SIZE] = {0};
        float fArray[MAX_SIZE] = {0.0f};
    
        initArray(iArray, MAX_SIZE);
        initArray(fArray, MAX_SIZE);
    
        insertSort(iArray, MAX_SIZE);
        printArray(iArray, MAX_SIZE);
        insertSort(fArray, MAX_SIZE);
        printArray(fArray, MAX_SIZE);
    
        return 0;
    }
    
    

    运行结果
    在这里插入图片描述

    29、异常处理实现

    问题描述
    根据main 函数和输出结果,写出缺失函数实现。

    缺失函数功能为:加薪,若为正常值,则加薪15%。否则若为-1,则抛出异常。

    int main()
    {
        int icnt = 0;
        cin >> icnt;
        float* pOldArray = new float[icnt];
    
        for(int i = 0; i < icnt; i++)
        {
            cin >> pOldArray[i];
        }
    
    
        for(int i = 0; i < icnt; i++)
        {
            try
            {
                float newSalary = addSalary(pOldArray[i]);
                cout << "newSalary = " << newSalary << endl;
            }
            catch(string s)
            {
                cout << s << endl;
            }
            cout << "i = "  << i << " finished..." << endl << endl;
        }
    
        delete []pOldArray;
    
        return 0;
    
    }
    

    输入
    3
    1000.5 2000.5 -1

    输出
    addSalary begin …
    addSalary end…
    newSalary = 1149
    i = 0 finished…

    addSalary begin …
    addSalary end…
    newSalary = 2299
    i = 1 finished…

    addSalary begin …
    addSalary error : zero salary
    zero salary
    i = 2 finished…

    代码实现

    #include <iostream>
    #include <string>
    using namespace std;
    
    
    float addSalary(float salary)
    {
        cout<<"addSalary begin ..."<<endl;
        if(salary == -1)
        {
            string s = "addSalary error : zero salary\nzero salary";
            throw s;
        }
    
        cout<<"addSalary end..."<<endl;
        return salary + salary*0.15;
    }
    
    
    int main()
    {
        int icnt = 0;
        cin >> icnt;
        float* pOldArray = new float[icnt];
    
        for(int i = 0; i < icnt; i++)
        {
            cin >> pOldArray[i];
        }
    
    
        for(int i = 0; i < icnt; i++)
        {
            try
            {
                float newSalary = addSalary(pOldArray[i]);
                cout << "newSalary = " << newSalary << endl;
            }
            catch(string s)
            {
                cout << s << endl;
            }
            cout << "i = "  << i << " finished..." << endl << endl;
        }
    
        delete []pOldArray;
    
        return 0;
    
    }
    
    

    运行结果
    在这里插入图片描述

    30、

    问题描述

    输入

    输出

    代码实现

    
    

    运行结果

    展开全文
  • linux下C++调C库,C调C++库C++调C库编译C 调用C++ 库 C++调C库 main.cpp #include "fun.h" int main() { fun(); } fun.h void fun(); fun.c #include <stdio.h> #include "fun.h" void fun() { printf(...

    linux下C++调C库,C调C++库

    C++调C库

    main.cpp

    #include "fun.h"
    
    int main()
    {
        fun();
    }
    

    fun.h

    void fun();
    

    fun.c

    #include <stdio.h>
    #include "fun.h"
    
    void fun()
    {
        printf("hello world!\n");
    }
    

    编译

    1.直接g++编译cpp 和 c文件
    在这里插入图片描述
    2.将c文件做成动态库然后动态链接
    在这里插入图片描述
    为何编译不过?
    因为C++与C编译不同,C++支持函数重载,所以原来的 fun 在编译时可能会加前缀。C编译后函数名不会变化。所以c++直接使用 c 库的头文件编译会找不到符号。 nm 时names的缩写。可以自己学习
    在这里插入图片描述
    那么我今天就想用C库改怎么办呢?
    这时候 extern “C” 就登场了。他会告诉编译器,编译此处的时候要用C的编译方式来编译。
    在这里插入图片描述
    直接用C库头文件编译不可得,后来直接修改头文件而不重新编译C库也好用。但是不可取。正常情况应在编译动态库时使用 extern C。

    改良版 fun.h

    #ifdef __cplusplus
    extern "C"{
    #endif
    
    void fun();
    
    #ifdef __cplusplus
    }
    #endif
    

    C 调用C++ 库

    函数名在编译时 C 和C++不同 C要用C++,函数名的问题解决起来很麻烦。遂不研究

    番外

    nm 可以查看符号信息,但是实际工作中项目发布给客户时并不需要带此信息。因此为了节省存储空间都会对项目瘦身。操作如下:

    #include <stdio.h>
    
    void fun()
    {
    	printf("hello woeld\n");
    }
    
    int main()
    {
    	fun();
    }
    

    在这里插入图片描述

    展开全文
  • 二级C++无纸化考试模拟软件是一款未来教育官方发布的功能强大的计算机二级c++题库软件,该软件基于最新《全国计算机等级考试二级C++语言程序设计考试大纲》研发而成,拥有考试题库、错题重做、模拟考场、超值赠送、...

    二级C++无纸化考试模拟软件是一款未来教育官方发布的功能强大的计算机二级c++题库软件,该软件基于最新《全国计算机等级考试二级C++语言程序设计考试大纲》研发而成,拥有考试题库、错题重做、模拟考场、超值赠送、下载中心五大栏目,能够为考生提供历年的真考题库,并支持详细的参考答案解析,以及高仿真的模拟考场,让考生更好的掌握好考试要点,从而一次性通过考试。需要的朋友可以下载试试!

    软件特色

    1、考试考点全面覆盖

    计算机二级c++题库软件覆盖考试要求的所有题型及考点(知识点),所有试题均由具有丰富授课经验的一线老师和命题专家编写而成,而且包括了历年考试真题,考生只要把软件中试题全部做会,通过考试一般来说是没有什么问题的。

    2、软件包括同步训练、测验评析、模拟考试三部分试题,同步训练可与教材配套同步学习使用,测验评析可以在学完每一章内容后进行自我检测,模拟考试则可以在学完教材所有内容后进行全真模拟考试。

    3、软件具有同步训练、章节测验、模拟考试功能,每一道试题都有详细分析,操作题都有详尽的操作步骤。

    4、你的训练、测试、模拟考试结果都能得到即时反馈,克服了用书本学习没有反馈的缺陷。

    5、软件界面清晰、操作简单,每一项操作都有相应的提示,使你使用起来得心应手。

    全国计算机等级考试二级C++语言程序设计考试大纲如下:

    基本要求

    1.掌握 C++语言的基本语法规则。

    2.熟练掌握有关类与对象的相关知识。

    3.能够阅读和分析 C++程序。

    4.能够采用面向对象的编程思路和方法编写应用程序。

    5.能熟练使用 Visual C++6. 0集成开发环境编写和调试程序。

    考试内容

    一、 C++语言概述

    1.了解 C++语言的基本符号。

    2.了解 C++语言的词汇(关键字、标识符、常量、运算符、标点符号等)。

    3.掌握 C++程序的基本框架。

    4.能够使用 Visual C++ 6. 0集成开发环境编辑、编译、运行与调试程序。

    二、数据类型、表达式和基本运算

    1.掌握 C++数据类型(基本类型,指针类型)及其定义方法。

    2.了解 C++的常量定义(整型常量,字符常量,逻辑常量,实型常量,地址常量,符号常量)。

    3.掌握变量的定义与使用方法(变量的定义及初始化,全局变量,局部变量)。

    4.掌握 C++运算符的种类、运算优先级和结合性。

    5.熟练掌握 C++表达式类型及求值规则(赋值运算,算术运算符和算术表达式,关系运算符和关系表达式 ,逻辑运算符和逻辑表达式,条件运算,指针运算,逗号表达式)。

    三、 C++的基本语句

    1.掌握 C++的基本语句,例如赋值语句、表达式语句、复合语句、输入、输出语句和空语句等。

    2.用 if语句实现分支结构。

    3.用 switch语句实现多分支选择结构。

    4.用 for语句实现循环结构。

    5.用 while语句实现循环结构。

    6.用 do. . . while语句实现循环结构。

    7.转向语句(goto, continue, break和 return)。

    8.掌握分支语句和循环语句的各种嵌套使用。

    四、数组、指针与引用

    1.掌握一维数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。

    2.了解字符串与字符数组。

    3.熟练掌握常用字符串函数(strlen,strcpy,strcat,strcmp,strstr等)。

    4.指针与指针变量的概念,指针与地址运算符,指针与数组。

    5.引用的基本概念,引用的定义与使用。

    五、掌握函数的有关使用

    1.函数的定义方法和调用方法。

    2.函数的类型和返回值。

    3.形式参数与实际参数,参数值的传递。

    4.变量的作用域和生存周期。

    5.递归函数。

    6.函数重载。

    7.内联函数。

    8.带有默认参数值的函数。

    六、熟练掌握类与对象的相关知识

    1.类的定义方式、数据成员、成员函数及访问权限(public, private, protected)。

    2.对象和对象指针的定义与使用。

    3.构造函数与析构函数。

    4.静态数据成员与静态成员函数的定义与使用方式。

    5.常数据成员与常成员函数。

    6. this指针的使用。

    7.友元函数和友元类。

    8.对象数组与成员对象。

    七、掌握类的继承与派生知识

    1.派生类的定义和访问权限。

    2.继承基类的数据成员与成员函数。

    3.基类指针与派生类指针的使用。

    4.虚基类。

    5.子类型关系。

    八、了解多态性概念

    1.虚函数机制的要点。

    2.纯虚函数与抽象基类,虚函数。

    3.了解运算符重载。

    九、模板

    1.简单了解函数模板的定义和使用方式。

    2.简单了解类模板的定义和使用方式。

    十、输入输出流

    1.掌握 C++流的概念。

    2.能够使用格式控制数据的输入输出。

    3.掌握文件的 I/ O操作。

    考试方式

    上机考试,考试时长 120分钟,满分 100分。

    1.题型及分值

    单项选择题 40分(含公共基础知识部分 10分)、操作题 60分(包括基本操作题 、简单应用题及综合应用题)。

    2.考试环境

    Visual C++ 6.0。

    0b2606f45c6025f17f9fae6ad1dd6e6e.png

    展开全文
  • golang调用c++库

    2021-11-10 17:00:58
    全面总结: Golang 调用 C/C++,例子式教程_zdy0_2004的专栏-CSDN博客_go调用c++库 导入动态库 .so 或 .dll 的形式 package main /* #cgo CFLAGS: -Iinclude #cgo LDFLAGS: -Llib -llibvideo #include "video...

    全面总结: Golang 调用 C/C++,例子式教程 - 指尖下的幽灵 - 博客园

    全面总结: Golang 调用 C/C++,例子式教程_zdy0_2004的专栏-CSDN博客_go调用c++库

    导入动态库 .so 或 .dll 的形式

     
    package main
     
    /*
    #cgo CFLAGS: -Iinclude
    #cgo LDFLAGS: -Llib -llibvideo
    #include "video.h"
    */
    import "C"
     
    import "fmt"
     
    func main() {
        cmd := C.CString("ffmpeg -i ./xxx/*.png ./xxx/yyy.mp4")
        C.exeFFmpegCmd(&cmd)
    }

    展开全文
  • Python调用C、C++库

    2021-01-12 07:14:55
    Python调用C、C++库sf2gis@163.com2014年9月24日1目标:Python调用C/C++中的类或方法ctypes是Python扩展库,自2.5以后开始加入...用于调用C/C++库。2原理python使用c api dlopen库打开dll。3方法:ctypes,sip,pycxx...
  • 点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达「本文介绍了在Linux系统下生成文件,以及编写头文件来使用该库函数」1.编写文件我们知道C++工程在编译时,含有...
  • ROS 引用 C++库

    2021-06-11 20:31:15
    link_directories()里添加所需要的的存储路径,相当于编译过程中的-L命令; target_link_libraries()里面添加需要的的名称,相当于编译过程中的-l命令。 target_link_libraries(AllMsgGet ${catkin_LIBRARIES} ...
  • 在一个Rust工程中,如果集成C/C++编写的代码,具体步骤如下。 2. C++代码编写规范 2.1 cpplib.h写法 #ifndef CPPLIB_H #ifdef __cplusplus extern "C" { #endif int max(int a, int b); #ifdef __cplusplus }...
  • Matlab 导出c++ 文件

    2021-01-06 13:41:23
    在Visual Studio中使用C++中调用MATLAB程序 ...预先提示:这样编出的程序仍要调用Matlab底层DLL,摆脱不了DLL底层的支持,如果移植到无matlab环境的机器,需要安装MCR进行运行环境的支持。 本文档记录了M.
  • 如标题所示,在linux下使用qtcreator创建项目调用C++库文件,并成功运行。 一、编程环境及实现方法 系统:ubuntu16.04 IDE:Qtcreator5.9.9 编程语言:C++ 第三方库:opencv2.4.13.6 自制C++共享库:libdisplay.so ...
  • 1、编写lib.h文件 #include<iostream> using namespace std; class demo{ public: demo(){}; ~demo(){}; void func(); ... "封装cpp文件为.so共享文件成功!\n"; } 3、编译 g++ -
  • Requirements for calling functions in external, shared C++ libraries from MATLAB.Outline for publishing an interface to a C++ library.Generate and edit the MATLAB.mlx library definition file to custom...
  • Android 平台提供很小的 C++ 运行时支持 (libstdc++)。这种很小的支持不包含如下支持:标准 C++ 支持(几个无关紧要的标头除外)。C++ 异常支持RTTI 支持NDK 提供此默认使用的标头。此外,NDK 还提供大量可提供...
  • C++库和框架集合

    2021-03-25 15:02:46
    C++ 框架、和资源的一些汇总列表,内容包括:标准、Web应用框架、人工智能、数据库、图片处理、机器学习、日志、代码分析等。 1. 标准 C++标准,包括了STL容器,算法和函数等。 C++ Standard Library:是...
  • cgo如何调用c++库

    2021-07-13 11:54:22
    cgo调用c++库,只需要在cpp源代码 include 头文件的时候,加上 extern "C" 就行了。是啊,c++ 代码,因为重载函数等特性,会产生歧义,在编译的时候,编译器会修改函数名。然后cgo,再用gcc去链接头文件的函数,肯定...
  • VSCode中C/C++库文件的配置

    千次阅读 2020-12-22 02:55:00
    VSCode中C/C++库文件的配置之前一直在是用sublime做主要编辑器,现在主要使用VSCode,毕竟大厂制作,从目前的使用情况来看,我更喜欢使用VSCode编辑器。有时候会用VScode来组件C/C++工程,并且用到了一些外部依赖的...
  • OSQP 在LINNUX系统下的编译安装及使用
  • Java调用C++库

    2021-03-06 20:14:07
    c++生成的动态 libhello.so g++ -std=c++11 -shared -fPIC -I$JAVA_INC -I$JAVA_INC/linux HelloJNIImpl.cpp -o libhello.so 运行java时指定的 java.library.path=. java -Djava.library.path=. HelloJNI 报错no ...
  • 本文主要介绍在VS2019中配置第三方C/C++链接,在第三方链接中主要的文件是文件以及头文件。即“.h”文件和“.lib”文件。 第一步: 在需要链接第三方的项目中打开“项目”中的“属性”标签;打开之后界面...
  • 文章目录关于程序运行文件链接原理和头文件的关系命名规范查看可执行文件依赖g++静态搜索顺序动态搜索路径环境变量动态升级问题: 和头文件的关系 平时我们写程序都必须 include 很多头文件,因为...
  • 最近需要在由纯c语言编写的代码中调用C++的动态,在网上找了一些资料,现在总结下解决方法。主要的思想就是将C++的动态再封装一层,在这一层编写C语言的函数api,这API中使用C++动态提供的类;具体例子如下:1...
  • 目录前言关于创建项目手动绑定自动绑定结构体union联合体enum枚举回调函数空指针析构ownershippanic 前言 没有前言,干就完事了。 关于 本人环境是win10,vs2013。 不管什么环境,用下面的文件制作出对应的动态...
  • 本文主要向大家介绍了 C/C++知识点之VSCode中C/C++库文件的配置,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。之前一直在是用sublime做主要编辑器,现在主要使用VSCode,毕竟大厂制作,从目前的...
  • C++C++的工具

    2021-08-04 07:55:01
    目录 处理高并发的 日志 PRC 嵌入式文件系统 代码质量 深度学习 HTTP 网络 单元测试 性能测试 文件压缩 下次造轮子前先看看现有的轮子吧 ... cJSON (C++的不推荐这个) - 4. CMockery - 5...
  • 我试图将“C++ PARTUUDO”链接到我的“C++演示模块”,这是一个Python可调用的(模块)。在我使用distutils执行此操作,为了执行静态链接,我将libportaudio添加到extra\u objects参数中,如下所示:module1 = ...
  • C++库之哈希表

    2021-09-02 17:23:04
    C++标准中有哈希表,直接调用即可,包括哦unordered_map和unordered_set,使用之前需要引用头文件 #include <unordered_map> #include <unordered_set> 分别介绍一下unordered_map和unordered_set...
  • 为了处理if--else结构中可能出现二义性,C++中要求关键字是和它前面最近未配正确且可见那个if关键字配对。所以本题else是和第二个if配正确。而本题第一个if中条件就不成立,故最终输出c原来数值。 故本题选C。 13、...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 772,195
精华内容 308,878
关键字:

c++库

c++ 订阅
友情链接: SVM.rar