栖枝Fairy

导航

实验三

Part2 基于已有信息,补足并扩充程序。 在graph文件夹里提供有三个文件:
graph.h (类Graph的声明)
graph.cpp (类Graph的实现)
main.cpp (类Graph的测试: 定义Graph类对象,调用绘图接口绘制图形)
要求如下:
新建一个空项目,添加上述三个文件到项目中。
补足graph.h中类的成员函数draw()的实现,使得在main()中对类的测试能够实现以下效果: 主函数中测
试代码:

#ifndef GRAPH_H
#define GRAPH_H

//类Graph的声明
class Graph{
    public:
        Graph(char ch,int n);//带有参数的构造函数
        void draw();//绘制图形
    private:
        char symbol;
        int size; 
}; 

#endif
//类graph的实现

#include "graph.h"
#include <iostream>
using namespace std;

//带有参数的构造函数的实现
Graph::Graph(char ch,int n):symbol(ch),size(n){
} 

//成员draw()的实现
//功能:绘制size行,显示字符为symbol的制定图形样式
void Graph::draw(){
    for(int i=1;i<=size;i++)
    {
        for(int j=1;j<=size-i;j++)
        cout<<" "; 
    for(int j=size-i;j<=size+i-1;j++)
        cout<<symbol;
    cout<<endl;
    }
} 
#include <iostream>
#include "graph.h"
using namespace std;

int main(){
    Graph graph1('*',5);
    graph1.draw();
    
    system("pause");
    
    Graph graph2('$',7);
    graph2.draw();
    
    return 0;
}

结果:

Part3 基于需求描述设计、定义并实现分数类Fraction,并编写代码完成测试。 具体要求如下: 设计一个分数类
Fraction描述分数(两个整数的比值)

#ifndef FRACTION_H
#define FRACTION
class Fraction{
    public:
        Fraction(int top0,int bottom0);
        Fraction(); 
        static Fraction add(Fraction a,Fraction b);//加法运算 
        static Fraction sub(Fraction a,Fraction b);//减法运算
        static Fraction mul(Fraction a,Fraction b);//乘法运算
        static Fraction div(Fraction a,Fraction b);//除法运算 
        static void compare(Fraction a,Fraction b);//比较大小
        void sim();//化简 
        void input();//输入
        void output();//输出 
    private:
        int top;
        int bottom;
};

#endif 
#include "fraction.h"
#include <iostream>
#include <cmath>
using std::cin;
using std::cout;
using std::endl;

Fraction::Fraction(int top0,int bottom0):top(top0),bottom(bottom0){
    if(bottom0=0){
        cout<<"Wrong!";
        exit(0);
    }
}

Fraction::Fraction(){}

Fraction Fraction::add(Fraction a,Fraction b){
    Fraction add1;
    add1.bottom=a.bottom*b.bottom;
    add1.top=a.top*b.bottom+b.top*a.bottom;
    add1.sim(); 
    return add1;
}//加法

Fraction Fraction::sub(Fraction a,Fraction b){
    Fraction sub1;
    sub1.bottom=a.bottom*b.bottom;
    sub1.top=a.top*b.bottom-b.top*a.bottom;
    sub1.sim();
    return sub1;
} //减法

Fraction Fraction::mul(Fraction a,Fraction b){
    Fraction mul1;
    mul1.bottom=a.bottom*b.bottom;
    mul1.top=a.top*b.top;
    mul1.sim();
    return mul1;
} //乘法

Fraction Fraction::div(Fraction a,Fraction b){
    Fraction div1;
    div1.bottom=a.bottom*b.top;
    div1.top=a.top*b.bottom;
    div1.sim();
    return div1;
} //除法

void Fraction::compare(Fraction a,Fraction b){
    a.sim();
    b.sim();
    if(a.top*b.bottom>a.bottom*b.top)
       cout<<a.top<<"/"<<a.bottom<<">"<<b.top<<"/"<<b.bottom<<endl;
    else if(a.top*b.bottom<a.bottom*b.top)
       cout<<a.top<<"/"<<a.bottom<<"<"<<b.top<<"/"<<b.bottom<<endl;
    else
       cout<<a.top<<"/"<<a.bottom<<"="<<b.top<<"/"<<b.bottom<<endl;
} //比较

void Fraction::sim(){
    int i;
    if(top!=0){
        for(i=fabs(top);i>=1;i--){
            if(top%i==0&&bottom%i==0)
               break;
        }
        top/=i;
        bottom/=i;
    }
    if(bottom*top<0){
        top=-fabs(top);
        bottom=fabs(bottom);
    }
    else if(bottom*top>0){
        top=fabs(top);
        bottom=fabs(bottom);
    }
} //化简

void Fraction::input(){
    cin>>top>>bottom;
} //输入

void Fraction::output(){
    if(top!=0){
        if(bottom!=1)
           cout<<top<<"/"<<bottom;
        else if(bottom==1)
           cout<<top;
    }
    else
        cout<<"0";
} //输出 
#include <iostream>
#include<cstdlib>
#include "fraction.h"
using std::cout;
using std::endl;

int main(){
    Fraction m,n;
    Fraction c1,c2,c3,c4;
    
    cout<<"Enter numbers:";
    m.input();
    n.input();
    
    cout<<"m=";
    m.output();
    cout<<endl;
    cout<<"n=";
    n.output();
    cout<<endl;
    
    c1=Fraction::add(m,n);
    cout<<"m+n=";
    c1.output();
    cout<<endl;
    
    c2=Fraction::sub(m,n);
    cout<<"m-n=";
    c1.output();
    cout<<endl;
    
    c3=Fraction::mul(m,n);
    cout<<"m*n=";
    c3.output();
    cout<<endl;
    
    c4=Fraction::div(m,n);
    cout<<"m/n=";
    c4.output();
    cout<<endl;
    
    Fraction::compare(m,n);
    
    system("pause");
    return 0;
}

结果:

实验总结:

分子分母这题做了整整两个小时,程序总是容易出错,检查之后发现竟然是拼写错误。自我反思一下,我还是太粗糙了。还有做的时候对一些语句的不熟悉,还是做的太少。

posted on 2019-04-21 16:50  栖枝Fairy  阅读(129)  评论(1编辑  收藏  举报