zoukankan      html  css  js  c++  java
  • C++实验三

    实验结论:

    1)Part1 验证性内容:以多文件结构组织的项目文件示例:在画布上可以上下左右移动的小球

    Ctrl C+V之后编译运行出现了如下界面:

    (假装有图片) 

    2)Part2 基于已有信息,补足并扩充程序。 在graph文件夹里提供有三个文件: graph.h (类Graph的声明) graph.cpp (类Graph的实现) main.cpp (类Graph的测试: 定义Graph类对象,调用绘图接口绘制图形)

     graph.h

    #if !defined GRAPH_H
    #define GRAPH_H
     
    class Graph {
        public:
            Graph(char ch, int n);   
            void draw();    
        private:
            char symbol;
            int size;
    };
     
     
    #endif
    View Code

    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();
        system("pause");
        return 0;
    }
    View Code

    main.cpp

    #include "graph.h"
    #include <iostream>
    using namespace std;
     
    Graph::Graph(char ch,int n):symbol(ch),size(n){
    }
     
    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;
      }    
    }
    View Code

    (继续假装有图片)

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

    Fraction.h

    #if !defined(FRACTION_H)
    #define FRACTION_H
    
    #include<iostream>
    #include<stdlib.h>
    using namespace std;
    
    namespace std{
        class Fraction{
            private:
                long num,den;
            public:
                Fraction(long p=0,long q=1);
                friend istream& operator>>(istream& istr,Fraction& x);
                Fraction operator+(Fraction& x)const;
                Fraction operator-(Fraction& x)const;
                Fraction operator*(Fraction& x)const;
                Fraction operator/(Fraction& x)const;
                Fraction operator-()const;
                int operator<(Fraction& x)const;
                int operator<=(Fraction& x)const;
                int operator>(Fraction& x)const;
                int operator>=(Fraction& x)const;
                int operator==(Fraction& x)const;
                int operator!=(Fraction& x)const;
                int getnum()const{
                return num;}
                int getden()const{
                return den;}
                void standardize(void);
                long gcd(long m,long n)const;
                void reduce();
        };
        
        Fraction::Fraction(long p,long q):num(p),den(q){
            if(den==0){
                cerr<<"分母不能为 0 !"<<endl;
                exit(1);
            }
                standardize();
                reduce(); 
        }
        
        void Fraction::standardize(){
            if(den<0){
                num=-num;
                den=-den;
            }
        }
        
        long Fraction::gcd(long m,long n)const{
            static long x;
            if(m>n){
                if(n==0)
                x=m;
                else
                gcd(n,m%n);
            }
            else{
                if(m==0)
                x=n;
                else
                gcd(m,n%m);
            }
            return x;
        }
        
        istream& operator>>(istream& istr,Fraction& x){
            char c;
            istr>>x.num>>c>>x.den;
            if(x.den==0){
                cerr<<"分母不为 0 !"<<endl;
                exit(1); 
            }
            x.standardize();
            x.reduce();
            return istr;
        }
        
        ostream& operator<<(ostream& ostr,const Fraction& x){
            ostr<<x.getnum()<<'/'<<x.getden();
            return ostr;
        }
        
        Fraction Fraction::operator+(Fraction& x)const{
        Fraction temp=Fraction(num*x.den+den*x.num,den*x.den);
        temp.reduce();
        return temp;
        }
        
        Fraction Fraction::operator-(Fraction& x)const{
        Fraction temp=Fraction(num*x.den-den*x.num,den*x.den);
        temp.reduce();
        return temp;
        }
        
        Fraction Fraction::operator*(Fraction& x)const{
        Fraction temp=Fraction(num*x.num,den*x.den);
        temp.reduce();
        return temp;
        }
        
        Fraction Fraction::operator/(Fraction& x)const{
        Fraction temp=Fraction(num*x.den,den*x.num);
        temp.standardize();
        temp.reduce();
        return temp;
        }
        
        Fraction Fraction::operator-()const{
        return Fraction(-num,den);
        }
        
        int Fraction::operator<(Fraction& x)const{
        return(num*x.getden()<den*x.getnum());
        }
        
        int Fraction::operator<=(Fraction& x)const{
        return(num*x.getden()<=den*x.getnum());
        }
        
        int Fraction::operator==(Fraction& x)const{
        return(num*x.getden()==den*x.getnum());
        }
        
        int Fraction::operator!=(Fraction& x)const{
        return(num*x.getden()!=den*x.getnum());
        }
        
        int Fraction::operator>(Fraction& x)const{
        return(num*x.getden()>den*x.getnum());
        }
        
        int Fraction::operator>=(Fraction& x)const{
        return(num*x.getden()>=den*x.getnum());
        }
        
        void Fraction::reduce(){
            long bigdivisor,tempnumerator;
            tempnumerator=(num<0)?-num:num;
            if(num==0)
            den=1;
            else{
                bigdivisor=gcd(tempnumerator,den);
                if(bigdivisor>1){
                    num/=bigdivisor;
                    den/=bigdivisor;
                    
                }
            }
        }
    /*    加加改改 可以输出带分数 
        void print(Fraction x){
            long wholepart=long(x.getnum()/x.getden());
            Fraction fractionpart=x-Fraction(wholepart);
            if(fractionpart==Fraction(0L))
            cout<<wholepart<<" ";
            else{
                fractionpart.reduce();
                if(wholepart<0)
                fractionpart=-fractionpart;
                if(wholepart!=0)
                cout<<wholepart<<" "<<fractionpart<<" ";
                else
                cout<<fractionpart<<" ";
            }
        }
    */
    }
    
    #endif
    View Code

    main.cpp

    #include"Fraction.h"
    int main(){
        Fraction r1,r2;
        cout<<"输入两个分数:"<<endl;
        cin>>r1>>r2;
        if(r1<r2)
        cout<<r1<<"<"<<r2<<endl;
        else if(r1==r2)
        cout<<r1<<"=="<<r2<<endl;
        else
        cout<<r1<<">"<<r2<<endl;
        cout<<"和为: "<<r1+r2<<endl;
        cout<<"积为: "<<r1*r2<<endl;
        cout<<"差为: "<<r1-r2<<endl;
        cout<<"商为: "<<r1/r2<<endl;
        return 0;
    }
    View Code

    实验总结:

    1.需要掌握多文件组织结构

    2.需要掌握运算符的重载

    3.对于类的接口,也最好稍微注意一下

    4.我是弟弟,是弟弟,前面都在Ctrl C+V,第三题分数的类,是看了一本书上的代码。

  • 相关阅读:
    sql 2008查看进程情况和对应语句,检查死锁进程
    sqlserver2008锁表语句详解(锁定数据库一个表)
    sqlserver 中的时间算法
    SQL server 2008 数据库优化常用脚本
    Win7下64位机安装SQL2000
    Git回退到服务器某个版本正确姿势
    一个有趣的倒计时问题
    如何申请AWS免费ACM
    AWS账号、用户、服务之间的关系
    [RDL]中多行组列组占比报表制作
  • 原文地址:https://www.cnblogs.com/kori/p/10771787.html
Copyright © 2011-2022 走看看