课程作业一

课程作业一

github链接

这次作业我选择了重构代码,因为我上几次作业使用了类似于出题模板的代码,导致我的程序随机性不够,于是我下定决心写一份符合我自己的要求的代码,期间遇见了许许多多的问题,例如计算生成算式值的时候,自己也想了了一个思路:用string型变量来存储算式,然后去寻找第一个“)”,然后计算它与前一个“(”之间算式的值,然后用这个值来替代原来的(a*b+c),然后继续寻找下一个“)”,如此的替换下去,就会把原来复杂的算式,变成一个没有括号的算式,但是在执行的时候我发现,如果括号之间的值为浮点数,就很难进行替代了。思索了很久,终于忍不住去论坛上寻找大佬的帮助,在一篇文章中看到可以用栈的方式来进行求解,具体方式就是扫描整个算式,遇见数字就将其转换为浮点型,存入temp变量中,接下来用下一次遇见的符号来判断是否将这个数值压入数字栈,然后将符号压入符号栈,检测本次符号与栈顶符号的优先级,来简化算式,具体的解释,我在代码中已经标注。

这次作业的感想

这次作业让懂得,写一篇完善的代码确实是一件难事,这次作业整整花费我两天的实践,编码到深夜,但是我觉得是值得的,至少我通过自己的努力写出了一份让自己满意的代码,也在网上学习到了很多东西,比如:vector型容器和map容器,在这期间我也向陈逸超学长,和赵畅学长问了一些问题,很感谢两位学长的耐心解答,之前的代码也告诫着我:偷懒是没有好果子吃的!

对分离函数的看法

分离函数能使自己的程序看起来更具有条理性,读者能很清楚的看出每个模块的功能,这正体现了C语言的特点:模块化设计。在以后的编码中我也会采用这种的编码格式。下面是我的主函数

int main() {

	srand(time(0));

	int sum = 0;

	class problem p;

	p.SelectLanguage();

	p.showTip();

	while (true)

	{

		string question = p.generateExpression();		//用于生成题目 

		cout << question << " = ";

		float answer = p.calculateResult(question);		//用于计算结果 

		//	cout << answer << endl;

		sum += p.scan(answer);					//用于用户输入并计算做对题目的数目 

		//	cout << sum << endl;

		if (p.end() == 1)                               //用于结束应用 

		{

			break;

		}

	}

	p.print(sum);                                //用于输出结果 

	return 0;

}
posted @ 2017-04-23 20:08  isLiuhy  阅读(266)  评论(2编辑  收藏  举报