用于课堂交换代码


提交答案

分数: 2
时间限制: 2.0s
内存限制: 2M

作者:
题目类型
允许的语言
C
#Pyhon 3 猜数字挑战小游戏
import random
while True:
    LEVEL = input("1:低级;2:中级; 3:高级。   请选择游戏难度:  ");
    if LEVEL == '1': MAX_TIMES = 10
    elif LEVEL == '2': MAX_TIMES = 7
    else: MAX_TIMES = 5
    while True:
        begin = random.randint(1, 1000)
        end = random.randint(1, 1000)
        if abs(end - begin) > 100:
            break
    if begin > end:
        begin, end = end, begin
    num = random.randint(begin, end)
    print("电脑我心里有一个{}到{}之间的整数,小子你能猜到这个数字吗?".format(begin, end))
    print("想作弊,输入"开外挂";否则回车直接开始挑战我")
    if input() == "开外挂":
        print("我心里想的是数字{},你可以直接说出来就赢我了".format(num))
    times = 0
    while times < MAX_TIMES:
        try:
            _guess = input("我心中的数字是多少:")
            guess = int(_guess)
        except ValueError:
            if _guess == "开外挂":
                print("我心里想的是数字{},你可以直接说出来就赢我了".format(num))
            else:
                print("大兄弟,要猜数字。重来!")
            continue
        if guess == num:
            print("你赢了,我甘拜下风")
            break
        elif guess < num:
            print("猜小了,游戏继续")
        else:
            print("猜大了,游戏继续")
        times += 1
    else:
        print("大兄弟,都猜了{}次了,你都没猜对。You loser".format(MAX_TIMES))
    again = input("再来一局?Yes or No:  ").upper()
    if not (again == 'YES' or again == 'Y'):
        break
//类是封装成员函数的结构体
#include <iostream>
using namespace std;
struct student {
    int sno;
    char name[20];
    int grade;
    void baochengji()
    {
        cout << "my grade is " << grade << endl;
    }
};

