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

头文件,源文件一开始分不清,然后查了一下,发现一篇讲的挺好的,下面是链接
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.还有就是一些题目中要求功能的函数如何编写的问题了,不知道如何编写使得满足要求。

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

posted @ 2018-04-23 21:53  花逢君  阅读(198)  评论(4编辑  收藏  举报