Fork me on Gitee

网络工程18级《C++程序设计II》实践作业1

 

A.类的应用1
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 162 (133 users) Total Accepted: 136 (132 users) Special Judge: No
Description
利用面向对象程序设计的方法,通过长方体的长、宽、高求长方体的体积与表面积。
Input
多组测试数据。第一行输入测试数据的组数t(0<t<10);以下t行每行输入长方体的长a、宽b、高c,(0<a,b,c<10,且为int型,a、b、c之间由空格分隔)。
Output
每组输出数据为2个,分别为长方体的体积和表面积,数据之间由空格分隔。
Sample Input
6
7 5 6
4 6 8
5 9 4
1 10 1
5 4 5
10 7 7
Sample Output
214 210
208 192
202 180
42 10
130 100
378 490

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

code:

#include<iostream>
using namespace std;
class rectangle{
float length;
float width;
float height;
public:
rectangle(){};
rectangle(float l,float w,float h){
    length = l;
    width = w;
    height = h;
}
~rectangle(){};
void setDimension(float l,float w,float h){
length = l;
width = w;
height = h;
}
float getLength(){return length;}
float getWidth(){return width;}
float getHeight(){return height;}
float getVolum(){return length*width*height;}
float getArea(){return 2*(length*width+length*height+width*height);;}
};
int main(){
    int T;
    cin>>T;
    while(T--){
        int a,b,c;
        cin>>a>>b>>c;
        rectangle myrectangle(a,b,c);
        cout<<myrectangle.getArea()<<" "<<myrectangle.getVolum()<<endl;
    }


return 0;
}

 

B.类的应用2
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 166 (132 users) Total Accepted: 135 (131 users) Special Judge: No
Description
利用面向对象程序设计的方法,通过三角形的三边求三角形的周长。
Input
多组测试数据。第一行输入测试数据的组数t(0<t<10);以下t行每行输入三角形的三边a、b、c,(0<a,b,c<10,且为int型,a、b、c之间由空格分隔)。
Output
每组输出数据为1个。当输入的三边能够构成三角形时,输出周长;当输入的三边不能构成三角形时输出“error”。
Sample Input
2
1 10 1
5 4 5
Sample Output
error
14

 

 

#include<iostream>
using namespace std;
class triangle{
    int a,b,c;
    public:
    void set(int a, int b, int c){
    this->a = a;
    this->b = b;
    this->c = c;
    }
    bool istri(){
    return a+b>c && a+c>b && b+c>a;
    }
    int getl(){
        return a+b+c;
    }

};
 int main(){
    int a,b,c,N=0;
    triangle T;
    cin>>N;
    while(N--){
        cin >> a >> b >> c;
        T.set(a,b,c);
        if(T.istri()){
        cout <<T.getl()<< endl;
        }else{
            cout <<"error"<< endl;
         }
    }
}

 

 

C.类的应用3
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 193 (127 users) Total Accepted: 135 (127 users) Special Judge: No
Description
利用面向对象程序设计的方法解决问题。行走江湖,靠的是脑力和武器。脑瓜灵光,武器平平免不了输给或愚钝但手握屠龙的无名之辈,脑力与武器按照四六比例决定一个人的江湖地位。适逢Apple新店开业,当街擂台比武海选晋级选手赢取Apple X。比武之前要登记选手:选手名(长度不大于10的字符串)、脑力值(不大于100的整数)、武器名(长度不大于10的字符串)、武器攻击力(不大于100的整数)。比武方式:两两一组,对打。
Input
多组测试数据。第一行输入测试数据的组数t(0<t<10);以下2t行每2行输入2名比武者的信息:选手名、脑力值、武器名、武器攻击力,数据之间由空格分隔。
Output
针对每2行选手的输入,输出比武结果。
   当前者打败了后者,会输出:前者名 win 后者名
   当前者输给了后者,会输出:前者名 lost 后者名
   当前者与后者不分胜负,会输出:前者名 tie 后者名
Sample Input
3
Sunwk 100 Jingb 100
Niumw 0 Bajs 100
Tangsz 100 Chanzhang 0
Honghe 80 Huolongqiang 60
ZHUba 60 JCdp 60
SHAwj 30 FTc 80
Sample Output
Sunwk win Niumw
Tangsz lost Honghe
ZHUba tie SHAwj
Hint
Honghe 80 Huolongqiang 60:此人江湖能力为80*0.4+60*0.6=68

 

 