int main()
{
    struct student yangzhu;
    yangzhu.sno = 19;
    yangzhu.grade = 62;
    yangzhu.baochengji();//baochengji(yangzhu);
    return 0;
}
//成员函数类外实现
#include <iostream>
using namespace std;
class Student {
public:
    int sno;
    char name[20];
    int grade;
    void baochengji();
};
void Student::baochengji()
{
    cout << "my grade is " << grade << endl;
}
int main()
{
    Student yangzhu;
    yangzhu.sno = 19;
    yangzhu.grade = 62;
    yangzhu.baochengji();//baochengji(yangzhu);
    return 0;
}
//成员函数重载
#include <iostream>
using namespace std;
class Student {
public:
    int sno;
    //int sno;
    char name[20];
    int grade;
    void baochengji();
    void baochengji(int plus);
};
void Student::baochengji()
{
    cout << "my grade is " << grade << endl;
}
void Student::baochengji(int plus)
{
    cout << "my grade is " << grade + plus << endl;
}
int main()
{
    Student yangzhu;
    yangzhu.sno = 19;
    yangzhu.grade = 62;
    yangzhu.baochengji();//baochengji(yangzhu);
    yangzhu.baochengji(20);
    return 0;
}
//构造函数
#include <iostream>
using namespace std;
class Student {
public:
    Student() { sno = 19; grade = 62; }
    Student(int mysno, int mygrade) { sno = mysno; grade = mygrade; }
    int sno;
    char name[20];
    int grade;
    void baochengji();
};
void Student::baochengji()
{
    cout << "my grade is " << grade << endl;
}
int main()
{
    Student yangzhu, zhangsan(11, 99);
    //cout << "yangzhu" << endl;
    yangzhu.baochengji();
    zhangsan.baochengji();
    return 0;
}
//析构函数
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student {
public:
    Student() { sno = 19; grade = 62; }
    Student(int mysno, int mygrade, char myname[]) 
    { 
        sno = mysno; grade = mygrade;
        name = (char *)malloc(strlen(myname)+1);
        strcpy(name, myname);
    }
    ~Student() { cout << "in destructor" << endl; free(name); }
    int sno;
    char *name;
    int grade;
    void baochengji();
};
void Student::baochengji()
{
    cout << "I'm " << name << ", my grade is " << grade << endl;
}
int main()
{
    Student zhangsan(11, 99, "zhangsan2");
    zhangsan.baochengji();
    cout << "yangzhu" << endl;
    return 0;
}
//拷贝构造函数
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
using namespace std;
class Student {
public:
    Student() { sno = 19; grade = 62; name = NULL; }
    Student(int mysno, int mygrade, char myname[]) 
    {
        cout << "in constructor" << endl;
        sno = mysno; grade = mygrade;
        name = (char *)malloc(strlen(myname)+1);
        strcpy(name, myname);
    }
    Student(const Student &  in)//拷贝构造函数
    {
        cout << "in copy constructor" << endl;
        sno = in.sno; grade = in.grade;
        name = (char *)malloc(strlen(in.name)+1);
        strcpy(name, in.name);
    }
    ~Student() { free(name); }
    int sno;
    char *name;
    int grade;
    void baochengji();
};
void Student::baochengji()
{
    cout << "I'm " << name << ", my grade is " << grade << endl;
}
int main()
{
    Student zhangsan(11, 99, "zhangsan2");//调用普通构造函数
    Student yangzhu = zhangsan;//此时系统会自动调用拷贝构造函数
    printf("%d %d %p\n", zhangsan.sno, zhangsan.grade, zhangsan.name);
    printf("%d %d %p\n", yangzhu.sno, yangzhu.grade, yangzhu.name);
    getchar();
    return 0;
}
//this指针
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student {
public:
    Student(int sno, int grade, char name[]) //形参与成员属性同名
    { 
        this->sno = sno; this->grade = grade;
        this->name = (char *)malloc(strlen(name)+1);
        strcpy(this->name, name);
    }
    ~Student() { free(name); }
//每一个对象(例如:yangzhu和zhangsan),都有自己的成员属性
    int sno;
    char *name;
    int grade;
//每一个对象的成员方法的代码是完全一样的,所以应该共享同一份代码
    void baochengji() // baochengji(Student *p)
    {cout << "I'm " << name << ", my grade is " << this->grade << endl;}
};
/* 从道理上讲,zhangsan和yangzhu两个对象在内存中应该有3部分:
1. zhangsan的成员属性
2. yangzhu 的成员属性
3. zhangsan和yangzhu共享的成员方法的代码
成员方法被调用的时候,系统会传入一个隐含的参数
(指向yangzhu或者zhangsan的指针),以便区分要访哪个对象的成员属性。
这个指针就被称为this指针。
*/
int main()
{
    Student zhangsan(11, 99, "zhangsan");
    Student yangzhu(12, 60, "yangzhu");
    zhangsan.baochengji();//视为baochengji(&zhangsan)
    yangzhu.baochengji(); //视为baochengji(&yangzhu)
    cout << "yangzhu" << endl;
    return 0;
}
//static
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student {
private:
    static int persons;
public:
    Student(int mysno, int mygrade, char myname[]) 
    { 
        persons++;
        sno = mysno; grade = mygrade;
        name = (char *)malloc(strlen(myname)+1);
        strcpy(name, myname);
    }
    ~Student() { free(name); }
    int sno;
    char *name;
    int grade;
    void baochengji() { cout << "I'm " << name << ", my grade is " << grade << endl; };
    static int getpersons() { return persons; }
};
int Student::persons = 0;
int main()
{
    Student zhangsan(11, 99, "zhangsan");
    Student yangzhu(12, 60, "yangzhu");
/*
    cout << yangzhu.persons << endl;
    cout << zhangsan.persons << endl;
    cout << Student::persons << endl;
*/
    cout << yangzhu.getpersons() << endl;
    cout << Student::getpersons() << endl;
    return 0;
}
//友员函数
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student;
class Teacher {
public:
    Teacher(int mytno, char myname[]) 
    { 
        tno = mytno;
        name = (char *)malloc(strlen(myname)+1);
        strcpy(name, myname);
    }
    ~Teacher() { free(name); }
    int tno;
    char *name;
    void chachengji(const Student & stu);
};
class Student {
    int grade;
public:
    Student(int mysno, int mygrade, char myname[]) 
    { 
        sno = mysno; grade = mygrade;
        name = (char *)malloc(strlen(myname)+1);
        strcpy(name, myname);
    }
    ~Student() { free(name); }
    friend void Teacher::chachengji(const Student &);
    int sno;
    char *name;
};
void Teacher::chachengji(const Student & stu) { cout << stu.grade << endl; }

