2017《面向对象程序设计》课程作业一

传送门

这次作业思路没有什么好说的,主要是让我们优化代码,优化项目。尽量做到模块化。

主要按照作业要求去完成。
以下是我完成后再main函数中的主要内容

int main()
{
	double n,right=0;
	char a[4];//随机整数 
	char oper[3];//随机运算符 
	char *ex; 
	double answers;//存储正确结果 
	n=scanf();//开始界面
	for(int i=0;i<n;i++)
	{
		srand((unsigned)time(NULL));//不出现相同的随机数 
		for(int j=0;j<4;j++)
		{
	
			a[j]=randomNumber();//随机数 
		}			
		for(int j=0;j<3;j++)
		{
	
			oper[j]=randomOperation();//运算符 
		}	
		
		ex=generateExpression(a,oper);

		answers=calculateResult(ex);//储存正确答案 	

		if(answers==(int)answers) //检查是否存在小数 ,结果检验 
		{
			cout << i+1 <<".  "<<ex;
			right+=scanf2(answers);//不是小数则进行输入答案
		}

		else//如果答案为小数,则重新进行循环
		{
			i=i-1;
		}

		delete [] ex;
	}	

	print(right,n);//结果诊断 	
	
	return 0;
}

经历:

一开始,我在分离函数的时候,认为,带有参数什么的,太麻烦了,要写很多,有时写了, 还要返回函数值,就投机取巧,把大部分变量变成全局变量。然后自以为完美的完成了,后面去问了一下学长,感觉自己并不是真正做到函数的模块化。(在第一个版本中就是全局变量的情况--那样也间接说明我实际上对于函数运用还很不熟悉)

接着,我就开始进行参数的添加,将大部分全局变量,又变成了在各个函数的局部变量。在这过程中遇到了挺多问题的。主要问题是函数返回一个数组的问题。最后采用了动态内存来存储,将其错误清除了。

最后就敲定了目前在github上的最新版本。

不足之处:

1.这一次,我感觉我还不是很按照作业要求来完成,在main里面我将人机交互方面分成两部分来写。在部分函数使用含义上,有一部分函数可能有功能交叉的情况。

2.写完这个代码后,发现有时题目出现变慢了,我认为原因可能是在于排除计算结果是小数的情况部分。我尝试输出一些东西时,总能发现小数部分出现次数会挺多的。然后就需要每次跳过其情况,重新随机生成表达式。这样最后导致了在计算题出现的表达式中除法的情况变得比较少---其实在第一次写这个作业就出现的情况了。

还有,经过这次修改后,在上次出现的一个bug : @ 该字符的出现,在这次运行中没有出现了--实际上自己还不清楚其原因。TAT。

感想:

通过这次作业,感觉强化了自己对于函数的用法,对于模块化,比较有深入的了解。也发现自己基础还是不够扎实,还需要厚植基础0.0目前这就想到这些了。

后续更新:

昨天因为时间仓促,就直接在自己的本来的源代码上进行修改,我认为,一个源代码文件总不可以和main函数放在一起,直接好几百行吧。于是今天就改成了项目形式0.0(不知道算不算)用一个头文件来去包含哪些我写的函数。一开始也遇到一些,使用头文件错误的信息。后感觉还是有点投机取巧,把函数名称和函数内容都放到了头文件中,没有分成两个文件(一个包含函数名称,一个包含函数内容的形式),这样的话,别人也才能够在我的main中看下去,不然都不知道我的main函数写在哪里。

我修改完之后,运行时出现一个问题弹出:


目前不是很清楚。

下面是我改成项目后,在main文件的源代码:

#include <iostream>
#include "allfunctions.h" 
int main()
{
	double n,right=0;//题数和正确数
	
	char a[4];//随机整数 
	
	char oper[3];//随机运算符
	 
	char *ex; //表达式存储
	
	double answers;//存储正确结果 
	
	n=scanf();//开始界面
	
	for(int i=0;i<n;i++)
	{
		srand((unsigned)time(NULL));//不出现相同的随机数
		
		for(int j=0;j<4;j++)
			a[j]=randomNumber();//随机数 
			
		for(int j=0;j<3;j++)
			oper[j]=randomOperation();//运算符 
					
		ex=generateExpression(a,oper);//这里面我返回的是动态数组,在网上查了一下,要在末尾将动态数组删除,所以有了最下面那个语句
		
		answers=calculateResult(ex);//储存正确答案 	

		if(answers==(int)answers) //检查是否存在小数 ,结果检验 
		{
			cout << i+1 <<".  "<<ex;
			right+=scanf2(answers);//不是小数则进行输入答案
		}
		
		else//如果答案为小数,则重新进行循环
			i=i-1;
		
		delete [] ex;//删除动态数组
	}	
	
	print(right,n);//结果诊断 
		
	return 0;
}

ps:我把main文件名称改成--计算题项目,所以要在github上找的话就是 allfunctions.h 和计算题项目.cpp,而之前的版本是在原版本的 多语言 上面进行修改的,因此可以 打开 多语言.cpp 查看

posted @ 2017-04-23 21:33  Linese  阅读(598)  评论(5编辑  收藏  举报