#include<iostream>
using namespace std;
class people{
    string name;
    int wind;
    string gun;
    int power;
    public:
    void set(string name,int wind, string gun, int power){
    this->name = name;
    this->wind = wind;
    this->gun = gun;
    this->power = power;
    }
    int getTolPower(){
        return wind*0.4+power*0.6;
    }
};
int main(){
    int t;
    cin>>t;
    people p1,p2;
    while(t--){
        string name,name2,gun;
        int wind,power;
        cin>>name>>wind>>gun>>power;
        p1.set(name,wind,gun,power);
        cin>>name2>>wind>>gun>>power;
        p2.set(name,wind,gun,power);
        if(p1.getTolPower()==p2.getTolPower()){
            cout<<name <<" tie "<< name2<<endl;
        }else if(p1.getTolPower()>p2.getTolPower()){
            cout<<name <<" win "<< name2<<endl;
        }else{
                cout<<name <<" lost "<< name2<<endl;
        }
    }
}

 

D.类的应用4
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 160 (127 users) Total Accepted: 128 (127 users) Special Judge: No
Description
利用面向对象程序设计的方法解决问题。
   神魔争斗一直延续着...,是集智慧兵器威力一体(智慧与兵器威力权重比为4:6)的神与仅凭兵器威力的魔的较量。进入新的时代,要举办一场神魔擂台预选赛。现场注册登记,要记录神的名号(长度不大于10的字符串)、神的智慧值(不大于100的整数)、神使用兵器的名字(长度不大于10的字符串)以及威力值(不大于100的整数)。魔要记录魔的名字(长度不大于10的字符串)、魔使用兵器的名字(长度不大于10的字符串)以及威力值(不大于100的整数)。
Input
多组测试数据。第一行输入测试数据的组数t(0<t<10);以下2t行每2行的第一行输入神的名号、神的智慧值、神使用的兵器名字以及威力值,数据之间由空格分隔;第二行输入魔的名字、魔使用的兵器以及威力值,数据之间由空格分隔。
Output
针对每2行神魔比武的输入,输出比武结果。
     当神打败了魔,会输出:神名 win 魔名
     当神败给了魔,会输出:神名 lost 魔名
     当神魔不分胜负,会输出:神名 tie 魔名
Sample Input
3
Tangsz 100 Chanzhang 0
Honghe Huolongqiang 60
Sunwk 100 Jingb 100
Niumw Bajs 100
Zhubj 20 Jiucdp 80
Xiaoy Pud 20
Sample Output
Tangsz lost Honghe
Sunwk tie Niumw
Zhubj win Xiaoy
Hint
Tangsz 100 Chanzhang 0:此神战斗力为100*0.4+0*0.6=40
Honghe Huolongqiang 60:此魔战斗力为60

 

 

#include<iostream>
#include<cstdlib>
using namespace std;
class people{
    string name;
    int wind;
    string gun;
    int power;
    public:
    void set(string name,int wind, string gun, int power){
    this->name = name;
    if(wind!=0){
        this->wind = wind;
    }else{
        this->wind = 0;
    }
    this->gun = gun;
    this->power = power;
    }
    int getTolPower(){
        if(this->wind==0){
            return power;
        }
        return wind*0.4+power*0.6;
    }
};
int main(){
    int t;
    cin>>t;
    people p1,p2;
    while(t--){
        string name,name2,gun;
        int wind,power;
        cin>>name>>wind>>gun>>power;
        p1.set(name,wind,gun,power);
        cin>>name2>>gun>>power;
        p2.set(name2,0,gun,power);
        if(p1.getTolPower()==p2.getTolPower()){
            cout<<name <<" tie "<< name2<<endl;
        }else if(p1.getTolPower()>p2.getTolPower()){
            cout<<name <<" win "<< name2<<endl;
        }else{
                cout<<name <<" lost "<< name2<<endl;
        }
    }
}

 

 

 

E.类的应用5
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 168 (120 users) Total Accepted: 127 (120 users) Special Judge: No
Description