int main()
{
    Student zhangsan(11, 99, "zhangsan");
    Teacher yangzhu(33, "yangzhu");
    yangzhu.chachengji(zhangsan);
    return 0;
}
//内部对象
#include <iostream>
#include <cstring>
#include <cstdlib>
using namespace std;
class Student {
public:
    Student(int mysno, int mygrade, char myname[]) 
    { 
        sno = mysno; grade = mygrade;
        strcpy(name, myname);
    }
    int sno;
    char name[20];
    int grade;
};
class Teacher {
public:
//ÔÚ³õʼ»¯ÁбíÖжÔÄÚ²¿¶ÔÏó½øÐгõʼ»¯
    Teacher(int tno, char name[], Student myassistant): assistant(myassistant)  
    {
        this->tno = tno;
        strcpy(this->name, name);
        //this->assistant = assistant;
    }
    int tno;
    char name[20];
    Student assistant;
};
int main()
{
    Student zhangsan(11, 99, "zhangsan");
    Teacher yangzhu(133, "yangzhu", zhangsan);
    cout << yangzhu.assistant.name << endl;

    return 0;
}
//继承基础
#include <iostream>
#include <cstring>
using namespace std;
class Person { //父类   基类
protected: //不允许从外部访问,但是子类可以访问
    char name[20];
public:
    int no;
    void whoami() { cout << "I am " << name << endl; }
};
class Student : public Person {//子类   派生类
public:
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade) 
    { no = myno; strcpy(name, myname); grade = mygrade; }

};
class Teacher : public Person { //公有继承、私有继承、保护继承
public:
    int salary;
    void teach() { cout << "I am teaching" << endl; }
    Teacher(int myno, char myname[], int mysalary) { no = myno; strcpy(name, myname); salary = mysalary; }
};
int main()
{
    Student zhangsan(19, "zhangsan", 99);
    Teacher yangzhu(133, "yangzhu", 7000);
    zhangsan.whoami();
    zhangsan.study();
    yangzhu.whoami();
    yangzhu.teach();
//  strcpy(yangzhu.name, "abc");
//  yangzhu.whoami();
    return 0;
}
//使用初始化表完成内嵌父类对象的初始化
#include <iostream>
#include <cstring>
using namespace std;
class Person {
private:
    char name[20];
public:
    Person(int myno, const char myname[]) { no = myno; strcpy(name, myname); }
    int no;
    void whoami() { cout << "I am " << name << endl; }
};
class Student : public Person {
public:
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade) : Person(myno, myname), grade(mygrade)
//初始化表也可以用于初始化自身特有(不是继承得到)的属性
    {  }

};
class Teacher : public Person {
public:
    int salary;
    void teach() { cout << "I am teaching" << endl; }
    Teacher(int myno, char myname[], int mysalary) : Person(myno, myname) 
//在初始化表中指明由父类完成内嵌的父类对象的初始化
    { salary = mysalary; }
};
int main()
{
//从逻辑上看,一个学生对象是由2部分组成:内嵌的父类对象+自己特有的特性
    Student zhangsan(19, "zhangsan", 99);
    Teacher yangzhu(133, "yangzhu", 7000);
    zhangsan.whoami();
    zhangsan.study();
    yangzhu.whoami();
    yangzhu.teach();
    return 0;
}
//缺省构造函数
#include <iostream>
#include <cstring>
using namespace std;
class Person {
protected:
    char name[20];
public:
//如果不定义任何构造函数,系统会帮你写一个缺省构造函数(无参且不作任何操作)
//一旦定义了构造函数,系统不会再帮你写任何的构造函数 
//  Person(int myno, char myname[]) { no = myno; strcpy(name, myname); }
    Person() { cout << "abc" << endl; }
    int no;
    void whoami() { cout << "I am " << name << endl; }
};
class Student : public Person {
public:
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade) 
//如果没有初始化表,那么系统会自动调用父类的无参构造函数
    { no = myno; strcpy(name, myname); grade = mygrade; }

};
class Teacher : public Person {
public:
    int salary;
    void teach() { cout << "I am teaching" << endl; }
    Teacher(int myno, char myname[], int mysalary) { no = myno; strcpy(name, myname); salary = mysalary; }
};
int main()
{
    Student zhangsan(19, "zhangsan", 99);
    Teacher yangzhu(133, "yangzhu", 7000);
    Person lisi;
    lisi.whoami();
    zhangsan.whoami();
    zhangsan.study();
    yangzhu.whoami();
    yangzhu.teach();
    return 0;
}
//父类指针与子类指针
#include <iostream>
#include <cstring>
using namespace std;
class Person {
private:
    char name[20];
public:
    Person(int myno, const char myname[]) { no = myno; strcpy(name, myname); }
    int no;
    void whoami() { cout << "I am " << name << endl; }
};
class Student : public Person {
public:
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade) : Person(myno, myname), grade(mygrade)
    {  }

};
class Teacher : public Person {
public:
    int salary;
    void teach() { cout << "I am teaching" << endl; }
    Teacher(int myno, char myname[], int mysalary) : Person(myno, myname) 
    { salary = mysalary; }
};
int main()
{
    Person *p;
    Student *q;
    Person lisi(12, "lisi");
    Student zhangsan(19, "zhangsan", 99);
    Teacher yangzhu(133, "yangzhu", 7000);
    p = &lisi;
    p = &zhangsan;//父类指针可以指向子类对象
    //cout << p->grade << endl; //指向子类对象的父类指针只能访问内嵌的父类对象
    cout << p->no << endl;
    //q = &lisi; //子类指针不可以指向父类对象
    zhangsan.whoami();
    zhangsan.study();
    yangzhu.whoami();
    yangzhu.teach();
    return 0;
}
//虚方法与抽象类
#include <iostream>
#include <cstring>
using namespace std;
class Person {//抽象类
private:
    char name[20];
public:
    Person(int myno, const char myname[]) { no = myno; strcpy(name, myname); }
    int no;
    void whoami() { cout << "I am " << name << endl; }
    //virtual void career() { cout << "I don't know my career" << endl; }
    virtual void career() = 0; //纯虚方法
};
class Student : public Person {
public:
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade) : Person(myno, myname), grade(mygrade)
    {  }
    void career() { cout << "I am student" << endl; }
};
class Teacher : public Person {
public:
    int salary;
    void teach() { cout << "I am teaching" << endl; }
    Teacher(int myno, char myname[], int mysalary) : Person(myno, myname) 
    { salary = mysalary; }
    void career() { cout << "I am teacher" << endl; }
};
int main()
{
    int choice;
    Person *p;
//    Person lisi(12, "lisi");
    Student zhangsan(19, "zhangsan", 99);
    Teacher yangzhu(133, "yangzhu", 7000);
    printf("请输入你的选择: 1. 指向学生  2.指向老师  ");
    scanf("%d", &choice);
    if (choice == 2)
        p = &yangzhu;
    else
        p = &zhangsan;
    p->career();//系统会根据指针的基类型来决定调用哪一个同名方法
//系统会根据对象的类型来调用不同的同名方法
//  lisi.career();
//  zhangsan.career();
//  yangzhu.career();

    return 0;
}
//虚析构函数
#include <iostream>
#include <cstring>
using namespace std;
class Person {
private:
    char name[20];
public:
    Person(int myno, const char myname[]) { no = myno; strcpy(name, myname); }
    int no;
    void whoami() { cout << "I am " << name << endl; }
    virtual ~Person() { cout << "destruct Person" << endl; }
};
class Student : public Person {
public:
    char *nickname;
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade, char mynickname[]) : Person(myno, myname)
    { grade = mygrade; nickname = (char *)malloc(strlen(mynickname)+1); 
                strcpy(nickname, mynickname); }
    ~Student() { cout << "destruct Student" << endl; free(nickname); }
};
int main()
{
    Person *p;
    p = new Student(19, "zhangsan", 99, "xiaogou");
    p->whoami();
    delete p;
    return 0;
}
//纯虚函数在类库中的应用
#include <iostream>
#include <cstring>
using namespace std;
class Person { // 类库编写者实现Person类
private:
    char name[20];
public:
    Person(int myno, const char myname[]) { no = myno; strcpy(name, myname); }
    int no;
    void whoami() { cout << "I am " << name << endl; }
    virtual void career() = 0;
    void selfintro() { whoami();  career(); }
};
class Student : public Person { // 应用程序员实现覆盖虚函数career
public:
    int grade;
    void study() { cout << "I am studing" << endl;}
    Student(int myno, char myname[], int mygrade) : Person(myno, myname), grade(mygrade)
    {  }
    void career() { cout << "I am student" << endl; }
};
class Teacher : public Person {
public:
    int salary;
    void teach() { cout << "I am teaching" << endl; }
    Teacher(int myno, char myname[], int mysalary) : Person(myno, myname) 
    { salary = mysalary; }
    void career() { cout << "I am teacher" << endl; }
};
int main()
{
    Student zhangsan(19, "zhangsan", 99);
    Teacher yangzhu(133, "yangzhu", 7000);
//不同对象调用selfintro效果不一样
    zhangsan.selfintro();
    yangzhu.selfintro();
    return 0;
}
//基本运算符重载 
#include <iostream>
#include <cmath>
using namespace std;
class complex {
private:
    double real, imag;
public:
/*
    complex(double r, double i): real(r), imag(i) { }
    complex(): real(0), imag(0) { }
    complex(double r): real(r), imag(0) { }  //explicit complex(double r): real(r), imag(0) { }
*/
    complex(double r = 0, double i = 0): real(r), imag(i) { }
    explicit operator double() { return sqrt(real * real + imag * imag);    } // vc6 has no double operator, but dev c++ did
    friend complex operator+(const complex &a, const complex &b) { return complex(a.real + b.real, a.imag + b.imag); }
    //friend complex operator+(const complex &a, const complex &b) { complex sum = a; sum += b; return sum; }
    friend complex operator-(const complex &a, const complex &b) { return complex(a.real - b.real, a.imag - b.imag); }
    friend ostream& operator<<(ostream& os, const complex& b) { 
        os << b.real;
        if (b.imag >= 0)
            os << "+";
        os << b.imag << "i";
        return os;
    }
    complex& operator+=(const complex& b) { real += b.real;  imag += b.imag;  return *this; }
    complex operator-() { return complex(-real, -imag); }
    complex operator+() { return *this; }
    complex& operator++() { real++; imag++; return *this;}
    complex& operator--() { real--; imag--; return *this;}
    complex operator++(int) { complex tmp = *this; real++; imag++; return tmp; } //Todo: 如何让函数返回右值 
    complex operator--(int) { complex tmp = *this; real--; imag--; return tmp; } //Todo: 如何让函数返回右值
    friend bool operator==(const complex& a, const complex& b) { return a.real == b.real && a.imag == b.imag; }
    friend bool operator!=(const complex& a, const complex& b) { return !(a == b); }
    double operator[](int loc) { return loc == 0 ? real : imag; }
    double operator()(char loc) { return loc == 'r' ? real : imag; }
};

int main()
{
    complex zhangsan(-10, -10), lisi(3, 4);
    complex yangzhu;
    double result;
    yangzhu = zhangsan + lisi;
    cout << yangzhu << endl;
    yangzhu += zhangsan;
    cout << yangzhu << endl;
    yangzhu = -yangzhu;
    cout << yangzhu << endl;
    zhangsan = yangzhu++;
    cout << yangzhu << " " << zhangsan << endl;
    zhangsan = ++yangzhu;
    cout << yangzhu << " " << zhangsan << endl;
    if (yangzhu == zhangsan)
        cout << "equal" << endl;
    else
        cout << "not equal" << endl;
    yangzhu = zhangsan + 10.1;
    cout << yangzhu << endl;
    result = double(lisi);
    cout << result << endl;

    cout << lisi[0] << " " << lisi[1] << endl;
    cout << lisi('r') << " " << lisi('i') << endl;
    return 0;
}

评论

目前没有评论。