• 实验三 类和对象


    一、实验内容

    1、graph类内容补充

    代码如下:

    #ifndef GRAPH_H
    #define GRAPH_H
    
    // 类Graph的声明 
    class Graph {
        public:
            Graph(char ch, int n);   // 带有参数的构造函数 
            void draw();     // 绘制图形 
        private:
            char symbol;
            int size;
    };
    
    
    #endif
    graph.h
    // 类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() {
        int i, j, k;
        for (i = 1;i <= size;i++) {
            for (j = 1;j <= size - i;j++)
                cout << ' ';
            for (k = 1;k <= 2 * i - 1;k++)
                cout << symbol;
            cout << endl;
        }
    }
    graph.cpp
    #include <iostream>
    #include "graph.h"
    using namespace std;
    
    int main() {
        Graph graph1('*',5);
        graph1.draw();
        
        system("pause");
        system("cls");
        
        Graph graph2('$',7);
        graph2.draw();
        
        return 0; 
    } 
    main.cpp

     效果如下:

                  

    2、分数类Fraction加减乘除及比较

    #ifndef FRA_H
    #define FRA_H
    
    class Fraction {
    public:
        Fraction(int t0 = 0, int b0 = 1);
        friend Fraction add(Fraction &f1, Fraction &f2);//加法计算
        friend Fraction sub(Fraction &f1, Fraction &f2);//减法计算
        friend Fraction mul(Fraction &f1, Fraction &f2);//乘法计算
        friend Fraction div(Fraction &f1, Fraction &f2); //除法计算
        friend void com(Fraction &f1, Fraction &f2);     //比较大小
        void sim( );                      //化简
        void transform();           //转化
        void input();                  //输入
        void output();                //输出
    private:
        int top;
        int bottom;
    };
    #endif
    Fraction.h
    #include"Fraction.h"
    #include<iostream>
    #include<iomanip>
    #include<math.h>
    using std::cout;
    using std::cin;
    using std::endl;
    
    Fraction::Fraction(int t0, int b0):top(t0),bottom(b0){
        if (b0 = 0) {
            cout << "worrong fraction!";
            exit(0);
        }
    }
    
    Fraction add(Fraction &f1, Fraction &f2) {
        Fraction ad;
        ad.bottom = f1.bottom*f2.bottom;
        ad.top = f1.top*f2.bottom + f2.top*f1.bottom;
        ad.sim();
        return ad;
    }//加法
    
    Fraction sub(Fraction &f1, Fraction &f2) {
        Fraction su;
        su.bottom = f1.bottom*f2.bottom;
        su.top = f1.top*f2.bottom - f2.top*f1.bottom;
        su.sim();
        return su;
    }//减法
    
    Fraction mul(Fraction &f1, Fraction &f2) {
        Fraction mu;
        mu.bottom = f1.bottom*f2.bottom;
        mu.top = f1.top*f2.top;
        mu.sim();
        return mu;
    }//乘法
    
    Fraction div(Fraction &f1, Fraction &f2) {
        Fraction di;
        di.bottom = f1.bottom*f2.top;
        di.top = f1.top*f2.bottom;
        di.sim();
        return di;
    }//除法
    
    void com(Fraction &f1, Fraction &f2) {
        f1.sim();
        f2.sim();
        if (f1.top*f2.bottom > f1.bottom*f2.top)
            cout << f1.top << "/" << f1.bottom << " > " << f2.top << "/" << f2.bottom << endl;
        else if (f1.top*f2.bottom < f1.bottom*f2.top)
            cout << f1.top << "/" << f1.bottom << " < " << f2.top << "/" << f2.bottom << endl;
        else 
            cout << f1.top << "/" << f1.bottom << " = " << f2.top << "/" << f2.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::transform() {
        double p;
        p = top*1.0 / bottom;
        cout << std::setprecision(3) << p << endl;
    }//转化
    
    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";
    }//输出
    Fraction.cpp
    #include<iostream>
    #include"Fraction.h"
    using std::cout;
    using std::endl;
    
    int main() {
        Fraction a,b;
        Fraction c1, c2,c3,c4;
    
        cout << "Enter two Fraction:";
        a.input();
        b.input();
    
        cout << "a= ";       //输出a的分数和小数形式
        a.output();
        cout  << "= ";
        a.transform();
        cout << endl;
    
    
        cout << "b= ";       //输出b的分数和小数形式
        b.output();
        cout << "= ";
        b.transform();
        cout << endl;
    
        c1=add(a, b);        //a,b相加
        cout << "a+b= ";
        c1.output();
        cout << endl;
    
        c2=sub(a, b);        //a,b相减
        cout << "a-b= ";
        c2.output();
        cout << endl;
    
        c3=mul(a, b);        //a,b相乘
        cout << "a*b= ";
        c3.output();
        cout << endl;
    
        c4=div(a, b);        //a,b相除
        cout << "a/b= ";
        c4.output();
        cout << endl;
    
        com(a, b);           //比较a,b大小
    
        system("pause");
        return 0;
    }
    main.cpp

    效果如下:

    二、实验反思

    • graph实验需要将图形转化为代数,发现行列间的规律。
    • Fraction.h中需要考虑是否将函数设为友元函数,是否需要带参数,前前后后修改了很多次。
    • Fraction.cpp中多处需要分类讨论,后来修改的时间用的比一开始的框架时间长,考虑要周全。
    • 最后提出疑问,友元函数不能在主函数中引用吗?还是我使用的格式不对?
  • 相关阅读:
    选择排序
    插入排序
    冒泡排序
    java实现串的匹配和替换
    动态字符串的存储结构的实现
    静态串的存储结构以及增删改查
    链式队列的操作实现
    java中程序的执行的原理如怎么创建空间,创建对象等
    java中的环境变量的配置
    java的JVM以及java中代码的运行过程
  • 原文地址:https://www.cnblogs.com/zuiyankh/p/10737504.html
Copyright © 2020-2023  润新知