zoukankan      html  css  js  c++  java
  • 第三次课程作业

    四则运算器课程作业三

    github链接传送:

    - caculate.h
    - caculate.cpp
    - caculater_main.cpp
    - caculater.exe

    要求:

    • 要求将第一次作业中使用静态变量的方法进行改进,推荐使用传参、定义函数有返回值。

    • 本次作业要求在第一次课程作业的基础上进行迭代,考察文件读写、多参数主函数的知识点。

    • 多参数主函数要求:在命令行中输入的参数为:用户要求题目数量的文件路径、最终结果的文件路径。

    D:>a.exe  d://in.txt  d://out.txt
    
      a.exe为可执行文件,d://in.txt为用户要求的题目数量的文件路径,d://out.txt最终结果的文件路径
    
    • 要求将程序写成.cpp和.h分离的形式。

    • 主函数的设计如下:

    int main(int argc,char *argv[]){
        readFile()//读取用户要求的题目数量(请注意参数设置)
        scan()//该函数用于与用户交互,获取输入数据
        randomNumber()//用于随机生成数字
        randomOperation()//用于随机生成运算符
        generateExpression()//用于生成运算式
        calculateResult()//用于计算生成的运算式的结果
        writeFile()//将最终结果写入文件,写入内容包括:用户输入的题目数,每个生成的表达式、正确答案、用户输入的答案,保存到命令行中第二个参数指定的路径。(请注意参数设置)
        print()//将统计结果输出给用户
        return 0;
      }
    

    本次作业的感想:

    本次作业中实现了文件读写,c++文件流以及多参数主函数。在以前默认从命令行中输入数据的简单的“带互动的界面”转变到文件流的界面,将这一四则运算器的使用性更提升了一个档次,而主函数main多参数,更打破了以前代码默认主函数不写参数的习惯,了解认识到这些主函数的参数,使调用更加方便。

    对于文件读写和多参数主函数学习过程中遇到的问题:

    刚开始并不懂c++中的文件流,记得寒假时在随笔中有提到这个(寒假的调查里好像有文件的有关问题),但开始时自己只会固定(同一路径下的文件读写)简单的c中的foreopen,所以实现这个文件的读写也是通过百度查阅然后现学现用的,其中遇到的问题有:文件读写中,一开始用了运算符的重载将输出写入文件,虽然代码简洁很多,但是不符合要求,于是强行写了writefile封装写入,代码就变长了很多。。
    主函数参数需要判断,如果使用cmd打开,需要判断主函数参数的个数,否则出错。

    	string infilepath, outfilepath;
    	if (argc == 3)
    	{
    		infilepath = argv[1];
    		outfilepath = argv[2];
    	}
    	else cin >> infilepath >> outfilepath;
    
    

    一开始的想法:重载运算输出的代码

    	template <typename T>
    	MyFile &operator >>(T &t)
    	{
    		_ifs >> t;
    		return *this;
    	}
    	template <typename T>
    	MyFile &operator <<(T &t)
    	{
    		_ofs << t;
    		return *this;
    	}
    

    函数分离的体现:

    class Problem
    {
    public:
    	Problem(string infilepath, string outfilepath);
    	void init();				//初始化
    	void scan();				//该函数用于与用户交互,获取输入数据
    	void DisPlayAnswer();		//输出正确答案
    	void print();				//将统计结果输出给用户
    
    	//生成算式部分----------------------------------------------------------------------
    	int randomNumber();			//用于随机生成数字
    	char randomOperation();		//用于随机生成运算符
    	template<typename T> string Tostring(T i);
    	void generateExpression();	//用于生成运算式
    	//----------------------------------------------------------------------------------
    
    	//算式计算部分----------------------------------------------------------------------
    	float calculateResult();	//计算结果 
    	float caculate(float Operand1, float Operand2, char Operator);
    	//----------------------------------------------------------------------------------
    
    	//文件读写
    	int readFile();
    	template <typename T> void writeFile(T t);
    

    程序运行截图:






  • 相关阅读:
    洛谷 P1692 部落卫队
    洛谷 P1113 杂务
    洛谷 P1546 最短网络 Agri-Net
    洛谷 P2121 拆地毯
    洛谷 P2728 纺车的轮子 Spinning Wheels
    洛谷 P2126 Mzc家中的男家丁
    线段树双标记——乘法和加法
    A. Feed the cat
    洛谷 P1535 游荡的奶牛
    BZOJ1050 [HAOI2006]旅行
  • 原文地址:https://www.cnblogs.com/mercuialC/p/6828479.html
Copyright © 2011-2022 走看看