南京信息工程大学实验报告(四)

心理学哲学批判性思维 2018-04-23

头文件,源文件一开始分不清,然后查了一下,发现一篇讲的挺好的,下面是链接
https://blog.csdn.net/SleepBoyer/article/details/54577848

第二题
原来的包含在选做一里面了,下面是选做一的代码

graph.cpp

#include "graph.h" 
#include <iostream>


using namespace std;

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


// 成员函数draw()的实现
// 功能:绘制size行,显示字符为symbol的指定图形样式 
//       size和symbol是类Graph的私有成员数据 
void Graph::draw() {
    for (int i=1;i<size+1;i++){        //控制行数 
        for (int j=0;j<size-i;j++){    //输出每行符号前的空格 
          cout<<' ';
        }
        for (int k=0;k<2*i-1;k++){     //输出图案符号 
          cout<<symbol;
        }
          cout<<endl;                 //换至下一行 
}

}
            // 补足代码,实现「实验4.pdf」文档中展示的图形样式 
void Graph::redraw()
{
     while(1){
        cin>>symbol>>size;
        draw();
     }
    
}

graph.h

#ifndef GRAPH_H
#define GRAPH_H

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


#endif

Main.cpp

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


int main() {
    Graph graph1('*',5), graph2('$',7) ;  // 定义Graph类对象graph1, graph2 
    graph1.draw(); // 通过对象graph1调用公共接口draw()在屏幕上绘制图形 
    graph2.draw(); // 通过对象graph2调用公共接口draw()在屏幕上绘制图形
    graph1.redraw();
    return 0; 
}

draw的算法:一行一行输出,最外层循环控制行数,里面第一个循环输出空格(有规律),紧接着的循环输出指定符号个数(有规律),接着换行,一行就完成了,可以进行下一行。

南京信息工程大学实验报告(四)南京信息工程大学实验报告(四)

关于第二道改变控制台前景颜色和背景颜色的,百度了一下,发现有两种,一种是利用graphics.h 但是这个好像要在专门的一个软件里面,另一种是Windows.h 虽然两种都没有弄明白orz

第三道选做改变位置,有一点想法,但是没试过,就是getchar()一个字符,然后去重新定义一下输出软,但是又个疑惑,如果一开始是上或者是左键,图案怎么移动?

第三题实话没有做出来,程序有问题,一直报错说我的载入模糊不清,但是我不知道怎么改了,希望有大神帮我看一下,谢谢惹~
南京信息工程大学实验报告(四)

fraction.cpp

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

Fraction::Fraction(int t,int b):top(t),botton(b){
}
Fraction::Fraction(){                  //函数的重载 
    top=0;
    botton=1;
}
Fraction::Fraction(int t):top(t){     //函数的重载
       botton=1;
}
Fraction::~Fraction()
{}
void Fraction::fenshu(){
    cout<<top<<"/"<<botton;
}

void Fraction::add(Fraction &f){
    cout<<top*f.botton+top*f.botton<<"/"<<botton*f.botton<<endl;  //加法          //加法 
     } 

void Fraction::minus(Fraction &f){
    cout<<top*f.botton-f.top*botton<<"/"<<botton*f.botton<<endl; //减法           
    }
    
void Fraction::multiplication(Fraction &f){
    cout<<top*f.top<<"/"<<botton*f.botton<<endl;    //乘法        
        }
        
void Fraction::division(Fraction &f){
    cout<<top*f.botton<<"/"<<botton*f.top<<endl;    //除法    
        }
        
void Fraction::compare(Fraction &f){
    int m=top,n=botton;
    int p=f.top,q=f.botton;
    double w=top/botton;
    double j=f.top/f.botton;
        if (w>j){
          cout<<"b较大"<<endl;    
        }   
          if (w<j){
            cout<<"b较小"<<endl;
          }
        else {
            cout<<"一样大"<<endl;
        }
        
}
        
void Fraction::refenshu(){                    //分数输入输出 
    while(1){
        cin>>top>>botton;
        fenshu();
    }

}

fraction.h

#ifndef FRACTION_H
#define FRACTION_H
class Fraction{
    public:
        Fraction(int t=0,int b=1);
        Fraction();
        Fraction(int t);
        ~Fraction();
        Fraction(Fraction &f);
        void fenshu();
        void add(Fraction &f);
        void minus(Fraction &f);
        void multiplication(Fraction &f);
        void division(Fraction &f);
        void compare(Fraction &f);
        void refenshu();
    private:
        int top;
        int botton;
        
};
#endif

main.cpp

# include <iostream>
# include "fraction.h"
using namespace std;
int main(){
    Fraction a;
    Fraction b(3,4);
    Fraction c(5);
    b.add(c);
    b.minus(c);
    b.multiplication(c);
    b.division(c);
    b.compare(c);
    b.refenshu();
    return 0;
}

做这题的时候有很多很多的问题暴露出来:
1.复制构造函数的运用,我运用他的时候,并没有将它放入函数成员参数中,导致了报错。
2.实现函数的时候忘记将类放在前面,对类中函数与对象的输出还不够确定代码怎么敲,掌握的不好。
3.重载函数一开始忘了使用,运用的不熟。
4.还有就是一些题目中要求功能的函数如何编写的问题了,不知道如何编写使得满足要求。

最后还是要提醒一下自己再把第三四章内容重新看看,在这几次作业中都有很多这两章内容的细节需要注意。

相关推荐