利用面向对象设计方法解决问题。根据主函数main()的内容、输入与输出数据,完成类的设计。
    在平面直角坐标系上建立两点A和B,并按格式输出其坐标。给定A、B两点坐标在x和y方向上的偏移量,再次输出两点的坐标。
    
    在平面直角坐标系上建立线段L,并按格式输出线段两端点的坐标及线段长度。
    在平面直角坐标系上建立线段L1,给定线段两端点在x和y方向上的偏移量从而得到线段的新位置与新的长度,并按格式输出该线段两端点的新坐标及线段长度。

主函数如下:
int main()
{
    int n,x1,x2,y1,y2;
    Point A,B(10,10);
    cout<<"PointA:["<<A.getX()<<","<<A.getY()<<"]\n";
    cout<<"PointB:["<<B.getX()<<","<<B.getY()<<"]\n";
    cin>>x1>>y1;
    A.setP(x1,y1); B.setP(x1,y1);
    cout<<"PointA:["<<A.getX()<<","<<A.getY()<<"]\n";
    cout<<"PointB:["<<B.getX()<<","<<B.getY()<<"]\n";

    cin>>x1>>y1>>x2>>y2;
    Line L(x1,y1,x2,y2);
    L.getP();printf("%.2lf\n",L.dis());

    Line L1(0,0,1,1);
    cin>>x1>>y1>>x2>>y2;
    L1.setL(x1,y1,x2,y2);
    L1.getP();printf("%.2lf\n",L1.dis());

    return 0;

Input
    第一行输入的是:A、B两点坐标在x和y方向上的偏移量,数据以空格分隔。
    第二行输入的是:线段L两端点的坐标x1,y1,x2,y2,数据以空格分隔。    
    第三行输入的是:线段L1两端点在x和y方向上的偏移量,数据以空格分隔。
Output
    第一、二行输出的是点A与点B的坐标(按格式)。
    第三、四行输出的是在平移后的点A与点B的坐标(按格式)。
    第五行输出的是线段L两端点的坐标及长度(按格式)。
    第六行输出的是线段L1在平移后两端点的坐标及长度(按格式)。
Sample Input
5 5
0 0 10 10
1 1 5 5
Sample Output
PointA:[0,0]
PointB:[10,10]
PointA:[5,5]
PointB:[15,15]
(0,0)--(10,10):14.14
(1,1)--(6,6):7.07

 

 

 

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
class Point{
    int X,Y;
    public:
        Point(){
            X=0;
            Y=0; 
        }
        Point(int x,int y):X(x),Y(y){}
        int getX(){
            return X;
        }
        int getY(){
            return Y;
        }
        void setP(int x,int y){
            this->X+=x;
            this->Y+=y;
        }
};
class Line{
    int X1,Y1,X2,Y2;
    public:
        Line(){
            X2=1;
            Y2=1;
        }
        Line(int x1,int y1,int x2,int y2):X1(x1),Y1(y1),X2(x2),Y2(y2){}
        void setL(int x1,int y1,int x2,int y2){
                this->X1=x1;
            this->Y1=y1;
                this->X2+=x2;
            this->Y2+=y2;
        }
        int getP(){
            cout<<"("<<X1<<","<<Y1<<")"<<"--"<<"("<<X2<<","<<Y2<<")"<<endl;
        }
        float dis(){
            return sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1));
        }
};
int main()
 {
     int n,x1,x2,y1,y2;
     Point A,B(10,10);
     cout<<"PointA:["<<A.getX()<<","<<A.getY()<<"]\n";
     cout<<"PointB:["<<B.getX()<<","<<B.getY()<<"]\n";
     cin>>x1>>y1;
     A.setP(x1,y1); B.setP(x1,y1);
     cout<<"PointA:["<<A.getX()<<","<<A.getY()<<"]\n";
     cout<<"PointB:["<<B.getX()<<","<<B.getY()<<"]\n"; 

    cin>>x1>>y1>>x2>>y2;
     Line L(x1,y1,x2,y2);
     L.getP();printf("%.2lf\n",L.dis()); 

    Line L1(0,0,1,1);
     cin>>x1>>y1>>x2>>y2;
     L1.setL(x1,y1,x2,y2);
     L1.getP();printf("%.2lf\n",L1.dis()); 

    return 0; 
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2019-04-02 00:00  ---dgw博客  阅读(484)  评论(0编辑  收藏  举报